Integrate new IP type from Tom Ivar Helbekkmo.
authorBruce Momjian
Sat, 3 Oct 1998 05:41:01 +0000 (05:41 +0000)
committerBruce Momjian
Sat, 3 Oct 1998 05:41:01 +0000 (05:41 +0000)
33 files changed:
contrib/README
contrib/ip_and_mac/Makefile [deleted file]
contrib/ip_and_mac/README [deleted file]
contrib/ip_and_mac/README.ORIG [deleted file]
contrib/ip_and_mac/ip.c [deleted file]
contrib/ip_and_mac/ip.sql [deleted file]
contrib/ip_and_mac/ip_orig.c [deleted file]
contrib/ip_and_mac/ipaddr.html [deleted file]
contrib/ip_and_mac/ipi.sql [deleted file]
contrib/ip_and_mac/mac.c [deleted file]
contrib/ip_and_mac/mac.h [deleted file]
contrib/ip_and_mac/mac.sql [deleted file]
contrib/ip_and_mac/t1.sql [deleted file]
contrib/ip_and_mac/test.DATA [deleted file]
contrib/ip_and_mac/test.sql [deleted file]
contrib/ip_and_mac/test1.sql [deleted file]
contrib/ip_and_mac/test2.sql [deleted file]
doc/README.ipaddr [new file with mode: 0644]
src/backend/parser/gram.c
src/backend/utils/adt/Makefile
src/backend/utils/adt/inet_net_ntop.c [new file with mode: 0644]
src/backend/utils/adt/inet_net_pton.c [new file with mode: 0644]
src/backend/utils/adt/ip.c [new file with mode: 0644]
src/backend/utils/adt/mac.c [new file with mode: 0644]
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_proc.h
src/include/catalog/pg_type.h
src/include/utils/builtins.h
src/include/utils/mac.h [new file with mode: 0644]
src/tools/pgindent/pgindent

index b66dd8012c6b5b6b8609c58668d30771cf64814a..88dc7b645ad99b09dc36c026b01eef485541ea0f 100644 (file)
@@ -31,10 +31,6 @@ int8 -
    64-bit integer arithmetic for Postgres
    by Thomas G. Lockhart 
 
-ip_and_mac -
-   PostgreSQL type extensions for IP and MAC addresses
-   by Tom Ivar Helbekkmo 
-
 isbn_issn -
    PostgreSQL type extensions for ISBN (books) and ISSN (serials)
    by Garrett A. Wollman 
diff --git a/contrib/ip_and_mac/Makefile b/contrib/ip_and_mac/Makefile
deleted file mode 100644 (file)
index 0071eb6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#  PostgreSQL types for IP and MAC addresses
-#
-#  $Id: Makefile,v 1.5 1998/06/16 05:35:10 momjian Exp $
-
-all: ip.so mac.so
-
-ip.so: ip.o
-   ld -Bshareable -o ip.so ip.o
-
-ip.o: ip.c
-   cc -g -O -fPIC -I/usr/local/pgsql/include -c ip.c
-
-mac.so: mac.o
-   ld -Bshareable -o mac.so mac.o
-
-mac.o: mac.c mac.h
-   cc -g -O -fPIC -I/usr/local/pgsql/include -c mac.c
-
-install: ip.so mac.so
-   install -c ip.so mac.so /usr/local/pgsql/contrib/ip_and_macs
-
-clean:
-   rm -f *.o *.so *.b
-#
-#  eof
-#
diff --git a/contrib/ip_and_mac/README b/contrib/ip_and_mac/README
deleted file mode 100644 (file)
index c946f20..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-This directory contain 2 new classes - macaddr to store mac addresses
-written by (Bergen, Norway, 1998-01-31, Tom Ivar Helbekkmo
-([email protected])), and ipaddr type and ipaddr_ops operator class,
-rewritten by me ([email protected], Aleksei Roudnev, Moscow, Russia,
-25.05.98) and written first by Bergen.
-
-To see the description of macaddr type, read README.ORIG file. To see
-the description of ipaddr type, read ipaddr.html file.
-                       ^^^^^^^^^^^
-
-This ipaddr type differ slightly from the original one. First, if you
-input '193.124.23.0' it sets /24 prefix instead of /32 (this is in
-accordance to CISCO's notification and our internal data bases and
-records); if you input '0.0.0.0' it's '0.0.0.0/0' (default) but not NULL
-or NOADDR value.
-
-Then, you can store ADDRESS/PREFIX pair, even if ADDRESS is not the
-subnet address (for example, you can store interface address and mask at
-the single attribute). This allow us to determine, for example, which
-interfaces/routers are accessible by connected network for our interface
-(select * from database where '193.124.23.4' @ interface_address);
-
-Then, it have been written a few new functions and a few operators
-(addr1 @ addr - TRUE if addr1 is the part of subnet addr2);
-'ipaddr_print' function allow you to convert address to any form you
-want; and so on.
-
-And then, I add ipi.sql setup script and test1.sql + test2.sql test
-scripts to allow and test indexing by this new class.
-
-This ipaddr type/opclass are used for our internal IP ROUTING and
-ACCOUNTING data base, and I hope it shpuld be usefull for more people.
-
-For those who like crazy tasks, I propose to realise 'RTREE' indexing
-method to allow effectively use '@' operation for the binding statistic
-records to the customers etc networks. Note 'ipaddr' type can be written
-as 'start,end' coordination pair and it's possible to define all '<<,
-&<, @@, etc graphical operators over this type.
-
-
-25.05.1998, Aleksei Roudnev, [email protected], Relcom, Moscow, Russia. /+7-095-194-1995.
-==========================================================================================
diff --git a/contrib/ip_and_mac/README.ORIG b/contrib/ip_and_mac/README.ORIG
deleted file mode 100644 (file)
index d0e4f43..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-PostgreSQL type extensions for IP and MAC addresses.
----------------------------------------------------
-
-$Id: README.ORIG,v 1.2 1998/06/16 05:35:10 momjian Exp $
-
-I needed to record IP and MAC level ethernet addresses in a data
-base, and I really didn't want to store them as plain strings, with
-no enforced error checking, so I put together the accompanying code
-as my first experiment with adding a data type to PostgreSQL.  I
-then thought that this might be useful to others, both directly and
-as a very simple example of how to do this sort of thing, so here
-it is, in the hope that it will be useful.
-
-IP addresses are implemented as a 6 byte struct (this may be 1 byte
-more than is useful, but I figured that since it has to be at least 5,
-it might as well be an even number of bytes) that contains the four
-byte address and a mask width.  The external representation of an IP
-address looks like '158.37.96.15/32' (or just '158.37.96.15', which is
-understood to mean the same thing).  This address happens to be part
-of a subnet where I work; '158.37.96.0/24', which itself is a part of
-the larger subnet allocated to our site, which is '158.37.96.0/21',
-which again, if you go by the old book, is part of the class "B" net
-called '158.37.0.0/16'.
-
-Input and output functions are supplied, along with the "normal" <,
-<=, =, >=, > and <> operators, which all do what you expect.  In
-addition, there is a function to check whether a given address is a
-member of a given subnet: ipaddr_in_net(addr, net), and functions to
-return the netmask and the broadcast address of a given network:
-ipaddr_mask(net) and ipaddr_bcast(net).
-
-MAC level ethernet addresses are implemented as a 6 byte struct that
-contains the address as unsigned chars.  Several input forms are
-accepted; the following are all the same address: '08002b:010203',
-'08002b-010203', '0800.2b01.0203', '08-00-2b-01-02-03' and
-'08:00:2b:01:02:03'.  Upper and lower case is accepted for the digits
-'a' through 'f'.  Output is always in the latter of the given forms.
-
-As with IP addresses, input and output functions are supplied as well
-as the "normal" operators, which do what you expect.  As an extra
-feature, a function macaddr_manuf() is defined, which returns the name
-of the manufacturer as a string.  This is currently held in a
-hard-coded struct internal to the C module -- it might be smarter to
-put this information into an actual data base table, and look up the
-manufacturer there.  (Another TODO, for both new data types, is to
-interface them to indices.  If anyone can explain this to me in a way
-that is easier to understand than the current documentation, I would
-be most grateful!)
-
-I don't know what changes are needed to the Makefile for other systems
-than the one I'm running (NetBSD 1.3), but anyway: to install on a BSD
-system: fix the path names in the SQL files and the Makefile if you
-need to, then make, make install, slurp the SQL files into psql or
-whatever, and you're off.  Enjoy!
-
-Bergen, Norway, 1998-01-31, Tom Ivar Helbekkmo ([email protected]).
diff --git a/contrib/ip_and_mac/ip.c b/contrib/ip_and_mac/ip.c
deleted file mode 100644 (file)
index 0b56375..0000000
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * PostgreSQL type definitions for IP addresses.
- *
- * $Id: ip.c,v 1.5 1998/06/16 05:35:10 momjian Exp $
- */
-
-#include 
-
-#include 
-#include 
-
-/*
- * This is the internal storage format for IP addresses:
- */
-
-typedef struct ipaddr
-{
-   uint32      address;
-   int16       width;
-}          ipaddr;
-
-/*
- * Various forward declarations:
- */
-
-ipaddr    *ipaddr_in(char *str);
-char      *ipaddr_out(ipaddr * addr);
-
-bool       ipaddr_lt(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_le(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_eq(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_ge(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_gt(ipaddr * a1, ipaddr * a2);
-
-bool       ipaddr_ne(ipaddr * a1, ipaddr * a2);
-
-int4       ipaddr_cmp(ipaddr * a1, ipaddr * a2);
-
-bool       ipaddr_in_net(ipaddr * a1, ipaddr * a2);
-ipaddr    *ipaddr_mask(ipaddr * a);
-ipaddr    *ipaddr_bcast(ipaddr * a);
-
-/*
- * Build a mask of a given width:
- */
-
-unsigned long
-build_mask(unsigned char bits)
-{
-   unsigned long mask = 0;
-   int         i;
-
-   for (i = 0; i < bits; i++)
-       mask = (mask >> 1) | 0x80000000;
-   return mask;
-}
-
-/*
- * IP address reader.  Note how the count returned by sscanf()
- * is used to determine whether the mask size was specified.
- */
-
-ipaddr *
-ipaddr_in(char *str)
-{
-   int         a,
-               b,
-               c,
-               d,
-               w;
-   ipaddr     *result;
-   int         count;
-
-   if (strlen(str) > 0)
-   {
-
-       count = sscanf(str, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &w);
-
-       if (count < 4)
-       {
-           elog(ERROR, "ipaddr_in: error in parsing \"%s\"", str);
-           return (NULL);
-       }
-       if ( count == 3 ) {
-              d = 0;
-              count = 4;
-       };
-       if (count == 4)
-       {
-           w = 32;
-           if ( a >= 192 && a < 224 && d == 0 ) w = 24;
-           if ( a >= 128 && a < 192 && d == 0 && c == 0 ) w = 16;
-           if ( a > 0    && a < 128 && c == 0 && b == 0 && a < 128 ) w = 8;
-           if ( a == 0 && b == 0 && c == 0 && d == 0 ) w = 0;
-       };
-       if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
-           (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
-           (w < 0) || (w > 32))
-       {
-           elog(ERROR, "ipaddr_in: illegal address \"%s\"", str);
-           return (NULL);
-       }
-   }
-   else
-   {
-       a = b = c = d = w = 255;  /* special case for missing address */
-   }
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-
-   result->address = (uint32) ((a << 24) | (b << 16) | (c << 8) | d);
-   result->width = w;
-
-   return (result);
-}
-
-/*
- * IP address output function.  Note mask size specification
- * generated only for subnets, not for plain host addresses.
- */
-
-char *
-ipaddr_out(ipaddr * addr)
-{
-   char       *result;
-   int a, b, c, d, w;
-   if (addr == NULL)
-       return (NULL);
-
-   result = (char *) palloc(32);
-
-   w = addr->width;
-   a = (addr->address >> 24) & 0xff;
-   b = (addr->address >> 16) & 0xff;
-   c = (addr->address >>  8) & 0xff;
-   d = (addr->address >>  0) & 0xff;
-   /* Check by missing address (w > 32 )  */
-   if ( w >= 0 && w <= 32  )
-   {
-       /* In case of NATURAL network don't output the prefix */
-       if ( (a == 0  && b == 0 && c == 0 && d == 0 && w ==  0 ) ||
-            (a < 128 && b == 0 && c == 0 && d == 0 && w ==  8 ) ||
-            (a < 192           && c == 0 && d == 0 && w == 16 ) ||
-            (a < 224                     && d == 0 && w == 24 ) ||
-            ( d != 0 ) ) w = -1;
-       if (w == -1 )
-           sprintf(result, "%d.%d.%d.%d",a,b,c,d);
-       else
-           sprintf(result, "%d.%d.%d.%d/%d",a,b,c,d,w);
-   }
-   else
-   {
-       result[0] = 0;          /* special case for missing address */
-   }
-   return (result);
-}
-
-/*
- * Print ipaddr by format
- * %A - address
- * %M - maska
- * %P - prefix
- * %B - negated maska
- */
-# define TXT_LEN_0 4
-text *
-ipaddr_print(ipaddr * addr, text *fmt)
-{
-   text       *result;
-   char *p, *op;
-   uint32          aaa;
-   int a, b, c, d;
-   if (addr == NULL)
-       return (NULL);
-
-   result = (text  *) palloc( sizeof(text) + 64 );
-
-   /* Check by missing address (w > 32 )  */
-   for ( p = fmt->vl_dat, op = result->vl_dat; *p && (p - fmt->vl_dat) < (fmt->vl_len - TXT_LEN_0)  && (op - result->vl_dat) < 48; p++) {
-          if ( *p != '%' ) {
-              *op++ = *p;
-              continue;
-          };
-          p++;
-          if ( *p == 'A' )
-          {
-              aaa = addr->address;
-              goto pta;
-          };
-          if ( *p == 'M' ) {
-              aaa = build_mask(addr->width);
-              goto pta;
-          }
-          if ( *p == 'B' ) {
-              aaa = build_mask(32 - addr->width) >> addr->width;
-              goto pta;
-          }
-          if ( *p == 'P' ) {
-              sprintf(op,"%d",addr->width);
-              while ( *op) op++;
-              continue;
-          };
-          *op++ = *p;
-          continue;
-pta:
-          a = (aaa >> 24) & 0xff;
-          b = (aaa >> 16) & 0xff;
-          c = (aaa >>  8) & 0xff;
-          d = (aaa >>  0) & 0xff;
-          sprintf(op, "%d.%d.%d.%d",a,b,c,d);
-          while ( *op ) op++;
-          continue;
-   };
-   *op = 0;
-   result->vl_len = (op - result->vl_dat) + TXT_LEN_0;
-   return (result);
-}
-
-/*
- * Boolean tests for magnitude.
- */
-
-bool
-ipaddr_lt(ipaddr * a1, ipaddr * a2)
-{
-   if ( a1->address == a2->address ) return(a1->width <  a2->width);
-   return (a1->address < a2->address);
-};
-
-bool
-ipaddr_le(ipaddr * a1, ipaddr * a2)
-{
-   if ( a1->address == a2->address ) return(a1->width <= a2->width);
-   return (a1->address <= a2->address);
-};
-
-bool
-ipaddr_eq(ipaddr * a1, ipaddr * a2)
-{
-   if ( a1->address == a2->address ) return(a1->width == a2->width);
-   return (a1->address == a2->address);
-};
-
-bool
-ipaddr_ge(ipaddr * a1, ipaddr * a2)
-{
-   if ( a1->address == a2->address ) return(a1->width >= a2->width);
-   return (a1->address >= a2->address);
-};
-
-bool
-ipaddr_gt(ipaddr * a1, ipaddr * a2)
-{
-   if ( a1->address == a2->address ) return(a1->width > a2->width);
-   return (a1->address > a2->address);
-};
-
-bool
-ipaddr_ne(ipaddr * a1, ipaddr * a2)
-{
-   if ( a1->address == a2->address ) return(a1->width != a2->width);
-   return (a1->address != a2->address);
-};
-
-/*
- * Comparison function for sorting:
- */
-
-int4
-ipaddr_cmp(ipaddr * a1, ipaddr * a2)
-{
-   if (a1->address < a2->address)
-       return -1;
-   else if (a1->address > a2->address)
-       return 1;
-   else
-   {
-       if (a1->width < a2->width)
-           return -1;
-       else if (a1->width > a2->width)
-           return 1;
-   }
-   return 0;
-}
-
-/*
- *      The number of hosts in the network
- */
-int4
-ipaddr_len(ipaddr * a)
-{
-   if ( a->width > 32 || a->width < 0 ) return(0);
-   return(1 << (32 - a->width));
-}
-
-/*
- *      The number of network bits
- */
-int4
-ipaddr_pref(ipaddr * a)
-{
-   if ( a->width > 32 || a->width < 0 ) return(0);
-   return(a->width);
-}
-
-/*
- *      The host addr as an integer
- */
-int4
-ipaddr_integer(ipaddr * a)
-{
-   return(a->address);
-}
-
-/*
- * Test whether an address is within a given subnet:
- */
-
-bool
-ipaddr_in_net(ipaddr * a1, ipaddr * a2)
-{
-   uint32      maskbits;
-
-   if (a1->width < a2->width)
-       return FALSE;
-   if ((a1->width == 32) && (a2->width == 32))
-       return ipaddr_eq(a1, a2);
-   maskbits = build_mask(a2->width);
-   if ((a1->address & maskbits) == (a2->address & maskbits))
-       return TRUE;
-   return FALSE;
-}
-
-/*
- *      Test whether an address is the network or a host in the network:
- */
-
-bool
-ipaddr_is_net(ipaddr * a)
-{
-   uint32      maskbits;
-
-   if (a->width == 32)
-       return FALSE;
-   maskbits = build_mask(a->width);
-   if ( (a->address & maskbits) == a->address )
-       return TRUE;
-   return FALSE;
-}
-
-/*
- * Pick out just the mask of a network:
- */
-
-ipaddr *
-ipaddr_mask(ipaddr * a)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = build_mask(a->width);
-   result->width = 32;
-
-   return result;
-}
-
-/*
- * Return the broadcast address of a network:
- */
-
-ipaddr *
-ipaddr_bcast(ipaddr * a)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = a->address;
-   result->address |= (build_mask(32 - a->width) >> a->width);
-   result->width = 32;
-
-   return result;
-}
-
-/*
- *      Return the base network of the address/network:
- */
-
-ipaddr *
-ipaddr_net(ipaddr * a)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = a->address;
-   result->address &= build_mask(a->width);
-   result->width = a->width;
-
-   return result;
-}
-
-/*
- * Compose ipaddr from ADDR and PREFIX
- */
-ipaddr *
-ipaddr_compose(int4 addr, int4 pref)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   if ( pref < 0 || pref > 32 ) {
-          pref = 255;
-          addr = 0;
-   };
-   result->address = addr;
-   result->width = pref;
-   return result;
-}
-
-/*
- *      Plus and Minus operators
- */
-ipaddr *
-ipaddr_plus(ipaddr * a, int4 i)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = a->address + i;
-   result->width = a->width;
-
-   return result;
-}
-
-ipaddr *
-ipaddr_minus(ipaddr * a, int4 i)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = a->address - i;
-   result->width = a->width;
-
-   return result;
-}
-
-/*
- * eof
- */
diff --git a/contrib/ip_and_mac/ip.sql b/contrib/ip_and_mac/ip.sql
deleted file mode 100644 (file)
index 2d402bd..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
---
--- PostgreSQL code for IP addresses.
---
--- $Id: ip.sql,v 1.5 1998/06/16 05:35:10 momjian Exp $
---      Invoced from  1998/02/14 17:58:04 scrappy
---
---      New - INPUT/OUTPUT, functions, indexing by btree, test.
---      PART # 1 - ip.sql - load new type, functions and operators.
---      Then you should execute ipi.sql - add ipaddr_ops class to allow indexing.
-
-load '/usr/local/pgsql/contrib/ip_and_macs/ip.so';
-
---
--- Input and output functions and the type itself:
---      Note - we input 193.124.23.1 as /32, and 193.124.23.0 as /24.
---      We output /24 network withouth /24 suffix, and /32 hosts wothouth suffixes
---      if it is not '0' address of /24 network.
---      Just the same, we threat 0.0.0.0 as 0.0.0.0/0 == DEFAULT.
---
-
-create function ipaddr_in(opaque)
-   returns opaque
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-
-
-create function ipaddr_out(opaque)
-   returns opaque
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-create type ipaddr (
-   internallength = 6,
-   externallength = variable,
-   input = ipaddr_in,
-   output = ipaddr_out
-);
-
---
--- Print address by format
--- %A - address
--- %P - /Pref
--- %M - maska
--- %B - reversed maska
-drop function ipaddr_print;
-create function ipaddr_print(ipaddr, text)
-   returns text
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-);
-
---
--- The various boolean tests:
---      In case if addresseas are equal, we compare prefix length
---      It means 193.124.23.0/24 < 193.124.23.0/32
---
-
-create function ipaddr_lt(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-create function ipaddr_le(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-create function ipaddr_eq(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-create function ipaddr_ge(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-create function ipaddr_gt(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
-create function ipaddr_ne(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Test if a1 is in net a2
--- Return TRUE if a1 is IN a2 subnet or if a1 == a2
---
-create function ipaddr_in_net(ipaddr, ipaddr)
-   returns bool
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Return the network from the host/network address. This means
--- 193.124.23.4/24 -> 193.124.23.0/24.
--- This allow to use interface address (with the real netmask) to create
--- network, and to link interfaces and addresses belongs to the same network.
---
-
- create function ipaddr_net(ipaddr)
-   returns ipaddr
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Return TRUE if addr describe NETWORK, not host in the network
--- It's equivalent to ipaddr_net(a) == a
---
-
- create function ipaddr_is_net(ipaddr)
-   returns boolean
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Return the number of the hosts in the network
---
-
- create function ipaddr_len(ipaddr)
-   returns int4
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Return the prefix length of the network
---
-
- create function ipaddr_pref(ipaddr)
-   returns int4
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Convert network into the integer.
--- Can be used for 'compose' function
---
-
- create function ipaddr_integer(ipaddr)
-   returns int4
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Compose ipaddr from the ADDRESS and PREF
--- ipaddr_compose(ipaddr_integer(a),ipaddr_pref(a)) == a
---
-
- create function ipaddr_compose(int4,int4)
-   returns ipaddr
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Return MASK for the network
---
-
- create function ipaddr_mask(ipaddr)
-   returns ipaddr
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Return BROADCAST address for the network
---
-
- create function ipaddr_bcast(ipaddr)
-   returns ipaddr
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Compare 2 addresses. First, compare addresses, then, compare prefixes (if the addresses
--- are the same).
---
-
- create function ipaddr_cmp(ipaddr,ipaddr)
-   returns int4
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Plus and Minus operators
---
-
- create function ipaddr_plus(ipaddr,int4)
-   returns ipaddr
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
- create function ipaddr_minus(ipaddr,int4)
-   returns ipaddr
-   as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-   language 'c';
-
---
--- Now the operators.  Note how some of the parameters to some
--- of the 'create operator' commands are commented out.  This
--- is because they reference as yet undefined operators, and
--- will be implicitly defined when those are, further down.
---
-
--- drop operator < ( ipaddr, ipaddr);
-create operator < (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
--- negator = >=,
-   procedure = ipaddr_lt,
-   restrict = intltsel,
-   join = intltjoinsel
-);
-
--- drop operator <= (ipaddr,ipaddr);
-create operator <= (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
--- negator = >,
-   procedure = ipaddr_le,
-   restrict = intltsel,
-   join = intltjoinsel
-);
-
--- drop operator = (ipaddr,ipaddr);
-create operator = (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
-   commutator = =,
--- negator = <>,
-   restrict = eqsel,
-   join = eqjoinsel,
-   procedure = ipaddr_eq
-);
-
-
--- drop operator >= (ipaddr,ipaddr);
-create operator >= (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
-   negator = <,
-   procedure = ipaddr_ge,
-   restrict = intgtsel,
-   join = intgtjoinsel
-);
-
--- drop operator > (ipaddr,ipaddr);
-create operator > (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
-   negator = <=,
-   procedure = ipaddr_gt,
-   restrict = intgtsel,
-   join = intgtjoinsel
-);
-
--- drop operator <> (ipaddr,ipaddr);
-create operator <> (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
-   negator = =,
-   procedure = ipaddr_ne,
-   restrict = neqsel,
-   join = neqjoinsel
-);
-
-create operator @ (
-   leftarg = ipaddr,
-   rightarg = ipaddr,
-   procedure = ipaddr_in_net
-);
-
-create operator + (
-   leftarg = ipaddr,
-   rightarg = int4,
-   procedure = ipaddr_plus
-);
-
-create operator - (
-   leftarg = ipaddr,
-   rightarg = int4,
-   procedure = ipaddr_minus
-);
-
--- *****************************************************************************************
--- * For now, you have: input/output (remember, '193.124.23.0' means /24 network,          *
--- *                                            '193.124.23.1' means /32 host)             *
--- * <, <=, = <>, >=, > relational operations; host @ net (host is the part of the net) op *
--- * varchar ipaddr_print(addr, '%A/%P %M %B') - print by pattern function                 *
--- * ipaddr ipaddr_mask(a),ipaddr_bcast(a),ipaddr_net(a) functions (mask,bcast, start addr)*
--- * int4 ipaddr_len(a) - lenght of subnet; ipaddr_pref(a) - prefix length,                *
--- * int4 ipaddr_integer(a) - integer value; ipaddr ipaddr_compose(integer_addr,pref_len)  *
--- *                                                compose ipaddr from addr and mask      *
--- * '+' and '-' operators (ipaddr = ipaddr + integer),(ipaddr = ipaddr - integer) ops     *
--- *****************************************************************************************
--- *   R E A D    T H I S    T E X T   B E F O R E   E X I T I N G :                       *
--- *       Now you should execute ipi.sql to allow BTREE indexing on this class.           *
--- *****************************************************************************************
--- eof
diff --git a/contrib/ip_and_mac/ip_orig.c b/contrib/ip_and_mac/ip_orig.c
deleted file mode 100644 (file)
index 316e824..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * PostgreSQL type definitions for IP addresses.
- *
- * $Id: ip_orig.c,v 1.1 1998/06/16 05:35:11 momjian Exp $
- */
-
-#include 
-
-#include 
-#include 
-
-/*
- * This is the internal storage format for IP addresses:
- */
-
-typedef struct ipaddr
-{
-   uint32      address;
-   int16       width;
-}          ipaddr;
-
-/*
- * Various forward declarations:
- */
-
-ipaddr    *ipaddr_in(char *str);
-char      *ipaddr_out(ipaddr * addr);
-
-bool       ipaddr_lt(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_le(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_eq(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_ge(ipaddr * a1, ipaddr * a2);
-bool       ipaddr_gt(ipaddr * a1, ipaddr * a2);
-
-bool       ipaddr_ne(ipaddr * a1, ipaddr * a2);
-
-int4       ipaddr_cmp(ipaddr * a1, ipaddr * a2);
-
-bool       ipaddr_in_net(ipaddr * a1, ipaddr * a2);
-ipaddr    *ipaddr_mask(ipaddr * a);
-ipaddr    *ipaddr_bcast(ipaddr * a);
-
-/*
- * Build a mask of a given width:
- */
-
-unsigned long
-build_mask(unsigned char bits)
-{
-   unsigned long mask = 0;
-   int         i;
-
-   for (i = 0; i < bits; i++)
-       mask = (mask >> 1) | 0x80000000;
-   return mask;
-}
-
-/*
- * IP address reader.  Note how the count returned by sscanf()
- * is used to determine whether the mask size was specified.
- */
-
-ipaddr *
-ipaddr_in(char *str)
-{
-   int         a,
-               b,
-               c,
-               d,
-               w;
-   ipaddr     *result;
-   int         count;
-
-   if (strlen(str) > 0)
-   {
-
-       count = sscanf(str, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &w);
-
-       if (count < 4)
-       {
-           elog(ERROR, "ipaddr_in: error in parsing \"%s\"", str);
-           return (NULL);
-       }
-
-       if (count == 4)
-           w = 32;
-
-       if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
-           (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
-           (w < 0) || (w > 32))
-       {
-           elog(ERROR, "ipaddr_in: illegal address \"%s\"", str);
-           return (NULL);
-       }
-   }
-   else
-   {
-       a = b = c = d = w = 0;  /* special case for missing address */
-   }
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-
-   result->address = (uint32) ((a << 24) | (b << 16) | (c << 8) | d);
-   result->address &= build_mask(w);
-   result->width = w;
-
-   return (result);
-}
-
-/*
- * IP address output function.  Note mask size specification
- * generated only for subnets, not for plain host addresses.
- */
-
-char *
-ipaddr_out(ipaddr * addr)
-{
-   char       *result;
-
-   if (addr == NULL)
-       return (NULL);
-
-   result = (char *) palloc(32);
-
-   if (addr->address > 0)
-   {
-       if (addr->width == 32)
-           sprintf(result, "%d.%d.%d.%d",
-                   (addr->address >> 24) & 0xff,
-                   (addr->address >> 16) & 0xff,
-                   (addr->address >> 8) & 0xff,
-                   addr->address & 0xff);
-       else
-           sprintf(result, "%d.%d.%d.%d/%d",
-                   (addr->address >> 24) & 0xff,
-                   (addr->address >> 16) & 0xff,
-                   (addr->address >> 8) & 0xff,
-                   addr->address & 0xff,
-                   addr->width);
-   }
-   else
-   {
-       result[0] = 0;          /* special case for missing address */
-   }
-   return (result);
-}
-
-/*
- * Boolean tests for magnitude.
- */
-
-bool
-ipaddr_lt(ipaddr * a1, ipaddr * a2)
-{
-   return (a1->address < a2->address);
-};
-
-bool
-ipaddr_le(ipaddr * a1, ipaddr * a2)
-{
-   return (a1->address <= a2->address);
-};
-
-bool
-ipaddr_eq(ipaddr * a1, ipaddr * a2)
-{
-   return (a1->address == a2->address);
-};
-
-bool
-ipaddr_ge(ipaddr * a1, ipaddr * a2)
-{
-   return (a1->address >= a2->address);
-};
-
-bool
-ipaddr_gt(ipaddr * a1, ipaddr * a2)
-{
-   return (a1->address > a2->address);
-};
-
-bool
-ipaddr_ne(ipaddr * a1, ipaddr * a2)
-{
-   return (a1->address != a2->address);
-};
-
-/*
- * Comparison function for sorting:
- */
-
-int4
-ipaddr_cmp(ipaddr * a1, ipaddr * a2)
-{
-   if (a1->address < a2->address)
-       return -1;
-   else if (a1->address > a2->address)
-       return 1;
-   else
-       return 0;
-}
-
-/*
- * Test whether an address is within a given subnet:
- */
-
-bool
-ipaddr_in_net(ipaddr * a1, ipaddr * a2)
-{
-   uint32      maskbits;
-
-   if (a1->width < a2->width)
-       return FALSE;
-   if ((a1->width == 32) && (a2->width == 32))
-       return ipaddr_eq(a1, a2);
-   maskbits = build_mask(a2->width);
-   if ((a1->address & maskbits) == (a2->address & maskbits))
-       return TRUE;
-   return FALSE;
-}
-
-/*
- * Pick out just the mask of a network:
- */
-
-ipaddr *
-ipaddr_mask(ipaddr * a)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = build_mask(a->width);
-   result->width = 32;
-
-   return result;
-}
-
-/*
- * Return the broadcast address of a network:
- */
-
-ipaddr *
-ipaddr_bcast(ipaddr * a)
-{
-   ipaddr     *result;
-
-   result = (ipaddr *) palloc(sizeof(ipaddr));
-   result->address = a->address;
-   result->address |= (build_mask(32 - a->width) >> a->width);
-   result->width = 32;
-
-   return result;
-}
-
-/*
- * eof
- */
diff --git a/contrib/ip_and_mac/ipaddr.html b/contrib/ip_and_mac/ipaddr.html
deleted file mode 100644 (file)
index 8b7d3eb..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-
-
-
-   
-   
-
-
-
-

New object class for the IP ADDRESSES manipulations.

-
-

1. Description:

-
-
    -

    Type name: ipaddr

    -Data lenght: 6 bytes
    -Data context: ip address and prefix length

    -
    -
    -

    2. How to install:

    -
    -
      -

      Use script ip.sql to add new type, new functions and operators

      -to the data base.

      -
      -

      Use script ipi.sql to add new type and new operator class ipaddr_ops

      -to the index system and allow indexing by this new type (with search by
      -'>', '>=', '<', '<=', '='
      -boolean operators).

      -
      -

      Use scripts 'test1.sql' and 'test2.sql' (edit second script

      -first) to check if indexing work properly.

      -
      -
      -

      3. Input / output formsts.

      -
      -

      New type stores IP address and IP prefix in the single data attribute.

      -To input data, you should use the form

      -
      -
        -

        DDD.DDD.DDD.DDD/PP

        -
        -
        -

        for the address DDD.DDD.DDD.DDD and prefix PP (prefix

        -is len from 0 (for 0.0.0.0) to 32 (for 255.255.255.255)). You can miss
        -/PP n two cases:

        -
        -
          -
        • You enter host address (this means /32 prefix) and this is not the
        • -address of the natural class A, B or C network.
          -
          -
        • You enter natural class A, B, C network with the /8, /16 and /24 prefix.
        • -
          -
          -

          For example, 193.124.23.0 should be read as '193.124.23.0/24'

          -network, and '193.124.23.1' should be read as /32 host address.
          -To enter interface address 193.124.23.6/24, you should use exact
          -form '193.124.23.6/24'.

          -
          -

          The address '0.0.0.0' means '0.0.0.0/0', this is default in terms

          -of routers.

          -
          -

          ipaddr type data are printed just in the same form (to allow

          -input/output compatibility) - 193.124.23.0/24 should be printed
          -as '193.124.23.0' and '193.124.23.1/32' should be printed
          -as '193.124.23.1'.

          -
          -

          There is special function to convert ipaddr data into string by the

          -format:

          -
          -
            -

            char ipaddr_print(ipaddr,format)

            -
            -
            -

            format consist of plain text and %C special characters:

            -
            -
              -

              %A - address in form ddd.ddd.ddd.ddd,

              -%M - network mask in form ddd.ddd.ddd.ddd,
              -%B - negated mask ('0.0.0.7' for '/29' prefix, for example),
              -%P - prefix (withouth '/' delimiter).

              -
              -
              -

              4. Operators.

              -
              -
              -
              -Left argument
              -A1
              -
              -Op
              -
              -Right argument
              -A2
              -
              -Result
              -R
              -
              -Description
              -
              -
              -
              -ipaddr
              -
              -<
              -
              -ipaddr
              -
              -boolean
              -
              -Compare addresses, if they are equal, compare prefixes,
              -
              -
              -
              -ipaddr
              -
              -<=
              -
              -ipaddr
              -
              -boolean
              -
              -Compare addresses, if they are equal, compare prefixes,
              -
              -
              -
              -ipaddr
              -
              -=
              -
              -ipaddr
              -
              -boolean
              -
              -Compare addresses, if they are equal, compare prefixes,
              -
              -
              -
              -ipaddr
              -
              ->=
              -
              -ipaddr
              -
              -boolean
              -
              -Compare addresses, if they are equal, compare prefixes,
              -
              -
              -
              -ipaddr
              -
              ->
              -
              -ipaddr
              -
              -boolean
              -
              -Compare addresses, if they are equal, compare prefixes,
              -
              -
              -
              -ipaddr
              -
              -<>
              -
              -ipaddr
              -
              -boolean
              -
              -Compare addresses, if they are equal, compare prefixes,
              -
              -
              -
              -ipaddr
              -
              -@
              -
              -ipaddr
              -
              -boolean
              -
              -True if A1 is the part of network (subnetwork) A2 or if A1 = A2
              -
              -
              -
              -ipaddr
              -
              -+
              -
              -int4
              -
              -ipaddr
              -
              -Increase address A1 on A2 value (A2 is integer).
              -
              -
              -
              -ipaddr 
              -
              --
              -
              -int4
              -
              -ipaddr
              -
              -Decrease address A1 on A2.
              -
              -
              -
              -

              5. Functions.

              -
              -

              There is a lot of functions defined for new ipaddr data type. Some of

              -them are duplicated by operators described above, some are not. 

              -
              -
              -
              -Function(arguments)
              -
              -Function type
              -
              -Description
              -
              -Operator
              -
              -
              -
              -ipaddr_print(ipaddr, text)
              -
              -text
              -
              -Converts ipaddr to the text string by format from the second argument.
              -Format can contain %A - address, %M - mask, %B - reversed mask, %P - prefix,
              -and any other characters.
              -
              -
              -
              -
              -
              -ipaddr_lt(ipaddr, ipaddr)
              -
              -boolean
              -
              -Compare by '<'
              -
              -<
              -
              -
              -
              -ipaddr_le(ipaddr,ipaddr)
              -
              -boolean
              -
              -Compare by '<='
              -
              -<=
              -
              -
              -
              -ipaddr_eq(ipaddr, ipaddr)
              -
              -boolean
              -
              -Compare by '='
              -
              -=
              -
              -
              -
              -ipaddr_ne(ipaddr, ipaddr)
              -
              -boolean
              -
              -Compare by '<>'
              -
              -<>
              -
              -
              -
              -ipaddr_ge(ipaddr, ipaddr)
              -
              -boolean
              -
              -Compare by '>='
              -
              ->=
              -
              -
              -
              -ipaddr_gt(ipaddr, ipaddr)
              -
              -boolean
              -
              -Compare by '>'
              -
              ->
              -
              -
              -
              -ipaddr_in_net(ipaddr, ipaddr)
              -
              -boolean
              -
              -True if fisrt argument is the host or subnetwork of the second
              -argument (first address is equal or included into the second one)
              -
              -@
              -
              -
              -
              -ipaddr_net(ipaddr)
              -
              -ipaddr
              -
              -Return the network (with the 0 in host bits) for the argument; for
              -example ipaddr_net('193.124.23.1/24') = '193.124.23.0';
              -
              -
              -
              -
              -
              -ipaddr_bcast(ipaddr)
              -
              -ipaddr
              -
              -Return broadcast address (with the /32 prefix) for the network described
              -by argument.
              -
              -
              -
              -
              -
              -ipaddr_is_net(ipaddr)
              -
              -boolean
              -
              -True if ipaddr is network address; false if its' the
              -host in the network. For the /32 addresses, returns false.
              -
              -
              -
              -
              -
              -ipaddr_mask(ipaddr)
              -
              -ipaddr
              -
              -Return netmask (with /32 prefix) for the network.
              -
              -
              -
              -
              -
              -ipaddr_prefix(ipaddr)
              -
              -int4
              -
              -Return the prefix size (from 0 to 32).
              -
              -
              -
              -
              -
              -ipaddr_len(ipaddr)
              -
              -int4
              -
              -Return the number of addresses in the particular network (for example,
              -256 for /24 prefix).
              -
              -
              -
              -
              -
              -ipaddr_integer(ipaddr)
              -
              -int4
              -
              -Return IP address (withouth the prefix) as integer.
              -
              -
              -
              -
              -
              -ipaddr_compose(int4,int4)
              -
              -ipaddr
              -
              -Compose ipaddr object from ip address (first argument) and prefix lenght
              -(second argument). ipaddr_compose(ipaddr_integer(a),ipaddr_prefix(a)) =
              -a.
              -
              -
              -
              -
              -
              -ipaddr_plus(ipaddr, int4)
              -
              -ipaddr
              -
              -Operator PLUS (addres increased, prefix does not changed)
              -
              -+
              -
              -
              -
              -ipaddr_minus(ipaddr, int4)
              -
              -ipaddr
              -
              -Operator MINUS (address decreased, prefix does not changed).
              -
              --
              -
              -
              -
              -ipaddr_cmp(ipaddr, ipaddr)
              -
              -int4
              -
              -Compare it's arguments and return -1, 0 or +1.
              -
              -
              -
              -
              -
              -

              5. Usage.

              -
              -

              New type opens many interesting futures for the ip routing or ip accounting

              -networks. For example, you can search all interfaces connected to the same
              -phisical network by comparing ipaddr_net(interface_address) /if you store
              -address as address/prefix pair in the single attribute, and so on.

              -
              -

              Unfortunately, I had not time (and was not too familiar with RTree ideas

              -used in Postgres) to check if it's possible to use RTree indexing for the
              -fast routing lookups by data base. It's important task because usial usage
              -of this future is _determine the nearest network the particular address
              -contain to, and link the accounting record to this network_. And so on.

              -
              -

              Write any questions or wishes to me by e-mail. This is BETA version

              -of this package for now, because we are building our IP routing data base
              -just now and did not tested all this fucntions under heavy conditions;
              -through I hope this functions are too simple for the hidden bugs, and they
              -was tested carefully at the simple tests.

              -
              -

              6. Installation.

              -
              -
                -
              1. Translate shared library ip.so:
              2. -make
                -
                -
              3. Install shared library to the proper place (/usr/local/pgsql/contrib/ip_and_macs)
              4. -make install
                -(in case if your system is not FreeBSD, it can be nessesary modify 'Makefile'
                -before).
                -
                -
              5. Public to the accessible place scripts ip.sql (installation of data
              6. -type), ipi.sql (describing of this data type for the proper indexing),
                -test1.sql, test2.sql, test.DATA (test and data). Modify test1.sql in accordance
                -to real location of the data files.
                -
                -
              7. To add new data type into your data base, exec scripts in this data
              8. -base:
                -psql DATA_BASE
                -\i ip.sql -- change this to the real location
                -\i ipi.sql -- change this to the real location
                -
                -
              9. To test this data type, exec test1.sql and test2.sql SQL scripts.
              10. -
                -
                -

                7. Download.

                -
                -

                You can download this data type from http://relcom.EU.net/ip_class.tar.gz

                -
                -


                -
                -
                -

                -

                -
                -

                Aleksei Roudnev, The Network Operation Centre, Relcom Network; Moscow,

                -Russia.

                -
                -
                -
                -
                  -
                  -
                  -
                  diff --git a/contrib/ip_and_mac/ipi.sql b/contrib/ip_and_mac/ipi.sql
                  deleted file mode 100644 (file)
                  index 66dc1e3..0000000
                  +++ /dev/null
                  @@ -1,64 +0,0 @@
                  -begin;
                  -select pgam.oid from pg_am  pgam
                  -where amname = 'btree';
                  ---
                  --- Temporary oper table
                  ---
                  --- drop table tmp_op;
                  -create table tmp_op ( oprname name, opi int2);
                  ---
                  --- Fill in this table
                  ---
                  -insert into tmp_op values('<','1');
                  -insert into tmp_op values('<=','2');
                  -insert into tmp_op values('=','3');
                  -insert into tmp_op values('>=','4');
                  -insert into tmp_op values('>','5');
                  -select * from tmp_op;
                  ---
                  --- Add record to the pg_opclass
                  ---
                  -DELETE FROM pg_opclass WHERE opcname = 'ipaddr_ops';
                  -INSERT INTO pg_opclass (opcname,opcdeftype)
                  -select 'ipaddr_ops',oid from pg_type where typname = 'ipaddr';
                  ---
                  --- And determine oid
                  ---
                  -SELECT opc.oid,opc.opcname
                  - FROM pg_opclass opc
                  - WHERE opc.opcname = 'ipaddr_ops';
                  ---
                  -SELECT o.oid AS opoid, o.oprname
                  -INTO TABLE ipaddr_tmp
                  -FROM pg_operator o, pg_type t
                  -WHERE o.oprleft = t.oid and o.oprright = t.oid and t.typname = 'ipaddr';
                  -SELECT * FROM ipaddr_tmp;
                  ---
                  -INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy, amopselect, amopnpages)
                  -SELECT am.oid,opcl.oid,c.opoid,t.opi,'btreesel'::regproc, 'btreenpage'::regproc
                  -FROM pg_am am, pg_opclass opcl, ipaddr_tmp c, tmp_op t
                  -WHERE t.oprname = c.oprname
                  -      and amname = 'btree'
                  -      and opcname = 'ipaddr_ops';
                  ---
                  -SELECT prc.oid, prc.proname FROM pg_proc prc
                  -WHERE prc.proname = 'ipaddr_cmp';
                  ---
                  -INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
                  -SELECT pgam.oid, opc.oid,prc.oid,'1'::int2
                  -FROM  pg_am  pgam,
                  -      pg_opclass opc,
                  -      pg_proc prc
                  -WHERE prc.proname = 'ipaddr_cmp'
                  - and  pgam.amname = 'btree'
                  - and  opc.opcname = 'ipaddr_ops';
                  -
                  -drop table tmp_op;
                  -DROP TABLE ipaddr_tmp;
                  -COMMIT;
                  -
                  --- *****************************************************************
                  --- * Now you should test this by running   test1.sql and test2.sql *
                  --- * In test2, be sure the 'explain' operator show you             *
                  --- * search by index in the last line of output                    *
                  --- *****************************************************************
                  diff --git a/contrib/ip_and_mac/mac.c b/contrib/ip_and_mac/mac.c
                  deleted file mode 100644 (file)
                  index f4f5fff..0000000
                  +++ /dev/null
                  @@ -1,244 +0,0 @@
                  -/*
                  - * PostgreSQL type definitions for MAC addresses.
                  - *
                  - * $Id: mac.c,v 1.3 1998/02/26 04:27:44 momjian Exp $
                  - */
                  -
                  -#include 
                  -
                  -#include 
                  -#include 
                  -
                  -#include "mac.h"
                  -
                  -/*
                  - * This is the internal storage format for MAC addresses:
                  - */
                  -
                  -typedef struct macaddr
                  -{
                  -   unsigned char a;
                  -   unsigned char b;
                  -   unsigned char c;
                  -   unsigned char d;
                  -   unsigned char e;
                  -   unsigned char f;
                  -}          macaddr;
                  -
                  -/*
                  - * Various forward declarations:
                  - */
                  -
                  -macaddr    *macaddr_in(char *str);
                  -char      *macaddr_out(macaddr * addr);
                  -
                  -bool       macaddr_lt(macaddr * a1, macaddr * a2);
                  -bool       macaddr_le(macaddr * a1, macaddr * a2);
                  -bool       macaddr_eq(macaddr * a1, macaddr * a2);
                  -bool       macaddr_ge(macaddr * a1, macaddr * a2);
                  -bool       macaddr_gt(macaddr * a1, macaddr * a2);
                  -
                  -bool       macaddr_ne(macaddr * a1, macaddr * a2);
                  -
                  -int4       macaddr_cmp(macaddr * a1, macaddr * a2);
                  -
                  -text      *macaddr_manuf(macaddr * addr);
                  -
                  -/*
                  - * Utility macros used for sorting and comparing:
                  - */
                  -
                  -#define hibits(addr) \
                  -  ((unsigned long)((addr->a<<16)|(addr->b<<8)|(addr->c)))
                  -
                  -#define lobits(addr) \
                  -  ((unsigned long)((addr->c<<16)|(addr->e<<8)|(addr->f)))
                  -
                  -/*
                  - * MAC address reader.  Accepts several common notations.
                  - */
                  -
                  -macaddr    *
                  -macaddr_in(char *str)
                  -{
                  -   int         a,
                  -               b,
                  -               c,
                  -               d,
                  -               e,
                  -               f;
                  -   macaddr    *result;
                  -   int         count;
                  -
                  -   if (strlen(str) > 0)
                  -   {
                  -
                  -       count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
                  -       if (count != 6)
                  -           count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f);
                  -       if (count != 6)
                  -           count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f);
                  -       if (count != 6)
                  -           count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f);
                  -       if (count != 6)
                  -           count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f);
                  -
                  -       if (count != 6)
                  -       {
                  -           elog(ERROR, "macaddr_in: error in parsing \"%s\"", str);
                  -           return (NULL);
                  -       }
                  -
                  -       if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
                  -           (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
                  -           (e < 0) || (e > 255) || (f < 0) || (f > 255))
                  -       {
                  -           elog(ERROR, "macaddr_in: illegal address \"%s\"", str);
                  -           return (NULL);
                  -       }
                  -   }
                  -   else
                  -   {
                  -       a = b = c = d = e = f = 0;      /* special case for missing
                  -                                        * address */
                  -   }
                  -
                  -   result = (macaddr *) palloc(sizeof(macaddr));
                  -
                  -   result->a = a;
                  -   result->b = b;
                  -   result->c = c;
                  -   result->d = d;
                  -   result->e = e;
                  -   result->f = f;
                  -
                  -   return (result);
                  -}
                  -
                  -/*
                  - * MAC address output function.  Fixed format.
                  - */
                  -
                  -char *
                  -macaddr_out(macaddr * addr)
                  -{
                  -   char       *result;
                  -
                  -   if (addr == NULL)
                  -       return (NULL);
                  -
                  -   result = (char *) palloc(32);
                  -
                  -   if ((hibits(addr) > 0) || (lobits(addr) > 0))
                  -   {
                  -       sprintf(result, "%02x:%02x:%02x:%02x:%02x:%02x",
                  -               addr->a, addr->b, addr->c, addr->d, addr->e, addr->f);
                  -   }
                  -   else
                  -   {
                  -       result[0] = 0;          /* special case for missing address */
                  -   }
                  -   return (result);
                  -}
                  -
                  -/*
                  - * Boolean tests.
                  - */
                  -
                  -bool
                  -macaddr_lt(macaddr * a1, macaddr * a2)
                  -{
                  -   return ((hibits(a1) < hibits(a2)) ||
                  -           ((hibits(a1) == hibits(a2)) && lobits(a1) < lobits(a2)));
                  -};
                  -
                  -bool
                  -macaddr_le(macaddr * a1, macaddr * a2)
                  -{
                  -   return ((hibits(a1) < hibits(a2)) ||
                  -           ((hibits(a1) == hibits(a2)) && lobits(a1) <= lobits(a2)));
                  -};
                  -
                  -bool
                  -macaddr_eq(macaddr * a1, macaddr * a2)
                  -{
                  -   return ((hibits(a1) == hibits(a2)) && (lobits(a1) == lobits(a2)));
                  -};
                  -
                  -bool
                  -macaddr_ge(macaddr * a1, macaddr * a2)
                  -{
                  -   return ((hibits(a1) > hibits(a2)) ||
                  -           ((hibits(a1) == hibits(a2)) && lobits(a1) >= lobits(a2)));
                  -};
                  -
                  -bool
                  -macaddr_gt(macaddr * a1, macaddr * a2)
                  -{
                  -   return ((hibits(a1) > hibits(a2)) ||
                  -           ((hibits(a1) == hibits(a2)) && lobits(a1) > lobits(a2)));
                  -};
                  -
                  -bool
                  -macaddr_ne(macaddr * a1, macaddr * a2)
                  -{
                  -   return ((hibits(a1) != hibits(a2)) || (lobits(a1) != lobits(a2)));
                  -};
                  -
                  -/*
                  - * Comparison function for sorting:
                  - */
                  -
                  -int4
                  -macaddr_cmp(macaddr * a1, macaddr * a2)
                  -{
                  -   if (hibits(a1) < hibits(a2))
                  -       return -1;
                  -   else if (hibits(a1) > hibits(a2))
                  -       return 1;
                  -   else if (lobits(a1) < lobits(a2))
                  -       return -1;
                  -   else if (lobits(a1) > lobits(a2))
                  -       return 1;
                  -   else
                  -       return 0;
                  -}
                  -
                  -/*
                  - * The special manufacturer fetching function.  See "mac.h".
                  - */
                  -
                  -text *
                  -macaddr_manuf(macaddr * addr)
                  -{
                  -   manufacturer *manuf;
                  -   int         length;
                  -   text       *result;
                  -
                  -   for (manuf = manufacturers; manuf->name != NULL; manuf++)
                  -   {
                  -       if ((manuf->a == addr->a) &&
                  -           (manuf->b == addr->b) &&
                  -           (manuf->c == addr->c))
                  -           break;
                  -   }
                  -   if (manuf->name == NULL)
                  -   {
                  -       result = palloc(VARHDRSZ + 1);
                  -       memset(result, 0, VARHDRSZ + 1);
                  -       VARSIZE(result) = VARHDRSZ + 1;
                  -   }
                  -   else
                  -   {
                  -       length = strlen(manuf->name) + 1;
                  -       result = palloc(length + VARHDRSZ);
                  -       memset(result, 0, length + VARHDRSZ);
                  -       VARSIZE(result) = length + VARHDRSZ;
                  -       memcpy(VARDATA(result), manuf->name, length);
                  -   }
                  -   return result;
                  -}
                  -
                  -/*
                  - * eof
                  - */
                  diff --git a/contrib/ip_and_mac/mac.h b/contrib/ip_and_mac/mac.h
                  deleted file mode 100644 (file)
                  index 954dc05..0000000
                  +++ /dev/null
                  @@ -1,133 +0,0 @@
                  -/*
                  - * PostgreSQL type definitions for MAC addresses.
                  - *
                  - * $Id: mac.h,v 1.3 1998/02/26 04:27:50 momjian Exp $
                  - */
                  -
                  -typedef struct manufacturer
                  -{
                  -   unsigned char a;
                  -   unsigned char b;
                  -   unsigned char c;
                  -   char       *name;
                  -}          manufacturer;
                  -
                  -manufacturer manufacturers[] = {
                  -   {0x00, 0x00, 0x0C, "Cisco"},
                  -   {0x00, 0x00, 0x0E, "Fujitsu"},
                  -   {0x00, 0x00, 0x0F, "NeXT"},
                  -   {0x00, 0x00, 0x10, "Sytek"},
                  -   {0x00, 0x00, 0x1D, "Cabletron"},
                  -   {0x00, 0x00, 0x20, "DIAB"},
                  -   {0x00, 0x00, 0x22, "Visual Technology"},
                  -   {0x00, 0x00, 0x2A, "TRW"},
                  -   {0x00, 0x00, 0x32, "GPT Limited"},
                  -   {0x00, 0x00, 0x5A, "S & Koch"},
                  -   {0x00, 0x00, 0x5E, "IANA"},
                  -   {0x00, 0x00, 0x65, "Network General"},
                  -   {0x00, 0x00, 0x6B, "MIPS"},
                  -   {0x00, 0x00, 0x77, "MIPS"},
                  -   {0x00, 0x00, 0x7A, "Ardent"},
                  -   {0x00, 0x00, 0x89, "Cayman Systems"},
                  -   {0x00, 0x00, 0x93, "Proteon"},
                  -   {0x00, 0x00, 0x9F, "Ameristar Technology"},
                  -   {0x00, 0x00, 0xA2, "Wellfleet"},
                  -   {0x00, 0x00, 0xA3, "Network Application Technology"},
                  -   {0x00, 0x00, 0xA6, "Network General"},
                  -   {0x00, 0x00, 0xA7, "NCD"},
                  -   {0x00, 0x00, 0xA9, "Network Systems"},
                  -   {0x00, 0x00, 0xAA, "Xerox"},
                  -   {0x00, 0x00, 0xB3, "CIMLinc"},
                  -   {0x00, 0x00, 0xB7, "Dove Fastnet"},
                  -   {0x00, 0x00, 0xBC, "Allen-Bradley"},
                  -   {0x00, 0x00, 0xC0, "Western Digital"},
                  -   {0x00, 0x00, 0xC5, "Farallon"},
                  -   {0x00, 0x00, 0xC6, "Hewlett-Packard"},
                  -   {0x00, 0x00, 0xC8, "Altos"},
                  -   {0x00, 0x00, 0xC9, "Emulex"},
                  -   {0x00, 0x00, 0xD7, "Dartmouth College"},
                  -   {0x00, 0x00, 0xD8, "3Com (?)"},
                  -   {0x00, 0x00, 0xDD, "Gould"},
                  -   {0x00, 0x00, 0xDE, "Unigraph"},
                  -   {0x00, 0x00, 0xE2, "Acer Counterpoint"},
                  -   {0x00, 0x00, 0xEF, "Alantec"},
                  -   {0x00, 0x00, 0xFD, "High Level Hardware"},
                  -   {0x00, 0x01, 0x02, "BBN internal usage"},
                  -   {0x00, 0x20, 0xAF, "3Com"},
                  -   {0x00, 0x17, 0x00, "Kabel"},
                  -   {0x00, 0x80, 0x64, "Wyse Technology"},
                  -   {0x00, 0x80, 0x2B, "IMAC (?)"},
                  -   {0x00, 0x80, 0x2D, "Xylogics, Inc."},
                  -   {0x00, 0x80, 0x8C, "Frontier Software Development"},
                  -   {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"},
                  -   {0x00, 0x80, 0xD3, "Shiva"},
                  -   {0x00, 0xAA, 0x00, "Intel"},
                  -   {0x00, 0xDD, 0x00, "Ungermann-Bass"},
                  -   {0x00, 0xDD, 0x01, "Ungermann-Bass"},
                  -   {0x02, 0x07, 0x01, "Racal InterLan"},
                  -   {0x02, 0x04, 0x06, "BBN internal usage"},
                  -   {0x02, 0x60, 0x86, "Satelcom MegaPac"},
                  -   {0x02, 0x60, 0x8C, "3Com"},
                  -   {0x02, 0xCF, 0x1F, "CMC"},
                  -   {0x08, 0x00, 0x02, "3Com"},
                  -   {0x08, 0x00, 0x03, "ACC"},
                  -   {0x08, 0x00, 0x05, "Symbolics"},
                  -   {0x08, 0x00, 0x08, "BBN"},
                  -   {0x08, 0x00, 0x09, "Hewlett-Packard"},
                  -   {0x08, 0x00, 0x0A, "Nestar Systems"},
                  -   {0x08, 0x00, 0x0B, "Unisys"},
                  -   {0x08, 0x00, 0x11, "Tektronix"},
                  -   {0x08, 0x00, 0x14, "Excelan"},
                  -   {0x08, 0x00, 0x17, "NSC"},
                  -   {0x08, 0x00, 0x1A, "Data General"},
                  -   {0x08, 0x00, 0x1B, "Data General"},
                  -   {0x08, 0x00, 0x1E, "Apollo"},
                  -   {0x08, 0x00, 0x20, "Sun"},
                  -   {0x08, 0x00, 0x22, "NBI"},
                  -   {0x08, 0x00, 0x25, "CDC"},
                  -   {0x08, 0x00, 0x26, "Norsk Data"},
                  -   {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"},
                  -   {0x08, 0x00, 0x28, "Texas Instruments"},
                  -   {0x08, 0x00, 0x2B, "DEC"},
                  -   {0x08, 0x00, 0x2E, "Metaphor"},
                  -   {0x08, 0x00, 0x2F, "Prime Computer"},
                  -   {0x08, 0x00, 0x36, "Intergraph"},
                  -   {0x08, 0x00, 0x37, "Fujitsu-Xerox"},
                  -   {0x08, 0x00, 0x38, "Bull"},
                  -   {0x08, 0x00, 0x39, "Spider Systems"},
                  -   {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."},
                  -   {0x08, 0x00, 0x45, "Xylogics (?)"},
                  -   {0x08, 0x00, 0x46, "Sony"},
                  -   {0x08, 0x00, 0x47, "Sequent"},
                  -   {0x08, 0x00, 0x49, "Univation"},
                  -   {0x08, 0x00, 0x4C, "Encore"},
                  -   {0x08, 0x00, 0x4E, "BICC"},
                  -   {0x08, 0x00, 0x56, "Stanford University"},
                  -   {0x08, 0x00, 0x58, "DECsystem 20 (?)"},
                  -   {0x08, 0x00, 0x5A, "IBM"},
                  -   {0x08, 0x00, 0x67, "Comdesign"},
                  -   {0x08, 0x00, 0x68, "Ridge"},
                  -   {0x08, 0x00, 0x69, "Silicon Graphics"},
                  -   {0x08, 0x00, 0x6E, "Concurrent"},
                  -   {0x08, 0x00, 0x75, "DDE"},
                  -   {0x08, 0x00, 0x7C, "Vitalink"},
                  -   {0x08, 0x00, 0x80, "XIOS"},
                  -   {0x08, 0x00, 0x86, "Imagen/QMS"},
                  -   {0x08, 0x00, 0x87, "Xyplex"},
                  -   {0x08, 0x00, 0x89, "Kinetics"},
                  -   {0x08, 0x00, 0x8B, "Pyramid"},
                  -   {0x08, 0x00, 0x8D, "XyVision"},
                  -   {0x08, 0x00, 0x90, "Retix Inc"},
                  -   {0x48, 0x44, 0x53, "HDS (?)"},
                  -   {0x80, 0x00, 0x10, "AT&T"},
                  -   {0xAA, 0x00, 0x00, "DEC"},
                  -   {0xAA, 0x00, 0x01, "DEC"},
                  -   {0xAA, 0x00, 0x02, "DEC"},
                  -   {0xAA, 0x00, 0x03, "DEC"},
                  -   {0xAA, 0x00, 0x04, "DEC"},
                  -   {0x00, 0x00, 0x00, NULL}
                  -};
                  -
                  -/*
                  - * eof
                  - */
                  diff --git a/contrib/ip_and_mac/mac.sql b/contrib/ip_and_mac/mac.sql
                  deleted file mode 100644 (file)
                  index e0f4d72..0000000
                  +++ /dev/null
                  @@ -1,125 +0,0 @@
                  ---
                  --- PostgreSQL code for MAC addresses.
                  ---
                  --- $Id: mac.sql,v 1.4 1998/06/16 05:35:11 momjian Exp $
                  ---
                  -
                  -load '/usr/local/pgsql/contrib/ip_and_macs/mac.so';
                  -
                  ---
                  --- Input and output functions and the type itself:
                  ---
                  -
                  -create function macaddr_in(opaque)
                  -   returns opaque
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create function macaddr_out(opaque)
                  -   returns opaque
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create type macaddr (
                  -   internallength = 6,
                  -   externallength = variable,
                  -   input = macaddr_in,
                  -   output = macaddr_out
                  -);
                  -
                  ---
                  --- The boolean tests:
                  ---
                  -
                  -create function macaddr_lt(macaddr, macaddr)
                  -   returns bool
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create function macaddr_le(macaddr, macaddr)
                  -   returns bool
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create function macaddr_eq(macaddr, macaddr)
                  -   returns bool
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create function macaddr_ge(macaddr, macaddr)
                  -   returns bool
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create function macaddr_gt(macaddr, macaddr)
                  -   returns bool
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  -create function macaddr_ne(macaddr, macaddr)
                  -   returns bool
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  ---
                  --- Now the operators.  Note how some of the parameters to some
                  --- of the 'create operator' commands are commented out.  This
                  --- is because they reference as yet undefined operators, and
                  --- will be implicitly defined when those are, further down.
                  ---
                  -
                  -create operator < (
                  -   leftarg = macaddr,
                  -   rightarg = macaddr,
                  --- negator = >=,
                  -   procedure = macaddr_lt
                  -);
                  -
                  -create operator <= (
                  -   leftarg = macaddr,
                  -   rightarg = macaddr,
                  --- negator = >,
                  -   procedure = macaddr_le
                  -);
                  -
                  -create operator = (
                  -   leftarg = macaddr,
                  -   rightarg = macaddr,
                  -   commutator = =,
                  --- negator = <>,
                  -   procedure = macaddr_eq
                  -);
                  -
                  -create operator >= (
                  -   leftarg = macaddr,
                  -   rightarg = macaddr,
                  -   negator = <,
                  -   procedure = macaddr_ge
                  -);
                  -
                  -create operator > (
                  -   leftarg = macaddr,
                  -   rightarg = macaddr,
                  -   negator = <=,
                  -   procedure = macaddr_gt
                  -);
                  -
                  -create operator <> (
                  -   leftarg = macaddr,
                  -   rightarg = macaddr,
                  -   negator = =,
                  -   procedure = macaddr_ne
                  -);
                  -
                  ---
                  --- Finally, the special manufacurer matching function:
                  ---
                  -
                  -create function macaddr_manuf(macaddr)
                  -   returns text
                  -   as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
                  -   language 'c';
                  -
                  ---
                  --- eof
                  ---
                  diff --git a/contrib/ip_and_mac/t1.sql b/contrib/ip_and_mac/t1.sql
                  deleted file mode 100644 (file)
                  index 0ded14f..0000000
                  +++ /dev/null
                  @@ -1,5 +0,0 @@
                  -insert into xx values('193.124.23.2','host2');
                  -insert into xx values('193.124.23.3','host3');
                  -insert into xx values('193.124.22.1','host4');
                  -insert into xx values('193.124.22.2','host5');
                  -insert into xx values('193.124.22.3','host6');
                  diff --git a/contrib/ip_and_mac/test.DATA b/contrib/ip_and_mac/test.DATA
                  deleted file mode 100644 (file)
                  index 1bce53b..0000000
                  +++ /dev/null
                  @@ -1,999 +0,0 @@
                  -193.125.80.35 193.232.202.80 2 880
                  -193.125.80.35 194.87.0.22 2 574
                  -194.87.42.38 195.16.106.31 262 10696
                  -204.62.245.169 193.125.24.10 14 833
                  -193.125.80.35 195.24.128.65 3 180
                  -193.125.80.35 195.54.2.1 2 630
                  -193.125.80.35 195.54.192.33 7 448
                  -194.87.42.38 195.16.106.22 14 736
                  -193.125.80.35 195.210.140.7 3 1068
                  -194.87.41.131 195.46.160.46 10 681
                  -194.87.37.2 194.135.213.244 66 9088
                  -194.87.36.193 195.9.53.1 8 464
                  -194.87.36.193 194.135.2.7 8 464
                  -194.87.36.1 195.24.224.1 2 716
                  -194.87.34.44 195.16.96.2 2 164
                  -194.87.31.230 195.46.160.92 10 757
                  -194.87.24.93 195.46.160.46 9 664
                  -194.87.24.93 195.16.104.35 8 598
                  -194.87.23.28 195.210.155.149 22 1249
                  -194.87.22.107 195.46.160.34 76 3630
                  -194.87.18.152 195.90.162.2 15 666
                  -194.87.18.152 195.90.128.107 1 66
                  -193.125.80.35 62.76.114.44 2 880
                  -194.87.16.174 195.46.160.120 17 2276
                  -204.62.245.168 194.226.45.36 8 444
                  -194.87.16.78 195.16.104.35 8 720
                  -194.87.16.61 195.16.96.22 29 1248
                  -194.87.16.39 194.220.215.66 324 25148
                  -194.87.16.10 195.128.133.65 57 4301
                  -194.87.16.10 194.135.176.121 237 18379
                  -193.125.80.38 194.84.69.5 21 1929
                  -193.125.80.38 212.46.1.30 40 3758
                  -204.62.245.168 144.206.160.32 8 450
                  -193.125.80.44 195.151.199.4 45 2520
                  -194.87.15.158 195.46.160.46 2 112
                  -193.125.80.60 193.232.127.78 2 880
                  -193.125.80.60 193.232.202.80 2 864
                  -194.87.15.138 195.16.110.7 2 112
                  -193.125.80.60 195.96.65.2 2 864
                  -194.87.15.138 193.124.110.130 2 112
                  -194.87.15.1 195.90.130.133 3 84
                  -193.125.80.144 212.46.4.3 311 21140
                  -193.125.80.163 194.84.132.222 261 110114
                  -193.125.80.163 194.87.12.50 582 38097
                  -193.125.80.163 194.87.13.2 34 2499
                  -194.87.14.221 195.46.165.215 5 382
                  -193.125.81.139 195.34.34.70 107 7799
                  -193.125.81.140 194.67.115.130 5 220
                  -204.62.245.167 195.222.130.72 9 475
                  -204.62.245.167 193.125.242.225 2 88
                  -194.87.14.221 195.46.163.47 117 99564
                  -193.125.81.146 194.87.5.3 12 672
                  -193.125.81.146 194.87.12.50 4 224
                  -193.125.81.146 194.87.13.2 5 280
                  -194.87.14.221 195.46.162.91 137 21211
                  -193.125.81.146 195.161.0.34 2 112
                  -193.125.81.146 195.218.135.39 2 112
                  -194.87.14.221 195.12.32.8 131 132002
                  -194.87.14.221 193.124.252.73 530 214220
                  -193.125.81.148 194.67.146.145 201 8040
                  -193.125.81.148 194.87.5.3 49 3140
                  -193.125.81.148 194.87.12.50 230 12526
                  -193.125.81.148 194.87.13.2 31 2042
                  -194.87.14.216 195.210.154.154 68 32028
                  -193.125.81.148 194.190.218.2 8 611
                  -193.125.81.148 195.161.0.34 17 1473
                  -193.125.81.148 195.218.135.39 245 16647
                  -193.125.81.152 193.193.192.2 215 14797
                  -193.125.81.152 194.87.13.2 12 748
                  -193.125.81.152 195.24.128.65 27 1896
                  -193.125.81.152 195.54.192.118 53 3209
                  -194.87.14.216 195.210.154.152 83 81270
                  -193.125.84.12 195.46.160.45 47 2373
                  -193.125.84.154 195.90.128.107 1 62
                  -193.125.84.154 195.90.140.2 1 62
                  -194.87.14.203 195.210.130.62 6 821
                  -194.87.14.152 195.46.160.69 12 2172
                  -193.125.86.4 195.19.32.1 176 89133
                  -194.87.14.73 195.90.162.2 41 42955
                  -194.87.14.53 195.46.162.75 149 138236
                  -194.87.14.51 195.210.190.19 19 10290
                  -194.87.14.6 195.46.163.31 22 24836
                  -193.125.90.34 194.87.161.7 2 208
                  -193.125.90.34 194.87.161.229 13 8867
                  -193.125.90.34 195.54.17.33 644 81839
                  -194.87.14.5 193.124.97.131 53 12784
                  -193.125.90.130 194.58.95.62 82 7119
                  -194.87.13.26 212.248.36.8 14 7757
                  -194.87.13.26 195.98.162.111 80 39391
                  -194.87.13.26 195.98.161.25 70 76902
                  -194.87.13.26 195.46.165.196 30 14838
                  -194.87.13.26 195.46.161.219 47 39327
                  -193.125.95.121 193.124.1.131 248 101051
                  -194.87.13.26 194.85.149.13 28 24599
                  -194.87.13.21 195.98.162.9 32 16101
                  -194.87.13.21 195.90.136.148 84 93861
                  -193.125.95.121 194.186.254.26 79 5470
                  -194.87.13.21 195.46.162.244 10 400
                  -194.87.13.21 195.12.32.182 96 53171
                  -194.87.13.20 212.248.36.8 14 6798
                  -194.87.13.20 212.20.8.250 358 438254
                  -194.87.13.20 195.222.130.242 4 550
                  -194.87.13.20 195.222.130.77 8 6753
                  -193.125.95.124 192.124.176.69 4 538
                  -193.125.95.124 193.124.5.54 2 126
                  -194.87.13.20 195.210.143.145 4 168
                  -193.125.95.124 193.124.110.129 21 2181
                  -193.125.95.124 193.124.148.81 2 310
                  -194.87.13.20 195.210.136.25 4 626
                  -193.125.95.124 194.67.2.97 3 382
                  -193.125.95.124 194.84.222.2 3 382
                  -194.87.13.20 195.208.94.133 115 122276
                  -194.87.13.20 195.182.129.11 15 17177
                  -194.87.13.20 195.170.195.70 14 14313
                  -204.62.245.167 193.124.97.135 9 472
                  -194.87.13.20 195.144.198.159 90 40576
                  -194.87.13.20 195.144.192.198 79 91293
                  -193.125.95.124 195.222.130.67 9 745
                  -194.87.13.20 195.128.144.246 14 12816
                  -194.87.13.20 195.128.140.71 17 15901
                  -194.87.13.20 195.128.140.3 44 47802
                  -194.87.13.20 195.128.132.20 25 27119
                  -194.87.13.20 195.128.128.98 28 15369
                  -194.87.13.20 195.98.162.188 2 3000
                  -193.125.98.254 194.190.170.19 26 1456
                  -193.125.98.254 195.72.225.204 73 4088
                  -204.62.245.166 195.9.80.194 2 88
                  -204.62.245.161 193.124.182.40 2 138
                  -204.62.132.32 193.124.97.131 3 618
                  -193.125.103.137 195.46.163.141 7 372
                  -194.87.13.20 195.98.162.170 4 628
                  -193.125.121.1 193.124.22.22 2 136
                  -193.125.121.121 194.85.157.200 790 31921
                  -193.125.125.253 193.124.22.65 80 5411
                  -193.125.127.42 193.124.22.65 18 1368
                  -193.125.127.42 194.190.170.19 1227 63804
                  -194.87.13.20 195.98.162.155 73 70166
                  -194.87.13.20 195.98.162.9 323 163018
                  -194.87.13.20 195.98.161.32 10 9756
                  -194.87.13.20 195.98.161.25 4 1208
                  -194.87.13.20 195.90.180.25 3 568
                  -194.87.13.20 195.90.162.2 4 738
                  -194.87.13.20 195.54.8.139 42 53309
                  -194.87.13.20 195.54.5.129 27 13705
                  -194.87.13.20 195.46.164.25 11 12641
                  -194.87.13.20 195.46.164.16 62 74088
                  -194.87.13.20 195.46.163.158 35 37649
                  -194.87.13.20 195.46.163.89 52 57716
                  -194.87.13.20 195.46.163.15 11 12641
                  -193.125.132.129 193.124.215.71 26 4734
                  -193.125.132.129 193.124.222.161 5 220
                  -194.87.13.20 195.46.162.196 13 12813
                  -194.87.13.20 195.46.162.173 30 36193
                  -194.87.13.20 195.46.161.242 69 82486
                  -194.87.13.20 195.46.161.210 15 13392
                  -194.87.13.20 195.46.161.209 43 39183
                  -193.125.132.129 194.190.211.25 2 80
                  -194.87.13.20 195.46.161.111 85 93111
                  -194.87.13.20 195.46.161.100 41 8909
                  -194.87.13.20 195.16.102.4 5 3716
                  -194.87.13.20 195.16.101.109 17 20273
                  -194.87.13.20 195.16.101.101 93 112303
                  -194.87.13.20 195.16.98.99 152 171268
                  -194.87.13.20 195.9.103.3 11 12641
                  -194.87.13.20 194.220.53.195 303 100520
                  -194.87.13.20 194.190.56.83 8 1096
                  -194.87.13.20 194.85.149.18 43 48875
                  -194.87.13.20 194.85.137.152 30 34921
                  -194.87.13.20 194.58.169.23 5 590
                  -194.87.13.20 194.58.92.67 10 1044
                  -194.87.13.20 194.58.72.102 34 31635
                  -194.87.13.20 194.58.47.81 4 172
                  -194.87.13.20 193.124.241.239 53 51597
                  -193.125.142.40 195.54.3.15 7 500
                  -193.125.142.40 195.90.183.40 1 40
                  -193.125.143.130 195.90.128.103 13 11141
                  -193.125.143.135 195.46.160.46 45 2957
                  -204.62.129.195 195.19.1.132 10 4438
                  -193.125.148.150 193.124.22.65 12 912
                  -194.87.13.20 193.124.121.65 4 2216
                  -194.87.13.20 193.124.114.33 8 1084
                  -194.87.13.16 195.98.162.134 259 254892
                  -194.87.13.16 195.46.165.162 292 145058
                  -194.87.13.16 195.46.162.200 51 42010
                  -194.87.13.16 195.46.160.69 97 45411
                  -194.87.13.16 193.124.97.35 74 81434
                  -194.87.13.15 212.20.1.95 11 10485
                  -194.87.13.15 195.210.136.135 16 15786
                  -194.87.13.15 195.210.131.39 6 3168
                  -193.125.152.1 147.45.130.1 2 326
                  -194.87.13.15 195.98.162.153 136 143332
                  -194.87.13.15 195.98.162.9 308 168069
                  -194.87.13.15 195.46.165.185 1183 633028
                  -194.87.13.15 195.46.165.166 2 104
                  -194.87.13.15 195.46.164.44 70 53112
                  -194.87.13.15 195.46.163.156 159 113967
                  -194.87.13.15 195.46.162.241 64 20483
                  -194.87.13.15 195.46.162.30 120 95284
                  -194.87.13.15 195.16.101.67 115 82325
                  -194.87.13.15 195.9.90.85 7 600
                  -194.87.13.15 194.135.176.88 92 7543
                  -193.125.152.1 193.124.5.54 382 18328
                  -193.125.152.1 193.124.22.22 271 246786
                  -193.125.152.1 193.124.22.65 58 3504
                  -193.125.152.1 193.124.22.68 12 1443
                  -193.125.152.1 193.124.22.69 535 50134
                  -193.125.152.1 193.124.22.70 10 1187
                  -193.125.152.1 193.124.22.71 430 57506
                  -193.125.152.1 193.124.22.72 57 7236
                  -193.125.152.1 193.124.22.73 12 1443
                  -193.125.152.1 193.124.22.74 9 1059
                  -193.125.152.1 193.124.22.75 237 33658
                  -193.125.152.1 193.124.22.77 266 37279
                  -193.125.152.1 193.124.22.81 2265 522913
                  -193.125.152.1 193.124.22.83 739 88013
                  -193.125.152.1 193.124.36.45 1639 813217
                  -193.125.152.1 193.124.57.65 219 74665
                  -194.87.13.15 194.135.2.7 75 27476
                  -194.87.13.15 193.124.252.73 254 110171
                  -193.125.152.1 193.124.182.41 4 160
                  -193.125.152.1 193.124.241.3 15 2284
                  -193.125.152.1 193.124.241.14 1 244
                  -193.125.152.1 193.124.241.18 3 636
                  -193.125.152.1 193.124.241.29 19 3767
                  -193.125.152.1 193.124.241.40 13 3140
                  -193.125.152.1 193.124.241.53 32 7802
                  -193.125.152.1 193.124.241.58 2 420
                  -193.125.152.1 193.124.241.75 1 244
                  -193.125.152.1 193.124.241.84 4 670
                  -193.125.152.1 193.124.241.123 16 3574
                  -193.125.152.1 193.124.241.154 2 524
                  -193.125.152.1 193.124.241.158 44 10519
                  -193.125.152.1 193.124.241.229 1 200
                  -193.125.152.1 193.124.241.239 22 4490
                  -193.125.152.1 193.124.241.249 6 1748
                  -193.125.152.1 193.125.65.235 321 13793
                  -193.125.152.1 193.125.80.35 2 476
                  -194.87.13.15 193.124.241.39 512 271010
                  -194.87.13.15 193.124.32.49 1119 1170153
                  -194.87.13.14 195.210.136.135 188 193578
                  -193.125.152.1 193.232.0.205 24 1555
                  -193.125.152.1 193.232.21.26 17 1138
                  -193.125.152.1 193.232.21.31 24 2206
                  -193.125.152.1 193.232.69.159 8 1176
                  -193.125.152.1 193.232.88.17 19 1387
                  -193.125.152.1 193.232.119.131 783 31804
                  -193.125.152.1 193.232.202.12 2 818
                  -193.125.152.1 193.233.86.14 11 660
                  -193.125.152.1 193.233.86.33 11 660
                  -193.125.152.1 193.233.208.3 3 738
                  -194.87.13.12 212.248.36.8 5 1763
                  -194.87.13.12 212.20.8.250 49 37420
                  -194.87.13.12 195.210.182.31 50 3544
                  -194.87.13.12 195.210.179.4 37 33062
                  -193.125.152.1 194.58.169.17 357 155601
                  -193.125.152.1 194.58.201.193 6 774
                  -193.125.152.1 194.58.230.92 8 1576
                  -193.125.152.1 194.58.230.110 1 60
                  -193.125.152.1 194.67.2.97 10 2760
                  -193.125.152.1 194.67.90.1 8 448
                  -194.87.13.12 195.210.154.48 37 13937
                  -194.87.13.12 195.210.130.50 20 2117
                  -193.125.152.1 194.84.23.125 16 1168
                  -193.125.152.1 194.84.41.68 298 127287
                  -193.125.152.1 194.84.42.17 16 1325
                  -193.125.152.1 194.84.96.2 44 10261
                  -193.125.152.1 194.84.204.222 1 112
                  -193.125.152.1 194.84.242.126 10 2178
                  -193.125.152.1 194.85.80.238 18 1178
                  -193.125.152.1 194.85.128.10 25 1375
                  -193.125.152.1 194.85.137.89 8 440
                  -194.87.13.12 195.208.94.133 33 20968
                  -193.125.152.1 194.85.224.33 28 1708
                  -193.125.152.1 194.85.224.34 26 1586
                  -193.125.152.1 194.87.0.20 12 873
                  -193.125.152.1 194.87.5.3 8 448
                  -193.125.152.1 194.87.5.21 2 518
                  -193.125.152.1 194.87.13.2 4 224
                  -193.125.152.1 194.87.44.1 1 146
                  -193.125.152.1 194.87.210.41 2 402
                  -194.87.13.12 195.182.129.11 23 15865
                  -194.87.13.12 195.170.195.70 63 44135
                  -194.87.13.12 195.144.192.198 31 6314
                  -193.125.152.1 194.117.64.34 20 1271
                  -193.125.152.1 194.135.34.19 13 2470
                  -193.125.152.1 194.135.34.85 12 2254
                  -193.125.152.1 194.135.34.136 6 866
                  -193.125.152.1 194.135.34.150 2 488
                  -193.125.152.1 194.135.34.159 1 467
                  -193.125.152.1 194.135.34.212 11 2560
                  -193.125.152.1 194.135.34.229 2 337
                  -193.125.152.1 194.135.34.233 4 680
                  -193.125.152.1 194.135.102.10 2 414
                  -193.125.152.1 194.135.178.74 7 1162
                  -193.125.152.1 194.154.93.80 2 284
                  -194.87.13.12 195.128.140.3 14 872
                  -193.125.152.1 194.190.218.2 2 518
                  -194.87.13.12 195.128.130.2 4 352
                  -194.87.13.12 195.98.162.155 75 60095
                  -194.87.13.12 195.98.162.78 98 64468
                  -193.125.152.1 194.220.36.1 37 2850
                  -193.125.152.1 194.220.146.79 2 522
                  -194.87.13.12 195.98.162.9 62 13543
                  -194.87.13.12 195.98.161.59 7 476
                  -194.87.13.12 195.98.161.32 12 865
                  -204.62.128.51 195.19.1.132 43 38029
                  -204.62.128.48 193.124.97.153 9 3356
                  -204.59.144.222 194.85.149.1 2 266
                  -193.125.152.1 195.5.128.130 2 512
                  -194.87.13.12 195.98.161.25 8 3438
                  -193.125.152.1 195.16.104.35 5 280
                  -193.125.152.1 195.34.19.108 2 312
                  -193.125.152.1 195.34.32.11 2 476
                  -193.125.152.1 195.34.41.33 9 504
                  -194.87.13.12 195.90.136.148 32 3564
                  -194.87.13.12 195.90.136.143 10 890
                  -193.125.152.1 195.46.160.2 8 448
                  -193.125.152.1 195.46.160.34 2 630
                  -193.125.152.1 195.54.193.9 18 1405
                  -193.125.152.1 195.91.133.77 4 1212
                  -193.125.152.1 195.98.55.1 18 1405
                  -193.125.152.1 195.133.94.129 23 1485
                  -193.125.152.1 195.138.67.91 8 544
                  -193.125.152.1 195.138.80.33 19 1245
                  -193.125.152.1 195.138.80.34 20 1308
                  -193.125.152.1 195.146.64.131 4 472
                  -193.125.152.1 195.161.8.6 19 1445
                  -193.125.152.1 195.161.8.159 42 3569
                  -194.87.13.12 195.54.8.139 74 6178
                  -193.125.152.1 195.208.141.38 2 512
                  -193.125.152.1 195.209.37.18 2 670
                  -193.125.152.1 195.209.39.133 8 1698
                  -194.87.13.12 195.46.165.250 2 80
                  -193.125.152.1 195.218.133.114 24 1905
                  -194.87.13.12 195.46.165.196 9 3478
                  -193.125.152.1 195.230.64.66 101 4508
                  -193.125.152.1 195.239.88.50 37 1480
                  -193.125.152.1 195.239.193.64 2 476
                  -193.125.152.1 195.239.210.2 2 500
                  -194.87.13.12 195.46.164.25 69 4776
                  -194.87.13.12 195.46.164.17 28 16790
                  -194.87.13.12 195.46.163.158 30 6337
                  -194.87.13.12 195.46.163.89 56 28328
                  -194.87.13.12 195.46.163.15 8 336
                  -194.87.13.12 195.46.162.213 4 160
                  -194.87.13.12 195.46.162.206 41 25676
                  -194.87.13.12 195.46.162.196 54 38487
                  -194.87.13.12 195.46.162.173 63 40346
                  -194.87.13.12 195.46.162.55 7 657
                  -194.87.13.12 195.46.162.31 5 200
                  -194.87.13.12 195.46.161.242 67 20130
                  -194.87.13.12 195.46.161.219 5 1831
                  -194.87.13.12 195.46.161.210 12 13389
                  -194.87.13.12 195.46.161.209 64 26136
                  -194.87.13.12 195.46.161.111 47 3947
                  -194.87.13.12 195.16.101.109 31 2924
                  -194.87.13.12 195.16.101.101 42 3051
                  -194.87.13.12 195.16.98.99 13 903
                  -194.87.13.12 195.9.103.3 74 5122
                  -194.87.13.12 194.220.215.111 75 5304
                  -194.87.13.12 194.220.215.110 22 2367
                  -194.87.13.12 194.220.215.66 6 539
                  -194.87.13.12 194.190.82.40 14 1558
                  -194.87.13.12 193.125.19.101 23 2074
                  -194.87.13.12 193.124.241.239 10 4274
                  -194.87.13.12 193.124.114.33 42 13726
                  -193.125.152.1 62.76.114.44 9 2780
                  -194.87.13.8 212.20.8.250 110 87859
                  -194.87.13.8 195.222.130.242 4 527
                  -194.87.13.8 195.210.182.31 9 1222
                  -194.87.13.8 195.210.179.4 14 15689
                  -194.87.13.8 195.210.154.48 13 1602
                  -194.87.13.8 195.210.136.135 163 171207
                  -194.87.13.8 195.210.130.50 8 6213
                  -194.87.13.8 195.210.128.65 6 408
                  -194.87.13.8 195.208.94.133 63 43061
                  -194.87.13.8 195.208.76.33 5 355
                  -194.87.13.8 195.208.67.19 400 446069
                  -194.87.13.8 195.208.64.146 50 39549
                  -194.87.13.8 195.208.64.144 12 12685
                  -194.87.13.8 195.182.129.11 16 18647
                  -194.87.13.8 195.170.195.70 14 2119
                  -194.87.13.8 195.146.70.100 49 27151
                  -194.87.13.8 195.144.198.159 12 1336
                  -194.87.13.8 195.144.192.198 16 2213
                  -194.87.13.8 195.128.140.71 15 6105
                  -194.87.13.8 195.128.140.3 8 821
                  -194.87.13.8 195.98.162.170 5 699
                  -194.87.13.8 195.98.162.155 43 43382
                  -194.87.13.8 195.98.162.153 12 8634
                  -194.87.13.8 195.98.162.78 57 25228
                  -194.87.13.8 195.98.162.9 94 33009
                  -194.87.13.8 195.98.161.57 4 6000
                  -194.87.13.8 195.98.161.41 52 57725
                  -194.87.13.8 195.98.161.32 6 433
                  -194.87.13.8 195.96.174.178 17 20989
                  -194.87.13.8 195.96.163.66 13 8510
                  -194.87.13.8 195.90.188.105 169 68987
                  -194.87.13.8 195.90.188.98 13 13679
                  -194.87.13.8 195.90.185.38 100 23568
                  -194.87.13.8 195.90.162.2 26 9575
                  -194.87.13.8 195.90.136.148 25 3160
                  -194.87.13.8 195.90.136.143 4 2024
                  -194.87.13.8 195.90.132.57 4 1398
                  -194.87.13.8 195.54.8.139 33 10681
                  -194.87.13.8 195.54.5.129 4 735
                  -194.87.13.8 195.46.165.250 5 697
                  -194.87.13.8 195.46.165.215 23 10108
                  -194.87.13.8 195.46.164.25 25 2325
                  -194.87.13.8 195.46.164.17 16 11423
                  -194.87.13.8 195.46.164.16 9 6253
                  -194.87.13.8 195.46.163.171 50 24920
                  -194.87.13.8 195.46.163.158 19 6681
                  -194.87.13.8 195.46.163.156 18 19033
                  -194.87.13.8 195.46.163.123 11 10683
                  -194.87.13.8 195.46.163.89 69 36648
                  -194.87.13.8 195.46.163.15 4 353
                  -194.87.13.8 195.46.163.7 173 112297
                  -194.87.13.8 195.46.162.206 12 2050
                  -194.87.13.8 195.46.162.196 30 35369
                  -194.87.13.8 195.46.162.184 80 104089
                  -194.87.13.8 195.46.162.173 18 16346
                  -194.87.13.8 195.46.162.91 306 246711
                  -194.87.13.8 195.46.162.55 5 393
                  -194.87.13.8 195.46.162.31 9 557
                  -194.87.13.8 195.46.162.13 10 1014
                  -194.87.13.8 195.46.161.242 44 35502
                  -194.87.13.8 195.46.161.210 15 18274
                  -194.87.13.8 195.46.161.209 24 15531
                  -194.87.13.8 195.46.161.186 31 27219
                  -194.87.13.8 195.46.161.170 9 1482
                  -194.87.13.8 195.46.161.133 21 24725
                  -194.87.13.8 195.46.161.123 11 10683
                  -194.87.13.8 195.46.161.111 26 2791
                  -194.87.13.8 195.46.161.83 25 10320
                  -194.87.13.8 195.46.161.71 124 123406
                  -194.87.13.8 195.46.160.69 11 10785
                  -194.87.13.8 195.16.101.109 5 393
                  -193.125.152.3 158.250.39.28 2 126
                  -193.125.152.3 158.250.100.24 2 734
                  -193.125.152.3 159.93.17.7 4 234
                  -194.87.13.8 195.16.101.101 57 53033
                  -194.87.13.8 195.16.98.99 100 68835
                  -194.87.13.8 195.16.98.37 24 4428
                  -194.87.13.8 195.12.35.2 18 17726
                  -194.87.13.8 195.9.103.3 76 32081
                  -194.87.13.8 195.9.96.7 22 14498
                  -194.87.13.8 194.220.215.111 16 2352
                  -194.87.13.8 194.220.215.110 13 1554
                  -194.87.13.8 194.220.215.66 5 759
                  -194.87.13.8 194.220.53.195 7 797
                  -194.87.13.8 194.135.178.214 70 27886
                  -194.87.13.8 194.135.111.18 260 289019
                  -194.87.13.8 194.85.149.18 6 475
                  -194.87.13.8 194.58.72.102 5 703
                  -194.87.13.8 193.124.241.239 13 6926
                  -194.87.13.8 193.124.241.39 31 18403
                  -194.87.13.8 193.124.121.118 17 1675
                  -194.87.13.8 193.124.114.33 43 19148
                  -194.87.13.6 195.98.162.153 2 120
                  -194.87.13.2 212.20.8.250 16 3749
                  -194.87.13.2 212.20.8.246 5 1259
                  -194.87.13.2 212.20.1.95 33 7367
                  -194.87.13.2 195.238.68.234 9 2454
                  -194.87.13.2 195.222.138.108 7 1203
                  -194.87.13.2 195.222.130.242 21 5860
                  -194.87.13.2 195.210.190.19 19 4260
                  -194.87.13.2 195.210.189.1 5 1119
                  -194.87.13.2 195.210.182.31 35 26895
                  -194.87.13.2 195.210.176.170 4 1079
                  -194.87.13.2 195.210.174.6 5 1119
                  -194.87.13.2 195.210.164.25 5 1119
                  -194.87.13.2 195.210.154.164 9 2484
                  -194.87.13.2 195.210.154.152 8 1376
                  -193.125.152.3 192.188.189.3 2 136
                  -194.87.13.2 195.210.154.48 43 28721
                  -194.87.13.2 195.210.150.2 31 6855
                  -194.87.13.2 195.210.148.242 17 2910
                  -194.87.13.2 195.210.143.145 7 2110
                  -194.87.13.2 195.210.136.145 20 3862
                  -194.87.13.2 195.210.136.135 9 1423
                  -194.87.13.2 195.210.136.131 7 1353
                  -194.87.13.2 195.210.130.50 16 14690
                  -194.87.13.2 195.208.94.133 33 9913
                  -194.87.13.2 195.208.93.154 9 1411
                  -194.87.13.2 195.208.72.139 4 1079
                  -194.87.13.2 195.208.72.47 8 2154
                  -194.87.13.2 195.208.67.19 4 1079
                  -194.87.13.2 195.208.67.10 8 1376
                  -194.87.13.2 195.208.64.152 4 1079
                  -194.87.13.2 195.208.64.144 6 2066
                  -193.125.152.3 193.124.5.37 11 1336
                  -193.125.152.3 193.124.5.50 2 266
                  -193.125.152.3 193.124.5.54 4 692
                  -193.125.152.3 193.124.22.22 11 2138
                  -193.125.152.3 193.124.22.65 141 15806
                  -193.125.152.3 193.124.32.129 5 1116
                  -193.125.152.3 193.124.57.100 3 197
                  -193.125.152.3 193.124.76.86 1 278
                  -194.87.13.2 195.208.64.129 6 1167
                  -193.125.152.3 193.124.110.130 2 766
                  -193.125.152.3 193.124.134.19 4 548
                  -194.87.13.2 195.182.129.8 9 3525
                  -193.125.152.3 193.124.148.73 9 1408
                  -193.125.152.3 193.124.171.67 2 354
                  -193.125.152.3 193.124.182.40 2 144
                  -193.125.152.3 193.124.241.39 2 356
                  -193.125.152.3 193.124.241.83 4 866
                  -194.87.13.2 195.182.128.2 39 9020
                  -193.125.152.3 193.124.250.22 79 12968
                  -193.125.152.3 193.125.80.35 2 300
                  -194.87.13.2 195.170.195.70 55 42078
                  -194.87.13.2 195.146.71.226 5 1119
                  -194.87.13.2 195.146.71.178 53 11410
                  -194.87.13.2 195.146.70.100 6 2070
                  -194.87.13.2 195.146.70.97 7 1199
                  -194.87.13.2 195.144.198.159 44 14597
                  -194.87.13.2 195.144.192.198 17 4040
                  -194.87.13.2 195.128.144.142 7 2110
                  -194.87.13.2 195.128.144.133 6 2342
                  -194.87.13.2 195.128.140.71 19 16072
                  -194.87.13.2 195.128.140.3 22 5159
                  -194.87.13.2 195.128.139.110 13 2642
                  -194.87.13.2 195.128.139.94 18 6772
                  -193.125.152.3 193.193.193.100 2 132
                  -193.125.152.3 193.193.193.107 4 1148
                  -193.125.152.3 193.193.226.226 3 489
                  -194.87.13.2 195.128.138.136 6 1309
                  -194.87.13.2 195.128.136.186 20 4622
                  -193.125.152.3 193.232.8.20 5 323
                  -193.125.152.3 193.232.68.1 2 120
                  -193.125.152.3 193.232.88.17 44 4923
                  -193.125.152.3 193.232.88.125 2 388
                  -193.125.152.3 193.232.112.1 2 134
                  -193.125.152.3 193.232.127.78 20 4237
                  -193.125.152.3 193.232.212.12 9 1177
                  -193.125.152.3 193.232.232.66 4 1210
                  -193.125.152.3 193.233.48.9 7 447
                  -193.125.152.3 193.233.48.65 2 130
                  -193.125.152.3 193.233.56.200 2 294
                  -193.125.152.3 193.233.78.1 2 276
                  -193.125.152.3 193.233.86.14 4 240
                  -193.125.152.3 193.233.86.33 4 240
                  -193.125.152.3 193.233.192.19 2 118
                  -193.125.152.3 193.233.208.3 4 238
                  -193.125.152.3 193.233.224.1 4 800
                  -194.87.13.2 195.128.136.71 6 1159
                  -194.87.13.2 195.128.134.99 5 1264
                  -194.87.13.2 195.128.132.70 23 6787
                  -194.87.13.2 195.128.129.155 4 1079
                  -194.87.13.2 195.128.128.98 30 17304
                  -193.125.152.3 194.44.157.250 2 134
                  -194.87.13.2 195.128.128.70 5 2372
                  -194.87.13.2 195.128.128.66 8 2422
                  -193.125.152.3 194.58.101.95 12 2368
                  -193.125.152.3 194.58.124.24 2 320
                  -194.87.13.2 195.128.128.3 5 1187
                  -193.125.152.3 194.58.230.249 7 1050
                  -194.87.13.2 195.112.226.35 23 956
                  -193.125.152.3 194.67.1.154 9 1436
                  -193.125.152.3 194.67.2.97 11 1861
                  -193.125.152.3 194.67.2.98 12 973
                  -193.125.152.3 194.67.66.176 2 122
                  -193.125.152.3 194.67.82.228 2 552
                  -193.125.152.3 194.67.110.2 4 688
                  -193.125.152.3 194.67.114.81 3 198
                  -193.125.152.3 194.67.114.193 5 330
                  -193.125.152.3 194.67.115.35 5 330
                  -193.125.152.3 194.67.115.38 2 412
                  -193.125.152.3 194.67.128.130 2 330
                  -194.87.13.2 195.98.162.189 11 2282
                  -194.87.13.2 195.98.162.182 10 3433
                  -194.87.13.2 195.98.162.170 56 55418
                  -194.87.13.2 195.98.162.165 12 2318
                  -193.125.152.3 194.84.2.73 2 298
                  -193.125.152.3 194.84.17.34 17 2183
                  -193.125.152.3 194.84.21.18 6 1320
                  -193.125.152.3 194.84.23.125 21 1523
                  -193.125.152.3 194.84.31.233 11 5316
                  -193.125.152.3 194.84.32.67 2 138
                  -193.125.152.3 194.84.39.28 7 981
                  -193.125.152.3 194.84.48.11 2 130
                  -193.125.152.3 194.84.54.130 2 358
                  -193.125.152.3 194.84.86.6 1 58
                  -193.125.152.3 194.84.96.57 6 387
                  -193.125.152.3 194.84.122.1 20 1460
                  -193.125.152.3 194.84.132.2 8 2208
                  -193.125.152.3 194.84.167.1 2 146
                  -193.125.152.3 194.84.168.49 4 670
                  -193.125.152.3 194.84.204.131 2 146
                  -193.125.152.3 194.84.204.222 2 476
                  -193.125.152.3 194.84.206.3 5 305
                  -193.125.152.3 194.84.206.193 18 1098
                  -193.125.152.3 194.84.223.2 2 148
                  -193.125.152.3 194.84.243.71 2 300
                  -194.87.13.2 195.98.162.164 9 1287
                  -194.87.13.2 195.98.162.160 29 8361
                  -194.87.13.2 195.98.162.155 8 2174
                  -194.87.13.2 195.98.162.151 15 3499
                  -194.87.13.2 195.98.162.147 6 1300
                  -193.125.152.3 194.85.128.10 28 1552
                  -193.125.152.3 194.85.137.89 76 4180
                  -194.87.13.2 195.98.162.141 22 5639
                  -194.87.13.2 195.98.162.135 35 10480
                  -194.87.13.2 195.98.162.131 31 25682
                  -194.87.13.2 195.98.162.118 5 1262
                  -194.87.13.2 195.98.162.114 6 1159
                  -193.125.152.3 194.85.200.204 6 816
                  -193.125.152.3 194.85.224.33 68 4150
                  -193.125.152.3 194.85.224.34 64 3904
                  -193.125.152.3 194.87.0.8 4 294
                  -193.125.152.3 194.87.0.22 50 8498
                  -193.125.152.3 194.87.0.242 24 4272
                  -193.125.152.3 194.87.37.2 2 308
                  -193.125.152.3 194.87.43.111 2 114
                  -193.125.152.3 194.87.110.35 2 114
                  -193.125.152.3 194.87.157.34 2 318
                  -193.125.152.3 194.87.161.7 2 430
                  -193.125.152.3 194.87.162.120 2 308
                  -193.125.152.3 194.87.186.1 4 692
                  -193.125.152.3 194.87.210.41 2 112
                  -193.125.152.3 194.87.224.99 5 875
                  -193.125.152.3 194.87.233.66 2 238
                  -193.125.152.3 194.87.239.39 2 358
                  -194.87.13.2 195.98.162.111 5 1119
                  -194.87.13.2 195.98.162.102 7 1341
                  -194.87.13.2 195.98.162.97 5 2030
                  -194.87.13.2 195.98.162.94 13 2362
                  -194.87.13.2 195.98.162.78 134 104964
                  -194.87.13.2 195.98.162.77 6 1163
                  -194.87.13.2 195.98.162.73 15 5512
                  -194.87.13.2 195.98.162.72 26 5763
                  -194.87.13.2 195.98.162.66 4 1225
                  -194.87.13.2 195.98.162.9 231 74902
                  -194.87.13.2 195.98.161.71 13 3581
                  -193.125.152.3 194.135.2.131 16 3134
                  -193.125.152.3 194.135.34.42 3 733
                  -193.125.152.3 194.135.34.85 11 2042
                  -193.125.152.3 194.135.34.136 6 866
                  -194.87.13.2 195.98.161.67 10 2513
                  -193.125.152.3 194.135.102.10 8 1490
                  -193.125.152.3 194.135.161.11 13 1287
                  -193.125.152.3 194.154.82.67 2 304
                  -193.125.152.3 194.154.82.122 2 102
                  -194.87.13.2 195.98.161.59 20 4472
                  -193.125.152.3 194.186.38.34 2 298
                  -193.125.152.3 194.186.113.254 5 644
                  -193.125.152.3 194.186.170.253 2 476
                  -193.125.152.3 194.186.208.51 4 550
                  -193.125.152.3 194.186.212.137 2 336
                  -193.125.152.3 194.186.254.23 2 360
                  -194.87.13.2 195.98.161.57 28 6345
                  -193.125.152.3 194.190.105.2 2 232
                  -193.125.152.3 194.190.163.127 6 702
                  -193.125.152.3 194.190.195.66 4 268
                  -193.125.152.3 194.190.199.1 2 430
                  -193.125.152.3 194.190.215.113 10 1471
                  -193.125.152.3 194.190.216.124 2 448
                  -193.125.152.3 194.190.218.2 4 598
                  -194.87.13.2 195.98.161.46 8 1387
                  -194.87.13.2 195.98.161.40 11 3193
                  -194.87.13.2 195.98.161.33 13 3387
                  -194.87.13.2 195.98.160.174 5 1119
                  -194.87.13.2 195.98.160.148 11 1907
                  -194.87.13.2 195.98.160.146 8 428
                  -194.87.13.2 195.96.163.66 37 22436
                  -194.87.13.2 195.90.188.112 8 2150
                  -194.87.13.2 195.90.188.111 5 1237
                  -193.125.152.3 194.220.146.79 2 322
                  -194.87.13.2 195.90.188.105 27 7280
                  -193.125.152.3 194.226.167.195 14 1947
                  -194.87.13.2 195.90.188.101 1 1089
                  -194.87.13.2 195.90.186.228 7 1332
                  -194.87.13.2 195.90.185.38 20 3294
                  -194.87.13.2 195.90.183.122 12 3627
                  -194.87.13.2 195.90.180.25 22 18568
                  -204.58.155.18 144.206.2.1 3 173
                  -204.57.67.249 194.58.72.120 4 160
                  -204.57.67.150 195.146.67.100 5 200
                  -204.57.67.150 194.58.72.120 4 160
                  -204.57.67.146 195.146.67.100 5 200
                  -204.57.67.146 194.58.72.120 4 160
                  -194.87.13.2 195.90.180.12 4 1300
                  -194.87.13.2 195.90.162.2 53 15773
                  -193.125.152.3 195.5.128.130 4 814
                  -193.125.152.3 195.5.141.6 11 1500
                  -193.125.152.3 195.5.151.21 5 615
                  -194.87.13.2 195.90.158.23 3 1035
                  -194.87.13.2 195.90.152.133 3 124
                  -193.125.152.3 195.7.179.36 4 744
                  -194.87.13.2 195.90.146.80 4 1075
                  -194.87.13.2 195.90.145.35 6 2070
                  -193.125.152.3 195.9.90.65 66 14486
                  -193.125.152.3 195.9.90.70 3 615
                  -193.125.152.3 195.9.94.33 2 140
                  -193.125.152.3 195.12.66.1 4 250
                  -193.125.152.3 195.16.96.2 3 482
                  -193.125.152.3 195.16.101.2 2 126
                  -193.125.152.3 195.16.114.47 3 192
                  -194.87.13.2 195.90.145.1 3 1180
                  -193.125.152.3 195.19.160.1 6 1066
                  -193.125.152.3 195.19.188.66 4 248
                  -194.87.13.2 195.90.142.27 7 2280
                  -194.87.13.2 195.90.137.230 4 1075
                  -194.87.13.2 195.90.136.148 4 1276
                  -194.87.13.2 195.90.136.143 4 1260
                  -194.87.13.2 195.90.136.135 6 2066
                  -193.125.152.3 195.26.160.48 3 434
                  -193.125.152.3 195.34.0.1 4 618
                  -193.125.152.3 195.34.17.13 4 843
                  -193.125.152.3 195.34.32.11 2 352
                  -193.125.152.3 195.34.41.33 3 495
                  -193.125.152.3 195.46.160.4 7 1412
                  -193.125.152.3 195.46.163.120 42 9840
                  -193.125.152.3 195.54.2.1 9 1433
                  -193.125.152.3 195.54.192.33 20 2704
                  -193.125.152.3 195.54.193.30 2 230
                  -194.87.13.2 195.90.136.82 10 2230
                  -194.87.13.2 195.90.134.250 7 2387
                  -193.125.152.3 195.90.128.103 2 455
                  -193.125.152.3 195.90.128.107 3 197
                  -193.125.152.3 195.90.136.1 2 286
                  -193.125.152.3 195.90.158.139 6 318
                  -193.125.152.3 195.90.184.66 15 2690
                  -193.125.152.3 195.91.133.54 28 5845
                  -193.125.152.3 195.96.65.2 23 5249
                  -193.125.152.3 195.98.64.65 2 494
                  -193.125.152.3 195.98.162.10 2 520
                  -193.125.152.3 195.98.163.16 2 144
                  -194.87.13.2 195.90.132.67 7 1199
                  -194.87.13.2 195.90.132.57 9 2318
                  -193.125.152.3 195.128.128.1 18 1801
                  -193.125.152.3 195.133.0.8 6 420
                  -193.125.152.3 195.133.103.1 2 274
                  -194.87.13.2 195.90.132.10 7 2256
                  -193.125.152.3 195.146.64.42 5 736
                  -193.125.152.3 195.146.72.34 4 232
                  -194.87.13.2 195.90.132.3 9 2190
                  -194.87.13.2 195.90.128.103 27 7388
                  -193.125.152.3 195.151.16.12 2 288
                  -193.125.152.3 195.151.16.13 2 436
                  -193.125.152.3 195.151.35.66 9 1339
                  -193.125.152.3 195.151.108.130 2 280
                  -193.125.152.3 195.151.163.75 3 552
                  -193.125.152.3 195.161.0.135 6 543
                  -193.125.152.3 195.161.20.33 3 552
                  -193.125.152.3 195.161.21.2 3 186
                  -193.125.152.3 195.161.21.130 5 291
                  -193.125.152.3 195.178.199.130 2 104
                  -193.125.152.3 195.208.49.11 2 282
                  -193.125.152.3 195.208.72.3 3 363
                  -193.125.152.3 195.208.93.132 3 416
                  -194.87.13.2 195.72.224.74 16 3667
                  -194.87.13.2 195.54.8.139 28 17598
                  -193.125.152.3 195.208.248.36 2 512
                  -193.125.152.3 195.208.252.2 2 346
                  -193.125.152.3 195.208.252.180 2 118
                  -193.125.152.3 195.209.0.6 4 236
                  -193.125.152.3 195.209.63.161 2 446
                  -193.125.152.3 195.210.128.6 2 264
                  -194.87.13.2 195.54.6.67 5 1266
                  -194.87.13.2 195.54.5.129 60 27325
                  -193.125.152.3 195.218.218.37 4 264
                  -193.125.152.3 195.222.130.67 3 186
                  -193.125.152.3 195.239.46.189 2 706
                  -193.125.152.3 195.239.193.64 2 374
                  -193.125.152.3 195.239.210.2 1 51
                  -194.87.13.2 195.54.2.8 6 1438
                  -194.87.13.2 195.46.165.248 16 6178
                  -194.87.13.2 195.46.165.239 10 4284
                  -194.87.13.2 195.46.165.227 8 2254
                  -194.87.13.2 195.46.165.226 11 6825
                  -194.87.13.2 195.46.165.204 6 2070
                  -194.87.13.2 195.46.165.200 70 42657
                  -194.87.13.2 195.46.165.196 10 4963
                  -194.87.13.2 195.46.165.194 7 2110
                  -194.87.13.2 195.46.165.193 10 5874
                  -194.87.13.2 195.46.165.191 7 2400
                  -194.87.13.2 195.46.165.172 14 11492
                  -194.87.13.2 195.46.165.162 19 11262
                  -194.87.13.2 195.46.165.158 7 2382
                  -194.87.13.2 195.46.165.151 8 2254
                  -194.87.13.2 195.46.165.145 161 74887
                  -194.87.13.2 195.46.165.135 26 11996
                  -194.87.13.2 195.46.165.133 14 5629
                  -194.87.13.2 195.46.164.27 11 2278
                  -194.87.13.2 195.46.164.25 64 67188
                  -194.87.13.2 195.46.164.17 35 26017
                  -194.87.13.2 195.46.164.16 6 1300
                  -194.87.13.2 195.46.164.8 14 5798
                  -194.87.13.2 195.46.164.6 5 1254
                  -194.87.13.2 195.46.164.2 4 1079
                  -194.87.13.2 195.46.163.180 5 1187
                  -194.87.13.2 195.46.163.178 25 2053
                  -194.87.13.2 195.46.163.174 5 1119
                  -194.87.13.2 195.46.163.160 8 1365
                  -194.87.13.2 195.46.163.159 5 1119
                  -194.87.13.2 195.46.163.158 28 17225
                  -194.87.13.2 195.46.163.156 16 3397
                  -194.87.13.2 195.46.163.147 6 1163
                  -194.87.13.2 195.46.163.136 5 1119
                  -194.87.13.2 195.46.163.133 10 2370
                  -194.87.13.2 195.46.163.132 6 1284
                  -194.87.13.2 195.46.163.123 15 3503
                  -194.87.13.2 195.46.163.120 14 3613
                  -194.87.13.2 195.46.163.105 6 1294
                  -194.87.13.2 195.46.163.94 5 1119
                  -194.87.13.2 195.46.163.89 132 107364
                  -194.87.13.2 195.46.163.76 13 2646
                  -194.87.13.2 195.46.163.65 20 4627
                  -194.87.13.2 195.46.163.60 8 1239
                  -194.87.13.2 195.46.163.47 7 2110
                  -194.87.13.2 195.46.163.38 17 3593
                  -194.87.13.2 195.46.163.31 9 2378
                  -194.87.13.2 195.46.163.30 14 2506
                  -194.87.13.2 195.46.163.13 18 3681
                  -194.87.13.2 195.46.163.7 21 3885
                  -194.87.13.2 195.46.162.243 19 4865
                  -194.87.13.2 195.46.162.226 8 2440
                  -194.87.13.2 195.46.162.221 21 2981
                  -194.87.13.2 195.46.162.218 5 1265
                  -194.87.13.2 195.46.162.213 5 1257
                  -194.87.13.2 195.46.162.206 59 43287
                  -194.87.13.2 195.46.162.203 5 1119
                  -194.87.13.2 195.46.162.196 18 14883
                  -194.87.13.2 195.46.162.193 5 1119
                  -194.87.13.2 195.46.162.184 13 1455
                  -194.87.13.2 195.46.162.180 5 1119
                  -194.87.13.2 195.46.162.179 9 3109
                  -194.87.13.2 195.46.162.177 4 1079
                  -194.87.13.2 195.46.162.173 8 2499
                  -194.87.13.2 195.46.162.172 6 1159
                  -194.87.13.2 195.46.162.169 8 2420
                  -194.87.13.2 195.46.162.165 4 1079
                  -194.87.13.2 195.46.162.120 5 1119
                  -194.87.13.2 195.46.162.119 5 1262
                  -194.87.13.2 195.46.162.104 4 1079
                  -194.87.13.2 195.46.162.100 6 1290
                  -194.87.13.2 195.46.162.72 5 1119
                  -194.87.13.2 195.46.162.70 10 2373
                  -194.87.13.2 195.46.162.60 14 3601
                  -194.87.13.2 195.46.162.55 27 28360
                  -194.87.13.2 195.46.162.53 7 1203
                  -194.87.13.2 195.46.162.47 21 3887
                  -194.87.13.2 195.46.162.42 12 2624
                  -194.87.13.2 195.46.162.40 11 2420
                  -194.87.13.2 195.46.162.34 11 2411
                  -194.87.13.2 195.46.162.30 7 1207
                  -194.87.13.2 195.46.162.28 18 3603
                  -194.87.13.2 195.46.162.13 42 51477
                  -194.87.13.2 195.46.162.8 5 1119
                  -194.87.13.2 195.46.162.6 9 2452
                  -194.87.13.2 195.46.162.1 14 2562
                  -194.87.13.2 195.46.161.252 5 1119
                  -194.87.13.2 195.46.161.251 21 4943
                  -194.87.13.2 195.46.161.236 5 1260
                  -193.125.152.3 212.192.34.200 2 298
                  -193.125.152.3 212.248.39.3 3 174
                  -194.87.13.2 195.46.161.233 5 1262
                  -194.87.13.2 195.46.161.224 11 1508
                  -194.87.13.2 195.46.161.217 22 5891
                  -194.87.13.2 195.46.161.209 11 2619
                  -194.87.13.2 195.46.161.207 20 2351
                  -193.125.152.3 62.76.0.1 12 888
                  -193.125.152.3 62.76.114.44 4 861
                  -194.87.13.2 195.46.161.205 5 1119
                  -194.87.13.2 195.46.161.201 5 1262
                  -194.87.13.2 195.46.161.199 13 4623
                  -194.87.13.2 195.46.161.186 90 82991
                  -193.125.152.4 193.124.1.131 20 1742
                  -193.125.152.4 193.124.22.81 402 73761
                  -193.125.152.4 193.124.36.34 37 8132
                  -193.125.152.4 193.124.188.65 101 48405
                  -193.125.152.4 193.125.44.76 6 240
                  -193.125.152.4 193.125.80.35 37 3336
                  -193.125.152.4 193.233.208.3 4 240
                  -193.125.152.4 194.58.38.18 36 3384
                  -194.87.13.2 195.46.161.184 5 1119
                  -193.125.152.4 194.58.124.17 39 3399
                  -193.125.152.4 194.58.212.34 25 3742
                  -193.125.152.4 194.67.80.42 25 1795
                  -193.125.152.4 194.84.44.35 18 1638
                  -193.125.152.4 194.87.0.20 82 19845
                  -193.125.152.4 194.87.160.195 17 1150
                  -193.125.152.4 194.87.206.137 19 1690
                  -193.125.152.4 194.87.211.1 103 8898
                  -194.87.13.2 195.46.161.177 6 2360
                  -194.87.13.2 195.46.161.172 5 1259
                  -193.125.152.4 194.154.92.129 31 5655
                  -193.125.152.4 194.186.221.251 19 1238
                  -193.125.152.4 194.186.254.26 62 31955
                  -193.125.152.4 194.190.194.33 16 1534
                  -194.87.13.2 195.46.161.171 16 3685
                  -204.57.67.27 194.58.72.120 4 160
                  -193.125.152.4 195.9.16.2 23 1913
                  -193.125.152.4 195.12.66.81 16 1534
                  -194.87.13.2 195.46.161.170 32 7476
                  -193.125.152.4 195.54.2.7 17 1586
                  -193.125.152.4 195.58.1.145 35 7789
                  -193.125.152.4 195.90.136.21 94 11466
                  -193.125.152.4 195.222.130.67 17 1577
                  -193.125.152.4 195.239.88.50 21 1220
                  -194.87.13.2 195.46.161.164 7 2364
                  -194.87.13.2 195.46.161.156 12 2478
                  -194.87.13.2 195.46.161.155 6 1296
                  -194.87.13.2 195.46.161.154 11 2282
                  -194.87.13.2 195.46.161.153 5 1256
                  -194.87.13.2 195.46.161.146 6 252
                  -194.87.13.2 195.46.161.113 11 3596
                  -194.87.13.2 195.46.161.111 16 3598
                  -193.125.152.5 193.124.22.65 18 1368
                  -194.87.13.2 195.46.161.109 4 1079
                  -194.87.13.2 195.46.161.85 10 1383
                  -194.87.13.2 195.46.161.84 21 4799
                  -194.87.13.2 195.46.161.83 121 57225
                  -194.87.13.2 195.46.161.75 3 124
                  -193.125.152.6 193.124.22.22 2 88
                  -193.125.152.6 193.124.22.65 15 930
                  -193.125.152.6 193.232.119.131 2 80
                  -194.87.13.2 195.46.160.69 147 34960
                  -193.125.152.6 194.226.235.33 6 254
                  -194.87.13.2 195.38.160.38 10 1591
                  -194.87.13.2 195.16.108.139 10 9589
                  -193.125.152.6 195.91.161.2 4 176
                  -193.125.152.6 195.128.140.2 19 5145
                  -193.125.152.6 195.161.24.66 23 1283
                  -194.87.13.2 195.16.108.135 8 3272
                  -194.87.13.2 195.16.102.4 8 2154
                  -194.87.13.2 195.16.101.101 4 1280
                  -194.87.13.2 195.16.101.67 72 52581
                  -193.125.152.6 212.46.3.250 4 176
                  -193.125.152.8 193.124.22.65 4 224
                  -194.87.13.2 195.16.98.235 22 3020
                  -193.125.152.8 193.124.224.35 14 2571
                  -194.87.13.2 195.16.98.230 7 1330
                  -194.87.13.2 195.16.98.209 10 3463
                  -194.87.13.2 195.16.98.204 27 5394
                  -194.87.13.2 195.16.98.194 13 3269
                  -194.87.13.2 195.16.98.193 14 4507
                  -194.87.13.2 195.16.98.99 7 1400
                  -194.87.13.2 195.16.98.37 44 49756
                  -194.87.13.2 195.16.98.13 14 3317
                  -193.125.152.10 158.250.26.145 18 1368
                  -194.87.13.2 195.16.96.9 11 2554
                  -194.87.13.2 195.12.32.170 8 3451
                  -193.125.152.10 193.124.22.65 18 1368
                  -193.125.152.10 193.233.11.84 4 304
                  -193.125.152.10 194.67.64.33 18 1368
                  -193.125.152.10 194.67.65.17 18 1368
                  -193.125.152.10 194.67.65.18 18 1368
                  -193.125.152.10 194.67.65.130 18 1368
                  -193.125.152.10 194.67.106.209 20 1520
                  -193.125.152.10 194.84.127.22 12 912
                  -194.87.13.2 195.12.32.165 27 4363
                  -194.87.13.2 195.12.32.52 5 2138
                  -194.87.13.2 195.12.32.7 4 1219
                  -193.125.152.10 194.190.105.2 2 152
                  -193.125.152.10 194.190.105.4 1 76
                  -193.125.152.10 194.190.105.7 2 152
                  -193.125.152.10 195.5.128.42 18 1368
                  -193.125.152.10 195.5.138.6 18 1368
                  -193.125.152.10 195.5.138.44 16 1216
                  -193.125.152.10 195.26.160.48 15 1140
                  -193.125.152.10 195.26.160.50 18 1368
                  -193.125.152.10 195.54.192.1 2 152
                  -193.125.152.10 195.54.192.43 2 152
                  -193.125.152.10 195.133.94.129 4 336
                  -193.125.152.10 195.151.111.45 13 988
                  -194.87.13.2 195.9.176.153 18 5299
                  -194.87.13.2 195.9.103.3 184 183787
                  -194.87.13.2 195.9.96.7 96 66779
                  -193.125.152.12 193.124.22.65 2 152
                  -193.125.152.15 193.124.22.65 18 1368
                  -193.125.152.16 193.124.22.65 15 1140
                  -193.125.152.17 193.124.22.22 12 906
                  -193.125.152.17 193.124.22.65 12 912
                  -193.125.152.18 193.124.22.65 2 152
                  -204.57.67.9 195.146.67.100 5 200
                  -194.87.13.2 195.9.94.33 11 2544
                  -193.125.152.19 193.124.22.65 13 988
                  -194.87.13.2 195.9.90.85 139 61939
                  -194.87.13.2 195.9.67.45 18 3485
                  -193.125.152.23 193.124.22.65 4 246
                  -194.87.13.2 195.9.47.230 7 2488
                  -193.125.152.23 194.87.0.28 3783 538698
                  -193.125.152.23 194.186.254.26 6986 644105
                  -194.87.13.2 194.220.215.111 73 61702
                  -193.125.152.24 192.124.174.67 5717 2168144
                  -194.87.13.2 194.220.215.110 56 45039
                  -193.125.152.24 193.124.97.131 504 27627
                  -194.87.13.2 194.220.215.66 59 35775
                  -194.87.13.2 194.220.169.1 32 14343
                  -193.125.152.24 193.125.95.121 1040 572488
                  -194.87.13.2 194.220.140.106 6 1159
                  -194.87.13.2 194.190.105.4 40 8033
                  -194.87.13.2 194.190.82.40 34 24976
                  -193.125.152.24 194.58.72.102 2072 1038564
                  -193.125.152.24 194.58.110.33 649 310072
                  -194.87.13.2 194.190.56.83 11 1499
                  diff --git a/contrib/ip_and_mac/test.sql b/contrib/ip_and_mac/test.sql
                  deleted file mode 100644 (file)
                  index d1a99ac..0000000
                  +++ /dev/null
                  @@ -1,71 +0,0 @@
                  ---
                  --- A quick test of the IP address code
                  ---
                  --- $Id: test.sql,v 1.2 1998/06/16 05:35:12 momjian Exp $
                  ---      This is original test (it was written before my changes in this class). alex.
                  -
                  --- temporary table:
                  -create table addresses (address ipaddr);
                  -
                  --- sample data from two subnets:
                  -insert into addresses values ('158.37.96.15');
                  -insert into addresses values ('158.37.96.16');
                  -insert into addresses values ('158.37.96.17');
                  -insert into addresses values ('158.37.97.15');
                  -insert into addresses values ('158.37.97.16');
                  -insert into addresses values ('158.37.97.17');
                  -insert into addresses values ('158.37.98.15');
                  -insert into addresses values ('158.37.98.16');
                  -insert into addresses values ('158.37.98.17');
                  -insert into addresses values ('158.37.96.150');
                  -insert into addresses values ('158.37.96.160');
                  -insert into addresses values ('158.37.96.170');
                  -insert into addresses values ('158.37.97.150');
                  -insert into addresses values ('158.37.97.160');
                  -insert into addresses values ('158.37.97.170');
                  -insert into addresses values ('158.37.98.150');
                  -insert into addresses values ('158.37.98.160');
                  -insert into addresses values ('158.37.98.170');
                  -
                  --- show them all:
                  -select * from addresses;
                  -
                  --- select the ones in subnet 96:
                  -select * from addresses where ipaddr_in_net(address, '158.37.96.0/24');
                  -
                  --- select the ones not in subnet 96:
                  -select * from addresses where not ipaddr_in_net(address, '158.37.96.0/24');
                  -
                  --- select the ones in subnet 97:
                  -select * from addresses where ipaddr_in_net(address, '158.37.97.0/24');
                  -
                  --- select the ones not in subnet 97:
                  -select * from addresses where not ipaddr_in_net(address, '158.37.97.0/24');
                  -
                  --- select the ones in subnet 96 or 97, sorted:
                  -select * from addresses where ipaddr_in_net(address, '158.37.96.0/23')
                  -   order by address;
                  -
                  --- now some networks:
                  -create table networks (network ipaddr);
                  -
                  --- now the subnets mentioned above:
                  -insert into networks values ('158.37.96.0/24');
                  -insert into networks values ('158.37.97.0/24');
                  -insert into networks values ('158.37.98.0/24');
                  -
                  --- select the netmasks of the net containing each:
                  -select address, ipaddr_mask(network) from addresses, networks
                  -   where ipaddr_in_net(address, network);
                  -
                  --- select the broadcast address of the net containing each:
                  -select address, ipaddr_bcast(network) from addresses, networks
                  -   where ipaddr_in_net(address, network);
                  -
                  --- tidy up:
                  -drop table addresses;
                  -drop table networks;
                  -
                  ---
                  --- eof
                  ---
                  diff --git a/contrib/ip_and_mac/test1.sql b/contrib/ip_and_mac/test1.sql
                  deleted file mode 100644 (file)
                  index 372a084..0000000
                  +++ /dev/null
                  @@ -1,11 +0,0 @@
                  -drop table stat_t;
                  -create table stat_t(i1 ipaddr, i2 ipaddr, p int4, b int4);
                  -create index stat_i1 on stat_t using btree (i1 ipaddr_ops);
                  -create index stat_i2 on stat_t using btree (i2 ipaddr_ops);
                  -copy stat_t from '/v/noc/src/ip_class/test.DATA' using delimiters ' ';
                  ---
                  --- Please, check if your test data are not in /v/noc/src/ip_class/test.DATA file,
                  --- edit test1.sql file and repeatr it.
                  ---
                  --- If everything is OK, you should run test2.sql now
                  ---
                  diff --git a/contrib/ip_and_mac/test2.sql b/contrib/ip_and_mac/test2.sql
                  deleted file mode 100644 (file)
                  index 3207aa2..0000000
                  +++ /dev/null
                  @@ -1,26 +0,0 @@
                  -vacuum verbose analyze stat_t (i1,i2);
                  ---
                  ---
                  -select i2,sum(b) as b
                  -into tmp
                  -from stat_t
                  -where i1 >= '144.206.0.0' and i1 <= '144.206.255.255'
                  -group by i2;
                  -insert into tmp
                  -select '0.0.0.0' as i2,sum(b) as k
                  -from tmp
                  -where b < 10 * 1024;
                  -delete from tmp
                  -where b < 10 * 1024 and i2 <> '0.0.0.0';
                  -select i2,b / 1024 as k from tmp
                  -order by k desc;
                  -select ipaddr_print(i2,'%A/%P'),b from tmp where i2 = '0.0.0.0';
                  -drop table tmp;
                  -explain  select i2,sum(b) as b
                  -into tmp
                  -from stat_t
                  -where i1 >= '144.206.0.0' and i1 <= '144.206.255.255'
                  -group by i2;
                  --- ********************************************************
                  --- * Now remove test table by 'drop table stat_t' command *
                  --- ********************************************************
                  diff --git a/doc/README.ipaddr b/doc/README.ipaddr
                  new file mode 100644 (file)
                  index 0000000..7e7883a
                  --- /dev/null
                  @@ -0,0 +1,74 @@
                  +PostgreSQL type extensions for IP and MAC addresses.
                  +---------------------------------------------------
                  +
                  +$Id: README.ipaddr,v 1.1 1998/10/03 05:40:41 momjian Exp $
                  +
                  +I needed to record IP and MAC level ethernet addresses in a data
                  +base, and I really didn't want to store them as plain strings, with
                  +no enforced error checking, so I put together the accompanying code
                  +as my first experiment with adding a data type to PostgreSQL.  I
                  +then thought that this might be useful to others, both directly and
                  +as a very simple example of how to do this sort of thing, so I
                  +submitted it to the PostgreSQL project for inclusion in the contrib
                  +directory.  Since then, that directory has been modified to contain
                  +Aleksei Roudnev's implementation, which is based on mine.
                  +
                  +For those who have seen my previous contribution of these types, note
                  +that much has changed: I've modified the IP address type to work the
                  +way Paul Vixie did with his CIDR type.  In fact, I've pretty much just
                  +stolen his solution, modifying it into my framework in such a way as
                  +to facilitate the addition of IPV6 handling code in the future.  I've
                  +pretty much ignored Aleksei's C code, but I've added his SQL code to
                  +enter the necessary operators into the various system tables needed to
                  +make the types indexable.
                  +
                  +IP addresses are implemented as a struct of fixed in-memory length,
                  +but variable on-disk storage size.  For IPV4, it contains the address
                  +family (AF_INET), the CIDR prefix length and four byte address.  For
                  +IPV6, the address family will be different, and the address longer.
                  +
                  +The external representation of an IP address generally looks like
                  +'158.37.96.15/32'.  This address happens to be part of a subnet where
                  +I work; '158.37.96.0/24', which itself is a part of the larger subnet
                  +allocated to our site, which is '158.37.96.0/21', which again, if you
                  +go by the old book, is part of the class "B" net '158.37.0.0/16'.
                  +
                  +Input and output functions are supplied, along with the "normal" <,
                  +<=, =, >=, > and <> operators, which all do what you expect.  In
                  +addition, there are operators to check for networks or addresses being
                  +subnets of or addresses contained within other networks.  << tests
                  +whether the left operand is contained within the right, <<= includes
                  +equality, >> and >>= do the same things the opposite way.
                  +
                  +The input and output functions use routines from Paul Vixie's BIND,
                  +and I've snarfed the source files inet_net_ntop.c and inet_net_pton.c
                  +directly from a recent distribution of that code.  They are included
                  +here to avoid the need to fetch and install the BIND libraries to be
                  +able to use this code.  IANAL, but it looks from the copyright
                  +messages in the files as if this should be acceptable.  Read the
                  +documentation in inet_net_pton.c to see the legal input formats.
                  +
                  +MAC level ethernet addresses are implemented as a 6 byte struct that
                  +contains the address as unsigned chars.  Several input forms are
                  +accepted; the following are all the same address: '08002b:010203',
                  +'08002b-010203', '0800.2b01.0203', '08-00-2b-01-02-03' and
                  +'08:00:2b:01:02:03'.  Upper and lower case is accepted for the digits
                  +'a' through 'f'.  Output is always in the latter of the given forms.
                  +
                  +As with IP addresses, input and output functions are supplied as well
                  +as the "normal" operators, which do what you expect.  As an extra
                  +feature, a function macaddr_manuf() is defined, which returns the name
                  +of the manufacturer as a string.  This is currently held in a
                  +hard-coded struct internal to the C module -- it might be smarter to
                  +put this information into an actual data base table, and look up the
                  +manufacturer there.
                  +
                  +Many thanks to Aleksei Roudnev and Paul Vixie for their fine work!
                  +
                  +I don't know what changes are needed to the Makefile for other systems
                  +than the one I'm running (NetBSD 1.3), but anyway: to install on a BSD
                  +system: fix the path names in the Makefile if you need to, then make,
                  +make install, slurp the SQL files into psql or whatever, and you're
                  +off.  Enjoy!
                  +
                  +Bergen, Norway, 1998-08-09, Tom Ivar Helbekkmo ([email protected]).
                  index 770d47d6fedf96a5fdd28c9cc75caa36c8b9ac6e..76e80c6d7168d7cd4a549e5d21dde934ba20b520 100644 (file)
                    *
                    *
                    * IDENTIFICATION
                  - *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.39 1998/09/30 05:48:25 thomas Exp $
                  + *   $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.40 1998/10/03 05:40:42 momjian Exp $
                    *
                    * HISTORY
                    *   AUTHOR            DATE            MAJOR EVENT
                  @@ -344,7 +344,7 @@ typedef union
                   
                   
                   
                  -#define    YYFINAL     1649
                  +#define    YYFINAL     1650
                   #define    YYFLAG      -32768
                   #define    YYNTBASE    229
                   
                  @@ -483,18 +483,18 @@ static const short yyprhs[] = {     0,
                     2574,  2578,  2582,  2584,  2588,  2592,  2596,  2598,  2600,  2605,
                     2608,  2612,  2616,  2618,  2622,  2624,  2628,  2630,  2632,  2633,
                     2635,  2637,  2639,  2641,  2643,  2645,  2647,  2649,  2651,  2653,
                  -  2655,  2657,  2659,  2661,  2664,  2666,  2668,  2670,  2672,  2674,
                  -  2676,  2678,  2680,  2682,  2684,  2686,  2688,  2690,  2692,  2694,
                  -  2696,  2698,  2700,  2702,  2704,  2706,  2708,  2710,  2712,  2714,
                  -  2716,  2718,  2720,  2722,  2724,  2726,  2728,  2730,  2732,  2734,
                  -  2736,  2738,  2740,  2742,  2744,  2746,  2748,  2750,  2752,  2754,
                  -  2756,  2758,  2760,  2762,  2764,  2766,  2768,  2770,  2772,  2774,
                  -  2776,  2778,  2780,  2782,  2784,  2786,  2788,  2790,  2792,  2794,
                  -  2796,  2798,  2800,  2802,  2804,  2806,  2808,  2810,  2812,  2814,
                  -  2816,  2818,  2820,  2822,  2824,  2826,  2828,  2830,  2832,  2834,
                  -  2836,  2838,  2840,  2842,  2844,  2846,  2848,  2850,  2852,  2854,
                  -  2856,  2858,  2860,  2862,  2864,  2866,  2868,  2870,  2872,  2874,
                  -  2876,  2878,  2880,  2882,  2884,  2886,  2888,  2890
                  +  2655,  2657,  2659,  2661,  2664,  2666,  2668,  2670,  2673,  2675,
                  +  2677,  2679,  2681,  2683,  2685,  2687,  2689,  2691,  2693,  2695,
                  +  2697,  2699,  2701,  2703,  2705,  2707,  2709,  2711,  2713,  2715,
                  +  2717,  2719,  2721,  2723,  2725,  2727,  2729,  2731,  2733,  2735,
                  +  2737,  2739,  2741,  2743,  2745,  2747,  2749,  2751,  2753,  2755,
                  +  2757,  2759,  2761,  2763,  2765,  2767,  2769,  2771,  2773,  2775,
                  +  2777,  2779,  2781,  2783,  2785,  2787,  2789,  2791,  2793,  2795,
                  +  2797,  2799,  2801,  2803,  2805,  2807,  2809,  2811,  2813,  2815,
                  +  2817,  2819,  2821,  2823,  2825,  2827,  2829,  2831,  2833,  2835,
                  +  2837,  2839,  2841,  2843,  2845,  2847,  2849,  2851,  2853,  2855,
                  +  2857,  2859,  2861,  2863,  2865,  2867,  2869,  2871,  2873,  2875,
                  +  2877,  2879,  2881,  2883,  2885,  2887,  2889,  2891
                   };
                   
                   static const short yyrhs[] = {   230,
                  @@ -765,29 +765,29 @@ static const short yyrhs[] = {   230,
                      486,     0,   204,     0,   486,     0,   486,     0,   486,     0,
                      483,     0,   204,     0,   482,     0,   209,     0,   483,     0,
                      421,   483,     0,   481,     0,   119,     0,    47,     0,   208,
                  -     0,   207,     0,   205,     0,   204,     0,   486,     0,   426,
                  -     0,   431,     0,   204,     0,   436,     0,     3,     0,     4,
                  -     0,   137,     0,   138,     0,   140,     0,   141,     0,   143,
                  -     0,   146,     0,   147,     0,   148,     0,   149,     0,   150,
                  -     0,    41,     0,   152,     0,   153,     0,   156,     0,   157,
                  -     0,   158,     0,   159,     0,   160,     0,   161,     0,    60,
                  -     0,   162,     0,   163,     0,    66,     0,    67,     0,   164,
                  -     0,   167,     0,    72,     0,   169,     0,   170,     0,    79,
                  -     0,   173,     0,   174,     0,   176,     0,   178,     0,    84,
                  -     0,   179,     0,    86,     0,   180,     0,    87,     0,   181,
                  -     0,    95,     0,    96,     0,   182,     0,    99,     0,   183,
                  -     0,   101,     0,   184,     0,   186,     0,   187,     0,   188,
                  -     0,   105,     0,   189,     0,   190,     0,   193,     0,   194,
                  -     0,   195,     0,   196,     0,   111,     0,   113,     0,   114,
                  -     0,   134,     0,   197,     0,   135,     0,   201,     0,   203,
                  -     0,   133,     0,   486,     0,   136,     0,   139,     0,   142,
                  -     0,   144,     0,    25,     0,   145,     0,    27,     0,    28,
                  -     0,   151,     0,   154,     0,   155,     0,    47,     0,    51,
                  -     0,    55,     0,   165,     0,   166,     0,   168,     0,   171,
                  -     0,   172,     0,   175,     0,    89,     0,    92,     0,    93,
                  -     0,   185,     0,   191,     0,   192,     0,   110,     0,   117,
                  -     0,   119,     0,   200,     0,   202,     0,    28,     0,   172,
                  -     0
                  +   449,     0,   207,     0,   205,     0,   204,     0,   486,     0,
                  +   426,     0,   431,     0,   204,     0,   436,     0,     3,     0,
                  +     4,     0,   137,     0,   138,     0,   140,     0,   141,     0,
                  +   143,     0,   146,     0,   147,     0,   148,     0,   149,     0,
                  +   150,     0,    41,     0,   152,     0,   153,     0,   156,     0,
                  +   157,     0,   158,     0,   159,     0,   160,     0,   161,     0,
                  +    60,     0,   162,     0,   163,     0,    66,     0,    67,     0,
                  +   164,     0,   167,     0,    72,     0,   169,     0,   170,     0,
                  +    79,     0,   173,     0,   174,     0,   176,     0,   178,     0,
                  +    84,     0,   179,     0,    86,     0,   180,     0,    87,     0,
                  +   181,     0,    95,     0,    96,     0,   182,     0,    99,     0,
                  +   183,     0,   101,     0,   184,     0,   186,     0,   187,     0,
                  +   188,     0,   105,     0,   189,     0,   190,     0,   193,     0,
                  +   194,     0,   195,     0,   196,     0,   111,     0,   113,     0,
                  +   114,     0,   134,     0,   197,     0,   135,     0,   201,     0,
                  +   203,     0,   133,     0,   486,     0,   136,     0,   139,     0,
                  +   142,     0,   144,     0,    25,     0,   145,     0,    27,     0,
                  +    28,     0,   151,     0,   154,     0,   155,     0,    47,     0,
                  +    51,     0,    55,     0,   165,     0,   166,     0,   168,     0,
                  +   171,     0,   172,     0,   175,     0,    89,     0,    92,     0,
                  +    93,     0,   185,     0,   191,     0,   192,     0,   110,     0,
                  +   117,     0,   119,     0,   200,     0,   202,     0,    28,     0,
                  +   172,     0
                   };
                   
                   #endif
                  @@ -875,18 +875,18 @@ static const short yyrline[] = { 0,
                     4376,  4384,  4394,  4396,  4398,  4409,  4411,  4413,  4428,  4435,
                     4442,  4461,  4463,  4468,  4475,  4482,  4494,  4508,  4509,  4512,
                     4517,  4529,  4530,  4531,  4532,  4533,  4539,  4540,  4542,  4543,
                  -  4548,  4555,  4562,  4569,  4577,  4579,  4589,  4601,  4608,  4609,
                  -  4610,  4617,  4619,  4621,  4632,  4633,  4634,  4635,  4636,  4637,
                  -  4638,  4639,  4640,  4641,  4642,  4643,  4644,  4645,  4646,  4647,
                  -  4648,  4649,  4650,  4651,  4652,  4653,  4654,  4655,  4656,  4657,
                  -  4658,  4659,  4660,  4661,  4662,  4663,  4664,  4665,  4666,  4667,
                  -  4668,  4669,  4670,  4671,  4672,  4673,  4674,  4675,  4676,  4677,
                  -  4678,  4679,  4680,  4681,  4682,  4683,  4684,  4685,  4686,  4687,
                  -  4688,  4689,  4690,  4691,  4692,  4693,  4694,  4695,  4696,  4697,
                  -  4698,  4699,  4700,  4701,  4714,  4715,  4716,  4717,  4718,  4719,
                  -  4720,  4721,  4722,  4723,  4724,  4725,  4726,  4727,  4728,  4729,
                  -  4730,  4731,  4732,  4733,  4734,  4735,  4736,  4737,  4738,  4739,
                  -  4740,  4741,  4742,  4743,  4744,  4745,  4748,  4755
                  +  4548,  4555,  4562,  4569,  4577,  4579,  4589,  4601,  4609,  4610,
                  +  4611,  4618,  4620,  4622,  4633,  4634,  4635,  4636,  4637,  4638,
                  +  4639,  4640,  4641,  4642,  4643,  4644,  4645,  4646,  4647,  4648,
                  +  4649,  4650,  4651,  4652,  4653,  4654,  4655,  4656,  4657,  4658,
                  +  4659,  4660,  4661,  4662,  4663,  4664,  4665,  4666,  4667,  4668,
                  +  4669,  4670,  4671,  4672,  4673,  4674,  4675,  4676,  4677,  4678,
                  +  4679,  4680,  4681,  4682,  4683,  4684,  4685,  4686,  4687,  4688,
                  +  4689,  4690,  4691,  4692,  4693,  4694,  4695,  4696,  4697,  4698,
                  +  4699,  4700,  4701,  4702,  4715,  4716,  4717,  4718,  4719,  4720,
                  +  4721,  4722,  4723,  4724,  4725,  4726,  4727,  4728,  4729,  4730,
                  +  4731,  4732,  4733,  4734,  4735,  4736,  4737,  4738,  4739,  4740,
                  +  4741,  4742,  4743,  4744,  4745,  4746,  4749,  4756
                   };
                   #endif
                   
                  @@ -1144,7 +1144,7 @@ static const short yyr2[] = {     0,
                        3,     3,     1,     3,     3,     3,     1,     1,     4,     2,
                        3,     3,     1,     3,     1,     3,     1,     1,     0,     1,
                        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
                  -     1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
                  +     1,     1,     1,     2,     1,     1,     1,     2,     1,     1,
                        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
                        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
                        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
                  @@ -1193,7 +1193,7 @@ static const short yydefact[] = {     0,
                      292,   302,     0,     0,   443,     0,     0,     0,   568,   568,
                      640,   641,   643,   645,   559,   839,     0,     0,   817,   553,
                      593,     0,   568,     0,   595,   556,     0,     0,   886,   584,
                  -     0,   816,   646,   564,   891,     0,   825,     0,   818,   812,
                  +     0,   816,   646,   564,   891,     0,   825,     0,   730,   812,
                        0,   797,     0,     0,     0,     0,     0,   531,   538,   541,
                      540,   536,   561,   539,   826,   795,   615,   594,   730,   469,
                      793,     0,     0,   616,   815,   811,   813,   617,   417,    69,
                  @@ -1206,731 +1206,819 @@ static const short yydefact[] = {     0,
                      563,   570,     0,     0,     0,   546,   545,     0,   735,     0,
                      544,   579,   580,   581,   577,   585,   576,   568,   566,   695,
                        0,     0,   547,   740,   765,     0,   574,     0,     0,   575,
                  -   543,   542,   537,   573,   635,   618,   628,   626,   627,     0,
                  -     0,     0,   594,   814,     0,   535,     0,     0,     0,     0,
                  -   665,     0,     0,     0,     0,   655,   657,   636,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   614,   471,     0,
                  -   500,     0,     0,     0,    73,    74,    68,    72,    71,    66,
                  -    70,    67,   788,   730,   500,   787,     0,     0,   730,   420,
                  -     0,     0,   335,   286,   428,   374,   374,   374,   374,    79,
                  -     0,    54,    55,    59,     0,     0,     0,     0,     0,     0,
                  -   101,   103,   104,   152,     0,   219,   220,     0,    59,   405,
                  -   247,   246,   248,     0,   243,     0,   412,   550,   839,   548,
                  -   551,   341,     0,   823,   824,   342,   822,   346,     0,     0,
                  -   225,     0,     0,     0,     0,   222,     0,     0,   276,     0,
                  -   273,     0,     0,   525,   493,   261,     0,     0,   366,   299,
                  -   298,     0,     0,   445,   730,     0,   477,     0,   438,     0,
                  -     0,     0,   572,     0,     0,     0,   477,     0,   737,   738,
                  -   736,     0,     0,     0,     0,     0,     0,     0,   565,     0,
                  +   543,   542,   537,   573,   635,     0,   818,   618,   628,   626,
                  +   627,     0,     0,     0,   594,   814,     0,   535,     0,     0,
                  +     0,     0,   665,     0,     0,     0,     0,   655,   657,   636,
                  +     0,     0,     0,     0,     0,     0,     0,     0,   614,   471,
                  +     0,   500,     0,     0,     0,    73,    74,    68,    72,    71,
                  +    66,    70,    67,   788,   730,   500,   787,     0,     0,   730,
                  +   420,     0,     0,   335,   286,   428,   374,   374,   374,   374,
                  +    79,     0,    54,    55,    59,     0,     0,     0,     0,     0,
                  +     0,   101,   103,   104,   152,     0,   219,   220,     0,    59,
                  +   405,   247,   246,   248,     0,   243,     0,   412,   550,   839,
                  +   548,   551,   341,     0,   823,   824,   342,   822,   346,     0,
                  +     0,   225,     0,     0,     0,     0,   222,     0,     0,   276,
                  +     0,   273,     0,     0,   525,   493,   261,     0,     0,   366,
                  +   299,   298,     0,     0,   445,   730,     0,   477,     0,   438,
                  +     0,     0,     0,   572,     0,     0,     0,   477,     0,   737,
                  +   738,   736,     0,     0,     0,     0,     0,     0,     0,   565,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,   730,     0,   742,   755,   731,   767,     0,     0,     0,
                  -     0,     0,     0,   594,   772,     0,   631,     0,     0,   534,
                  -     0,     0,   900,   902,   903,   907,   908,   909,   916,   917,
                  -   918,   922,   923,   924,   896,   897,   898,   899,   901,   904,
                  -   905,   906,   910,   911,   912,   913,   914,   915,   919,   920,
                  -   921,   925,   926,   895,   794,   693,     0,   715,   716,   718,
                  -   720,     0,     0,     0,   721,     0,     0,     0,     0,     0,
                  -     0,     0,   730,     0,   697,   698,     0,   661,     0,   656,
                  -   659,   633,     0,   667,     0,   694,     0,     0,     0,   632,
                  -     0,     0,     0,   625,     0,     0,     0,   623,     0,     0,
                  -     0,   624,     0,     0,     0,   619,     0,     0,     0,   620,
                  -     0,     0,     0,   622,     0,     0,     0,   621,   629,     0,
                  -     0,   792,     0,   526,   796,   781,   783,   804,     0,   638,
                  -     0,   782,   790,     0,   526,     0,     0,    95,    89,    88,
                  -     0,     0,   422,   373,   102,    85,     0,     0,     0,   372,
                  -    52,    57,    58,    63,     0,     0,     0,     0,     0,     0,
                  -   214,     0,   216,   112,   108,   215,    63,     0,     0,   415,
                  -     0,   407,   549,     0,   340,   345,   339,     0,     0,     0,
                  -   224,   234,   226,   227,   228,   229,     0,     0,     0,     0,
                  -   272,   322,   477,     0,   356,     0,     0,   312,   316,   314,
                  -     0,   442,   446,   440,     0,     0,   317,     0,     0,     0,
                  -   562,   642,   644,     0,   558,     0,   647,   648,     0,   552,
                  -   587,   588,   589,   590,   591,   592,   586,     0,   555,     0,
                  -   740,   765,     0,   753,   743,   748,     0,   649,     0,   754,
                  -     0,     0,     0,     0,     0,   741,     0,     0,     0,     0,
                  -   769,   650,   583,     0,   771,     0,     0,     0,   654,     0,
                  -     0,   604,   606,   605,   607,   608,   609,   610,   611,     0,
                  -   601,     0,   529,   534,   560,     0,     0,     0,   740,   765,
                  -     0,   711,   699,   706,   704,   705,     0,     0,   712,     0,
                  -     0,     0,     0,     0,   696,     0,     0,   660,   658,   662,
                  -     0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,   730,     0,   742,   755,   731,   767,     0,     0,
                  +     0,     0,     0,     0,   594,   772,     0,     0,   631,     0,
                  +     0,   534,     0,     0,   900,   902,   903,   907,   908,   909,
                  +   916,   917,   918,   922,   923,   924,   896,   897,   898,   899,
                  +   901,   904,   905,   906,   910,   911,   912,   913,   914,   915,
                  +   919,   920,   921,   925,   926,   895,   794,   693,     0,   715,
                  +   716,   718,   720,     0,     0,     0,   721,     0,     0,     0,
                  +     0,     0,     0,     0,   730,     0,   697,   698,     0,   661,
                  +     0,   656,   659,   633,     0,   667,     0,   694,     0,     0,
                  +     0,   632,     0,     0,     0,   625,     0,     0,     0,   623,
                  +     0,     0,     0,   624,     0,     0,     0,   619,     0,     0,
                  +     0,   620,     0,     0,     0,   622,     0,     0,     0,   621,
                  +   629,     0,   792,     0,   526,   796,   781,   783,   804,     0,
                  +   638,     0,   782,   790,     0,   526,     0,     0,    95,    89,
                  +    88,     0,     0,   422,   373,   102,    85,     0,     0,     0,
                  +   372,    52,    57,    58,    63,     0,     0,     0,     0,     0,
                  +     0,   214,     0,   216,   112,   108,   215,    63,     0,     0,
                  +   415,     0,   407,   549,     0,   340,   345,   339,     0,     0,
                  +     0,   224,   234,   226,   227,   228,   229,     0,     0,     0,
                  +     0,   272,   322,   477,     0,   356,     0,     0,   312,   316,
                  +   314,     0,   442,   446,   440,     0,     0,   317,     0,     0,
                  +     0,   562,   642,   644,     0,   558,     0,   647,   648,     0,
                  +   552,   587,   588,   589,   590,   591,   592,   586,     0,   555,
                  +     0,   740,   765,     0,   753,   743,   748,     0,   649,     0,
                  +   754,     0,     0,     0,     0,     0,   741,     0,     0,     0,
                  +     0,   769,   650,   583,     0,   771,     0,     0,     0,   654,
                  +     0,   730,     0,     0,   604,   606,   605,   607,   608,   609,
                  +   610,   611,     0,   601,     0,   529,   534,   560,     0,     0,
                  +     0,   740,   765,     0,   711,   699,   706,   704,   705,     0,
                  +     0,   712,     0,     0,     0,     0,     0,   696,     0,     0,
                  +   660,   658,   662,     0,     0,   634,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,   730,   468,
                  -     0,   499,   503,   506,   527,   495,     0,   637,   639,   786,
                  -   449,   791,     0,    91,    92,    98,    90,     0,   429,     0,
                  -     0,    80,     0,    82,     0,   371,     0,    65,     0,     0,
                  -   160,     0,     0,     0,     0,     0,     0,     0,     0,   159,
                  -   815,   161,   151,     0,     0,     0,   100,     0,    99,   218,
                  -   220,     0,   106,     0,     0,     0,     0,     0,     0,   119,
                  -   105,   107,   110,   114,    65,     0,   244,   414,   409,   413,
                  -   418,   343,     0,     0,   344,   390,   391,   388,   389,     0,
                  -   235,     0,     0,   232,   360,   280,   230,   231,   277,   279,
                  -   281,   278,   275,   274,     0,     0,     0,   368,   369,   367,
                  -   313,     0,   301,   444,   500,     0,     0,   569,   571,     0,
                  -   500,   734,     0,     0,     0,     0,     0,     0,     0,     0,
                  -   751,   739,   752,   744,   745,   747,   746,   749,   756,     0,
                  -   766,   733,   732,     0,   764,   651,   652,   653,   770,     0,
                  -     0,   613,   612,     0,     0,   534,     0,   530,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   709,   663,   710,
                  -   700,   701,   703,   702,   707,   713,     0,   773,     0,   774,
                  -   775,     0,     0,     0,     0,   669,     0,     0,   676,     0,
                  -     0,   674,     0,     0,   675,     0,     0,   670,     0,     0,
                  -   671,     0,     0,   673,     0,     0,   672,     0,   728,   514,
                  -     0,     0,     0,   505,   528,     0,   497,   785,   784,   789,
                  -     0,    87,     0,   427,    81,     0,     0,     0,     0,     0,
                  -    50,     0,   183,   184,   162,   172,   170,   171,     0,     0,
                  -     0,     0,     0,     0,     0,     0,   186,   188,   185,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   153,     0,     0,
                  -     0,   154,     0,   111,     0,     0,     0,   144,   145,   147,
                  -   149,   116,   150,     0,     0,     0,     0,     0,     0,   117,
                  -     0,   124,   118,   120,   443,   109,    49,   251,     0,     0,
                  -   411,   338,     0,     0,     0,   282,   233,   803,   321,     0,
                  -   500,     0,   526,   439,   630,   557,   526,   554,     0,   758,
                  -   759,     0,     0,     0,   763,   757,   768,     0,     0,     0,
                  -     0,   603,     0,   532,   534,     0,   717,   719,   722,   723,
                  -     0,     0,     0,   727,   714,   666,     0,   664,   777,     0,
                  -   778,   779,   685,   677,   692,   684,   690,   682,   691,   683,
                  -   686,   678,   687,   679,   689,   681,   688,   680,   730,   516,
                  -   512,   516,   514,   511,   516,   513,     0,   501,     0,   504,
                  -     0,     0,   464,     0,   430,    84,     0,   370,    62,    61,
                  -     0,     0,   175,   181,     0,   200,     0,   191,     0,   187,
                  -   190,   179,     0,     0,     0,   182,   178,   167,   168,   169,
                  -   163,   164,   166,   165,   173,   176,     0,   158,     0,   155,
                  -     0,     0,   113,     0,     0,     0,   142,   125,   135,   133,
                  -   134,     0,   143,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,   203,   250,     0,     0,   245,     0,   526,   387,
                  -   236,     0,   323,   324,   326,   331,     0,   804,   526,   315,
                  -   495,   495,     0,   760,   761,   762,   596,     0,   599,   600,
                  -     0,   533,     0,   724,   725,   726,   776,   668,     0,   729,
                  -   515,   508,   509,   507,   510,     0,   502,   494,   496,   473,
                  -   479,    97,    83,     0,    64,     0,     0,     0,   199,   193,
                  -   189,   192,     0,     0,   180,     0,   177,     0,   213,   115,
                  -     0,     0,     0,   138,   141,   130,   131,   132,   126,   127,
                  -   129,   128,   136,   139,     0,   123,     0,   206,   252,   253,
                  -   249,     0,     0,     0,     0,   339,     0,     0,     0,   334,
                  -     0,   495,   497,   497,   750,   597,   598,   708,   780,   519,
                  -   472,     0,     0,   461,    60,     0,   196,     0,   194,     0,
                  -     0,   157,   443,     0,   146,   148,     0,   140,   201,   202,
                  -     0,   121,   205,     0,   337,   393,   386,   318,   325,   330,
                  -   329,     0,   805,   328,   332,     0,   497,   464,   464,     0,
                  -     0,     0,   477,   463,   466,     0,   174,   198,   197,   195,
                  -   203,     0,   122,     0,     0,   204,   256,   392,     0,   333,
                  -   331,   464,   441,   462,     0,     0,   498,     0,   473,   478,
                  -   480,   488,   206,   137,   210,     0,     0,   207,   208,   260,
                  -   257,   258,     0,   254,   259,   377,     0,     0,   376,   378,
                  -   334,   479,     0,     0,   520,   524,   522,   500,     0,     0,
                  -   486,   487,     0,   482,   156,   209,   211,   212,     0,   240,
                  -     0,   381,   382,     0,   327,   457,   517,     0,   518,     0,
                  -   526,   465,   481,   483,   484,   485,   255,   379,   384,   385,
                  -   380,     0,   450,   521,   523,   495,   383,     0,     0,   456,
                  -   497,   458,     0,   459,   467,   460,     0,     0,     0
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +   468,     0,   499,   503,   506,   527,   495,     0,   637,   639,
                  +   786,   449,   791,     0,    91,    92,    98,    90,     0,   429,
                  +     0,     0,    80,     0,    82,     0,   371,     0,    65,     0,
                  +     0,   160,     0,     0,     0,     0,     0,     0,     0,     0,
                  +   159,   815,   161,   151,     0,     0,     0,   100,     0,    99,
                  +   218,   220,     0,   106,     0,     0,     0,     0,     0,     0,
                  +   119,   105,   107,   110,   114,    65,     0,   244,   414,   409,
                  +   413,   418,   343,     0,     0,   344,   390,   391,   388,   389,
                  +     0,   235,     0,     0,   232,   360,   280,   230,   231,   277,
                  +   279,   281,   278,   275,   274,     0,     0,     0,   368,   369,
                  +   367,   313,     0,   301,   444,   500,     0,     0,   569,   571,
                  +     0,   500,   734,     0,     0,     0,     0,     0,     0,     0,
                  +     0,   751,   739,   752,   744,   745,   747,   746,   749,   756,
                  +     0,   766,   733,   732,     0,   764,   651,   652,   653,   770,
                  +     0,   728,     0,     0,   613,   612,     0,     0,   534,     0,
                  +   530,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +   709,   663,   710,   700,   701,   703,   702,   707,   713,     0,
                  +   773,     0,   774,   775,     0,     0,     0,     0,   669,     0,
                  +     0,   676,     0,     0,   674,     0,     0,   675,     0,     0,
                  +   670,     0,     0,   671,     0,     0,   673,     0,     0,   672,
                  +   514,     0,     0,     0,   505,   528,     0,   497,   785,   784,
                  +   789,     0,    87,     0,   427,    81,     0,     0,     0,     0,
                  +     0,    50,     0,   183,   184,   162,   172,   170,   171,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   186,   188,   185,
                  +     0,     0,     0,     0,     0,     0,     0,     0,   153,     0,
                  +     0,     0,   154,     0,   111,     0,     0,     0,   144,   145,
                  +   147,   149,   116,   150,     0,     0,     0,     0,     0,     0,
                  +   117,     0,   124,   118,   120,   443,   109,    49,   251,     0,
                  +     0,   411,   338,     0,     0,     0,   282,   233,   803,   321,
                  +     0,   500,     0,   526,   439,   630,   557,   526,   554,     0,
                  +   758,   759,     0,     0,     0,   763,   757,   768,   730,     0,
                  +     0,     0,     0,   603,     0,   532,   534,     0,   717,   719,
                  +   722,   723,     0,     0,     0,   727,   714,   666,     0,   664,
                  +   777,     0,   778,   779,   685,   677,   692,   684,   690,   682,
                  +   691,   683,   686,   678,   687,   679,   689,   681,   688,   680,
                  +   516,   512,   516,   514,   511,   516,   513,     0,   501,     0,
                  +   504,     0,     0,   464,     0,   430,    84,     0,   370,    62,
                  +    61,     0,     0,   175,   181,     0,   200,     0,   191,     0,
                  +   187,   190,   179,     0,     0,     0,   182,   178,   167,   168,
                  +   169,   163,   164,   166,   165,   173,   176,     0,   158,     0,
                  +   155,     0,     0,   113,     0,     0,     0,   142,   125,   135,
                  +   133,   134,     0,   143,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,   203,   250,     0,     0,   245,     0,   526,
                  +   387,   236,     0,   323,   324,   326,   331,     0,   804,   526,
                  +   315,   495,   495,     0,   760,   761,   762,   729,   596,     0,
                  +   599,   600,     0,   533,     0,   724,   725,   726,   776,   668,
                  +     0,   515,   508,   509,   507,   510,     0,   502,   494,   496,
                  +   473,   479,    97,    83,     0,    64,     0,     0,     0,   199,
                  +   193,   189,   192,     0,     0,   180,     0,   177,     0,   213,
                  +   115,     0,     0,     0,   138,   141,   130,   131,   132,   126,
                  +   127,   129,   128,   136,   139,     0,   123,     0,   206,   252,
                  +   253,   249,     0,     0,     0,     0,   339,     0,     0,     0,
                  +   334,     0,   495,   497,   497,   750,   597,   598,   708,   780,
                  +   519,   472,     0,     0,   461,    60,     0,   196,     0,   194,
                  +     0,     0,   157,   443,     0,   146,   148,     0,   140,   201,
                  +   202,     0,   121,   205,     0,   337,   393,   386,   318,   325,
                  +   330,   329,     0,   805,   328,   332,     0,   497,   464,   464,
                  +     0,     0,     0,   477,   463,   466,     0,   174,   198,   197,
                  +   195,   203,     0,   122,     0,     0,   204,   256,   392,     0,
                  +   333,   331,   464,   441,   462,     0,     0,   498,     0,   473,
                  +   478,   480,   488,   206,   137,   210,     0,     0,   207,   208,
                  +   260,   257,   258,     0,   254,   259,   377,     0,     0,   376,
                  +   378,   334,   479,     0,     0,   520,   524,   522,   500,     0,
                  +     0,   486,   487,     0,   482,   156,   209,   211,   212,     0,
                  +   240,     0,   381,   382,     0,   327,   457,   517,     0,   518,
                  +     0,   526,   465,   481,   483,   484,   485,   255,   379,   384,
                  +   385,   380,     0,   450,   521,   523,   495,   383,     0,     0,
                  +   456,   497,   458,     0,   459,   467,   460,     0,     0,     0
                   };
                   
                  -static const short yydefgoto[] = {  1647,
                  -    33,    34,    35,    36,    37,   400,   544,   794,  1339,   998,
                  -  1191,    38,   520,   517,    39,    40,    41,   540,    42,    43,
                  -   781,   986,   235,   532,  1182,    44,   550,   551,   552,  1031,
                  -  1032,  1023,  1033,  1034,  1475,  1240,   553,   554,  1367,  1008,
                  -  1448,  1449,  1478,  1522,  1523,  1578,  1019,    45,   402,   555,
                  -   556,    46,   412,   586,  1056,  1057,  1058,    47,   181,    48,
                  -    49,   407,   564,   565,  1249,  1395,  1481,  1583,  1584,    50,
                  -    51,   279,   182,   589,   415,   590,   591,  1059,    52,    53,
                  -   207,   310,   432,    54,   214,   215,   216,   839,  1073,    55,
                  -    56,   183,  1066,  1402,  1403,  1404,  1405,  1490,  1534,    57,
                  -    58,    59,  1044,   410,   573,   817,   818,    60,   200,    61,
                  -   424,    62,    63,  1060,   281,   598,    64,   995,   787,    65,
                  -   579,  1589,  1611,  1612,  1399,  1050,  1559,    66,    67,    68,
                  -    69,    88,    70,    71,    72,   567,   812,  1039,   380,    73,
                  -    74,    75,   237,   395,   783,   988,    76,    77,    78,   609,
                  -   436,   603,   604,    79,    80,    81,    82,   287,  1633,  1640,
                  -  1644,    83,   618,  1441,  1544,  1545,   511,   244,  1502,   222,
                  -  1504,  1570,  1571,  1604,   398,   289,   290,  1177,  1333,   764,
                  -   972,   973,  1327,  1432,  1542,  1594,  1595,   420,   974,   486,
                  -   913,   357,   358,   359,   360,   361,   574,   451,   463,   446,
                  -   362,   363,   441,   613,   851,   364,   365,   467,   457,   646,
                  -   367,   481,   482,   910,  1115,   368,   717,   942,   712,   508,
                  -   655,   622,   623,   640,   641,   648,   891,  1105,   656,  1139,
                  -  1140,  1300,  1301,   369,   766,   525,   526,   370,   371,   165,
                  -   461,   262,  1259,   767,  1535,   232,   291,   373,   241,   304,
                  -   374,   375,   376,   377,   257,   576,   378,   695,   230
                  +static const short yydefgoto[] = {  1648,
                  +    33,    34,    35,    36,    37,   400,   545,   795,  1340,   999,
                  +  1192,    38,   521,   518,    39,    40,    41,   541,    42,    43,
                  +   782,   987,   235,   533,  1183,    44,   551,   552,   553,  1032,
                  +  1033,  1024,  1034,  1035,  1476,  1241,   554,   555,  1368,  1009,
                  +  1449,  1450,  1479,  1523,  1524,  1579,  1020,    45,   402,   556,
                  +   557,    46,   412,   587,  1057,  1058,  1059,    47,   181,    48,
                  +    49,   407,   565,   566,  1250,  1396,  1482,  1584,  1585,    50,
                  +    51,   279,   182,   590,   415,   591,   592,  1060,    52,    53,
                  +   207,   310,   432,    54,   214,   215,   216,   840,  1074,    55,
                  +    56,   183,  1067,  1403,  1404,  1405,  1406,  1491,  1535,    57,
                  +    58,    59,  1045,   410,   574,   818,   819,    60,   200,    61,
                  +   424,    62,    63,  1061,   281,   599,    64,   996,   788,    65,
                  +   580,  1590,  1612,  1613,  1400,  1051,  1560,    66,    67,    68,
                  +    69,    88,    70,    71,    72,   568,   813,  1040,   380,    73,
                  +    74,    75,   237,   395,   784,   989,    76,    77,    78,   610,
                  +   436,   604,   605,    79,    80,    81,    82,   287,  1634,  1641,
                  +  1645,    83,   619,  1442,  1545,  1546,   512,   244,  1503,   222,
                  +  1505,  1571,  1572,  1605,   398,   289,   290,  1178,  1334,   765,
                  +   973,   974,  1328,  1433,  1543,  1595,  1596,   420,   975,   488,
                  +   916,   357,   358,   359,   360,   361,   575,   451,   463,   446,
                  +   362,   363,   441,   614,   852,   364,   365,   467,   457,   647,
                  +   367,   483,   484,   913,  1118,   368,   719,   945,   714,   477,
                  +   656,   623,   624,   641,   642,   649,   892,  1106,   657,  1142,
                  +  1143,  1302,  1303,   369,   767,   526,   527,   370,   371,   165,
                  +   461,   262,  1260,   768,  1536,   232,   291,   373,   241,   304,
                  +   374,   375,   376,   377,   257,   577,   378,   697,   230
                   };
                   
                  -static const short yypact[] = { 14006,
                  -   192,   129, 13511,   129,  1933, 13511,    65,  2257,   129,   -58,
                  -    73,    49,    87,    49,   129,   243, 12870, 12568,   129, 13511,
                  -    61,    57,    91, 12568,    96,   156,    73, 12568, 13662, 13813,
                  - 12568,    57, 14006,   135,-32768,-32768,-32768,-32768,-32768,-32768,
                  +static const short yypact[] = { 13937,
                  +   246,   264, 13442,   264,  1338, 13442,    20,  4215,   264,   -92,
                  +    60,    55,    40,    55,   264,    80, 12801, 12499,   264, 13442,
                  +   -10,   -20,    63, 12499,    76,   163,    60, 12499, 13593, 13744,
                  + 12499,   -20, 13937,   142,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768, 12499,   131,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768, 12568,   154,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 12499,-32768,   131,
                  + 13442, 13442,-32768,-32768, 13442, 13442,-32768, 13442, 12499,-32768,
                  +   193, 10521,   225,    32,-32768, 12499, 13442,   131,-32768, 13442,
                  +-32768, 13442, 13442, 13442,-32768,  1013,   392,-32768, 13442, 13442,
                  +-32768,   239,-32768,-32768,-32768,-32768,    68,   371,-32768,-32768,
                  +-32768,-32768,-32768,   386,   276,-32768, 12499,   405,-32768,-32768,
                  +   418,  5123,    17,   383,   -63,-32768,-32768,   422,-32768,-32768,
                  +-32768,   441,-32768,-32768, 12499,-32768,   355, 13442,-32768,-32768,
                  +-32768,-32768,-32768, 12499,    68,-32768,   410,-32768,   413,-32768,
                  +-32768,   411,   334,-32768,   335,-32768,   439,   341,   439,   562,
                  +   152,   450,-32768,   358,-32768,   591,-32768,   543,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   390,
                  +-32768,-32768, 13442,   508,-32768,-32768,   589,   501,-32768,   412,
                  +-32768,-32768,   554, 10904,-32768,   358,-32768,   415,-32768,    76,
                  +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   436,   434,
                  +-32768,-32768, 13442,    24,   420, 13442, 13442,   423,   534,   534,
                  +-32768,   447,   469,-32768,   474,   594,   475,   485,-32768,   498,
                  +   626,   707,   534,  7826,-32768,   502,   517,   523,   104,   646,
                  +   552,-32768,-32768,-32768,   171,  1935,   203,  7826,   512,-32768,
                  +  7826,-32768,  7826,  7826,  7826,  7205,    76,   533,-32768,-32768,
                  +-32768,-32768,   574,-32768,   234,   794,-32768,  9875,   512,    26,
                  +-32768,   586,   583,-32768,   587,-32768,-32768,   -99,-32768,-32768,
                  +-32768,    12,    45,    45, 10716, 12499,   685,-32768,   501,-32768,
                  +   434,-32768,-32768,-32768, 12499,-32768,-32768,    52,   642,   182,
                  + 12311,   814,   182,   722,-32768,-32768,   250,   664,  3076,   647,
                  +-32768,   456,    76, 10353,-32768,   752,-32768,   788,  7826,-32768,
                  + 13442, 12499,-32768,-32768,-32768,-32768, 12952,-32768,-32768, 13442,
                  + 13442,-32768,   725,-32768, 13442,    28,   789,-32768,  7826,-32768,
                  +-32768,   823,   436,   436,   436,-32768,-32768,   736,   833,   436,
                  +-32768,   729,   730,   745,   746,-32768,-32768,   534,-32768,  1547,
                  +   641,   436,-32768,  9056,  7205,   753,-32768,  4502,   594,-32768,
                  +-32768,-32768,-32768,-32768,   440,  7826,-32768,   645,   645,   645,
                  +   645,   638,   643,   649,  1949,-32768,   105,-32768,   436, 11928,
                  +  7826,  8033,-32768,    48,  7826,   123,  7826,-32768,-32768,  7412,
                  +  5342,  5549,  5756,  5963,  6170,  6377,  6584,  3331,-32768,   163,
                  +  5123,   820, 11055,  3479, 13442,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,-32768,   512,    -8,-32768,   654,   587,   256,
                  +-32768,   704,    87,-32768,-32768,   659,    33,   865,   865,   865,
                  +-32768,   131,-32768,-32768,   186,   665, 13442,   821,   828,   669,
                  +   314,-32768,-32768,-32768,-32768,   395,-32768,  2994,   736,   186,
                  +-32768,-32768,-32768,-32768,   815,   817,   697,   757,-32768,   818,
                  +-32768,-32768,-32768,   401,-32768,-32768,-32768,-32768,   721,   829,
                  +    -4,-32768,    -4,    -4,    -4,    -4,-32768,   755,   706,   709,
                  +   438,-32768, 12499,   808,  9875,-32768,-32768,   692,   696,   699,
                  +-32768,-32768, 12650,   445,-32768,   512,   802,    80,   710,-32768,
                  + 12650,  2435,   830,   914,   712,   713,   449,    80,   714,-32768,
                  +-32768,-32768,   715,   893,   723,   228,   197,   843,   876,-32768,
                  + 13442,   460,   726,   728,   731,   732,  9056,  9056,  9056,  9056,
                  +   733,   367,   512,   735,-32768,   -99,-32768,    74,   738,   824,
                  +  6791,  7205,  6791,  6791,  2607,   -60,   739,  2243,-32768,   478,
                  +  7826,   741,   749,   742,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,-32768,-32768,-32768,-32768, 12568,-32768,   154,
                  - 13511, 13511,-32768,-32768, 13511, 13511,-32768, 13511, 12568,-32768,
                  -   183, 10590,   220,    39,-32768, 12568, 13511,   154,-32768, 13511,
                  --32768, 13511, 13511, 13511,-32768,   688,   329,-32768, 13511, 13511,
                  --32768,   210,-32768,-32768,-32768,-32768,    29,   313,-32768,-32768,
                  --32768,-32768,-32768,   344,   197,-32768, 12568,   348,-32768,-32768,
                  -   357,  5028,    19,   310,   -82,-32768,-32768,   342,-32768,-32768,
                  --32768,   372,-32768,-32768, 12568,-32768,   109, 13511,-32768,-32768,
                  --32768,-32768,-32768, 12568,    29,-32768,   327,-32768,   347,-32768,
                  --32768,   349,   277,-32768,   278,-32768,   373,   275,   373,   505,
                  -   252,   398,-32768,   304,-32768,   525,-32768,   473,-32768,-32768,
                  --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   312,
                  --32768,-32768, 13511,   439,-32768,-32768,   515,   423,-32768,   346,
                  --32768,-32768,   490, 10973,-32768,   304,-32768,   354,-32768,    96,
                  --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   387,   271,
                  --32768,-32768, 13511,    97,   368, 13511, 13511,   378,   482,   482,
                  --32768,   388,   411,-32768,   414,   507,   417,   425,-32768,   436,
                  -   539,   595,   482,  7731,-32768,   446,   452,   456,  -103,   554,
                  -   474,-32768,-32768,-32768,   -13,   902,    53,  7731,-32768,-32768,
                  -  7731,-32768,  7731,  7731,  7731,  7110,    96,   465,-32768,-32768,
                  --32768,-32768,   491,-32768,    93,   717,-32768,  9962,   509,    16,
                  --32768,   523,   524,-32768,   528,-32768,-32768,   150,-32768,-32768,
                  --32768,    25,    22,    22, 10785, 12568,   622,-32768,   423,-32768,
                  -   271,-32768,-32768,-32768, 12568,-32768,-32768,    59,   573,   104,
                  - 12380,   745,   104,   649,-32768,-32768,    45,   590,  4219,   580,
                  --32768,   526,    96, 10422,-32768,   689,-32768,   726,  7731,-32768,
                  - 13511, 12568,-32768,-32768,-32768,-32768, 13021,-32768,-32768, 13511,
                  - 13511,-32768,   662,-32768, 13511,    36,   729,-32768,  7731,-32768,
                  --32768,   769,   387,   387,   387,-32768,-32768,   676,   999,   387,
                  --32768,   674,   675,   678,   680,-32768,-32768,   482,-32768,  1279,
                  -   569,   387,-32768,  8961,  7110,   687,-32768,  4407,   507,-32768,
                  --32768,-32768,-32768,-32768,   519,   576,   576,   576,   576,   574,
                  -   575,   578,  2320,-32768,    88,-32768,   387, 11997,  7731,  7938,
                  --32768,   200,  7731,    82,  7731,-32768,-32768,  7317,  5247,  5454,
                  -  5661,  5868,  6075,  6282,  6489,  1549,  7731,-32768,   156,  5028,
                  -   754, 11124,  3208, 13511,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,   509,    -1,-32768,   585,   528,   152,-32768,
                  -   630,    34,-32768,-32768,   589,    38,   805,   805,   805,-32768,
                  -   154,-32768,-32768,   132,   603, 13511,   766,   770,   610,   118,
                  --32768,-32768,-32768,-32768,   162,-32768, 14255,   676,   132,-32768,
                  --32768,-32768,-32768,   755,   751,   632,   692,-32768,   748,-32768,
                  --32768,-32768,   246,-32768,-32768,-32768,-32768,   659,   768,   -93,
                  --32768,   -93,   -93,   -93,   -93,-32768,   693,   643,   644,   297,
                  --32768, 12568,   749,  9962,-32768,-32768,   631,   633,   634,-32768,
                  --32768, 12719,   393,-32768,   509,   734,   243,   636,-32768, 12719,
                  -  9780,   757,   844,   641,   642,   396,   243,   646,-32768,-32768,
                  --32768,   647,   820,   654,   191,    24,   780,   809,-32768, 13511,
                  -   400,   666,   670,   681,   682,  8961,  8961,  8961,  8961,   679,
                  -   376,   509,   690,-32768,   150,-32768,    -8,   686,   782,  6696,
                  -  7110,  6696,  6696,  2922,   -49,   696,-32768,   777,  7731,   697,
                  -   707,   704,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1547,   754,-32768,
                  +   762,   763,-32768,   764,   765,   766,-32768,  8033,  8033,  8033,
                  +  8033,  8033,  7826,    62,   512,   767,-32768,   -99,   768,-32768,
                  +   332,-32768,-32768,   910,  8033,-32768,  7826,   640,   770,   779,
                  +  6998,   440,   780,   782,  6998,   950,   783,   784,  6998,  2526,
                  +   790,   795,  6998,  2526,   803,   805,  6998,   115,   813,   816,
                  +  6998,   115,   819,   825,  6998,   645,   835,   836,  6998,   645,
                  +-32768, 12499,-32768,  9836,   501,-32768,   734,-32768,-32768,   751,
                  +-32768,   -34,   734,-32768, 11552,   501, 11206,   804,-32768,-32768,
                  +-32768,   245, 13442,-32768,-32768, 12311,-32768, 13442, 13442, 13442,
                  + 13442,-32768,-32768,-32768,   958,  9446,   326,   837,   844, 13442,
                  + 12311,   881, 13442,-32768,   931,   582,-32768,   958, 12499,   250,
                  +    51,   834,-32768,-32768, 12123,-32768,-32768,   919, 12123,    64,
                  +   436,-32768,-32768,-32768,-32768,-32768,-32768, 10521, 10158, 10158,
                  + 10353,-32768,   936,    80, 13442,-32768, 13103, 13442,-32768,   939,
                  +-32768, 13442,-32768,-32768,-32768,  5123,  5123,-32768,  3331, 13442,
                  + 13442,-32768,-32768,-32768,   436,-32768,  5123,-32768,-32768,  7826,
                  +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   436,-32768,
                  +  9056,  9056,  7205,  4709,   238,   847,   847,   381,-32768,  9056,
                  +  9251,  9056,  9056,  9056,  9056,  3331,-32768,  3686,  7205,  7826,
                  +  7205,  1024,-32768,-32768,   848,   -60,   849,   854,  7205,-32768,
                  +  7826,   512,   856,  1026,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,    37,  1980,   224,-32768,   741,-32768,  8033,   436,
                  +   436,  9056,  7205,  4916,   605,   860,   860,   860,   860,   890,
                  +  8033,  8240,  8033,  8033,  8033,  8033,  3331,-32768,  3893, 13978,
                  +-32768,-32768,-32768,   101,   859,   910,   736,   736,   862,   736,
                  +   736,   863,   736,   736,   866,   736,   736,   869,   736,   736,
                  +   870,   736,   736,   871,   736,   736,   872,   736,   736,   880,
                  +-32768, 12499,   861,  1065, 13291,   894,  1054, 11357,-32768,-32768,
                  +-32768,-32768,-32768,  7205,-32768,-32768,   988,-32768,   491,-32768,
                  +   525,  2994,-32768,    25,-32768,   999,-32768,  1066,   928,   903,
                  +  9446,-32768,  9446,  9446,  9446,  9446,  9446,  9446,  1342,   904,
                  +-32768,-32768,   905,-32768, 13442, 13442,   529,-32768,   911,-32768,
                  +-32768,-32768,  1071,-32768,   912, 13442,  8447,  1038,  1077, 13442,
                  +-32768,-32768,   582,-32768,-32768,   928,  1098,  1067,-32768,-32768,
                  +-32768,    17,-32768,   390,  1143,-32768,-32768,-32768,-32768,-32768,
                  +  1039,-32768,   993, 13442,-32768,   472,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,   954,   932,  5123,-32768,-32768,
                  +-32768,-32768,  1114,-32768,-32768,    14,   536,   942,-32768,-32768,
                  +   944,    14,  9875,   945,   259,   946,   948,  6791,  6791,  6791,
                  +   949,-32768,   864,   238,   266,   266,   847,   847,-32768,-32768,
                  +   -18,   -60,  9875,-32768,  7205,-32768,-32768,-32768,-32768,   -60,
                  +  2504,-32768,   736,   951,-32768,-32768,  7619,   955,   741,   961,
                  +-32768,   361,   959,   960,   963,   968,  6791,  6791,  6791,   969,
                  +-32768,   935,   605,   289,   289,   860,   860,-32768,-32768,    46,
                  +-32768,   973,   979,-32768,  8033, 13978,   987,   990,-32768,   992,
                  +   994,-32768,  1011,  1014,-32768,  1015,  1016,-32768,  1017,  1018,
                  +-32768,  1019,  1021,-32768,  1022,  1027,-32768,  1029,  1032,-32768,
                  +   832, 12499,  1124, 11928,-32768,-32768,  1191,  1185,-32768,-32768,
                  +-32768,  1104,-32768, 13442,-32768,-32768,  1224,  1226, 13442,   131,
                  +  1072,-32768,  9446, 10398,   453,  1047,  1047,  1047,  1047,  1563,
                  +  9446, 14097,  1046,   255,  9446,   351,  9446,-32768,-32768,  9641,
                  +  9446,  9446,  9446,  9446,  9446,  9446,  9446,  3331,-32768,  4295,
                  +   537,   541,-32768, 13442,-32768,  9446,   660,  1048,-32768,  1050,
                  +  1052,-32768,-32768,-32768,  8654,  8654,  8654,  8654,  8654,  8654,
                  +   771,  1056,-32768,-32768,-32768,   420,-32768,-32768,  1122,  1236,
                  +   250,-32768,-32768,    76, 12499,    76,-32768,-32768,-32768,-32768,
                  + 13442,    14,  1194,   501,-32768,-32768,-32768,   501,-32768,  3331,
                  +-32768,-32768,  1057,  1058,  1061,-32768,-32768,   -60,   512,  1068,
                  +   736,  1069,  1073,  9875,   736,-32768,   741,  3331,-32768,-32768,
                  +-32768,-32768,  1076,  1079,  1083,-32768,-32768,-32768, 14097,   935,
                  +-32768,  1084,  1074,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                   -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,-32768,-32768,  1279,   694,-32768,   706,   708,
                  --32768,   711,   712,   714,-32768,  7938,  7938,  7938,  7938,  7938,
                  -  7731,   134,   509,   715,-32768,   150,   718,-32768,    27,-32768,
                  --32768,   440,  7938,-32768,  7731, 10023,   719,   720,  6903,   519,
                  -   722,   723,  6903,  1108,   727,   730,  6903,  2017,   733,   735,
                  -  6903,  2017,   736,   738,  6903,   114,   740,   742,  6903,   114,
                  -   743,   746,  6903,   576,   752,   753,  6903,   576,-32768,  2902,
                  - 12568,-32768,  9741,   423,-32768,   731,-32768,-32768,   716,-32768,
                  -   -40,   731,-32768, 11621,   423, 11275,   750,-32768,-32768,-32768,
                  -   230, 13511,-32768,-32768, 12380,-32768, 13511, 13511, 13511, 13511,
                  --32768,-32768,-32768,   876,  9351,   270,   759,   760, 13511, 12380,
                  -   811, 13511,-32768,   884,   504,-32768,   876, 12568,    45,    23,
                  -   771,-32768,-32768, 12192,-32768,-32768,   851, 12192,    44,   387,
                  --32768,-32768,-32768,-32768,-32768,-32768, 10590, 10227, 10227, 10422,
                  --32768,   860,   243, 13511,-32768, 13172, 13511,-32768,   865,-32768,
                  - 13511,-32768,-32768,-32768,  5028,  5028,-32768,  1549, 13511, 13511,
                  --32768,-32768,-32768,   387,-32768,  5028,-32768,-32768,  7731,-32768,
                  --32768,-32768,-32768,-32768,-32768,-32768,-32768,   387,-32768,  8961,
                  -  8961,  7110,  4614,   461,   773,   773,   547,-32768,  8961,  9156,
                  -  8961,  8961,  8961,  8961,  1549,-32768,  3415,  7110,  7731,  7110,
                  -   946,-32768,-32768,   778,   -49,   779,   787,  7110,-32768,   783,
                  -   947,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    48,
                  -  2711,   119,-32768,   697,-32768,  7938,   387,   387,  8961,  7110,
                  -  4821,   604,   791,   791,   791,   791,  1360,  7938,  8145,  7938,
                  -  7938,  7938,  7938,  1549,-32768,  3622, 14047,-32768,-32768,-32768,
                  -   146,   790,   440,   676,   676,   799,   676,   676,   801,   676,
                  -   676,   802,   676,   676,   803,   676,   676,   807,   676,   676,
                  -   808,   676,   676,   816,   676,   676,   818,  7731,   509,-32768,
                  - 12568,   792,  1020, 13360,   832,   998, 11426,-32768,-32768,-32768,
                  --32768,-32768,  7110,-32768,-32768,   930,-32768,   403,-32768,   404,
                  - 14255,-32768,    77,-32768,   942,-32768,  1003,   863,   839,  9351,
                  --32768,  9351,  9351,  9351,  9351,  9351,  9351,  1522,   848,-32768,
                  --32768,   849,-32768, 13511, 13511,   421,-32768,   852,-32768,-32768,
                  --32768,  1014,-32768,   855, 13511,  8352,  1001,  1018, 13511,-32768,
                  --32768,   504,-32768,-32768,   863,  1036,  1000,-32768,-32768,-32768,
                  -    19,-32768,   312,  1080,-32768,-32768,-32768,-32768,-32768,   977,
                  --32768,   929, 13511,-32768,   257,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,-32768,   898,   880,  5028,-32768,-32768,-32768,
                  --32768,  1049,-32768,-32768,     0,   422,   881,-32768,-32768,   883,
                  -     0,  9962,   888,   170,   889,   891,  6696,  6696,  6696,   892,
                  --32768,   853,   461,   153,   153,   773,   773,-32768,-32768,   -20,
                  -   -49,  9962,-32768,  7110,-32768,-32768,-32768,-32768,   -49,   676,
                  -   899,-32768,-32768,  7524,   900,   697,   904,-32768,   253,   906,
                  -   907,   909,   916,  6696,  6696,  6696,   931,-32768,   908,   604,
                  -   205,   205,   791,   791,-32768,-32768,   -17,-32768,   933,   882,
                  --32768,  7938, 14047,   934,   935,-32768,   937,   941,-32768,   943,
                  -   945,-32768,   948,   951,-32768,   953,   954,-32768,   955,   956,
                  --32768,   958,   959,-32768,   960,   962,-32768,  9899,-32768,   468,
                  - 12568,  1093, 11997,-32768,-32768,  1145,  1118,-32768,-32768,-32768,
                  -  1025,-32768, 13511,-32768,-32768,  1154,  1155, 13511,   154,   994,
                  --32768,  9351, 10467,   846,   969,   969,   969,   969,  2047,  9351,
                  - 14166,   968,   206,  9351,    90,  9351,-32768,-32768,  9546,  9351,
                  -  9351,  9351,  9351,  9351,  9351,  9351,  1549,-32768,  4024,   432,
                  -   433,-32768, 13511,-32768,  9351,   516,   971,-32768,   972,   973,
                  --32768,-32768,-32768,  8559,  8559,  8559,  8559,  8559,  8559,  1047,
                  -   975,-32768,-32768,-32768,   368,-32768,-32768,  1052,  1161,    45,
                  --32768,-32768,    96, 12568,    96,-32768,-32768,-32768,-32768, 13511,
                  -     0,  1127,   423,-32768,-32768,-32768,   423,-32768,  1549,-32768,
                  --32768,   987,   989,   990,-32768,-32768,   -49,   991,   676,   993,
                  -   995,  9962,   676,-32768,   697,  1549,-32768,-32768,-32768,-32768,
                  -   996,   997,  1002,-32768,-32768,-32768, 14166,   908,-32768,  1010,
                  -  1015,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   509,  1136,
                  --32768,  1136,   468,-32768,  1136,-32768,  1162,-32768, 12568,-32768,
                  -  7110,  7731,  1109,    96,-32768,-32768,  8559,-32768,  1016,-32768,
                  -  1038,  9940,-32768, 10467,  1236,-32768, 14166,-32768,    80,-32768,
                  --32768,   553, 14166,  1019,  9351, 10063,   846,  1655,  2130,  2130,
                  -   238,   238,   969,   969,-32768,-32768,   438, 10003,  1147,-32768,
                  -  1021,  2260,-32768,  8559,   387,   387,   932,  1023,  1023,  1023,
                  -  1023,   939,  8766,  8559,  8559,  8559,  8559,  8559,  8559,  8559,
                  -  1549,  3829,  1180,-32768,     6,  1158,-32768,  1189,   423,  1043,
                  --32768,  1039,  1040,-32768,-32768,     3,  1041,   849,   423,-32768,
                  -   998,   998,  1042,-32768,-32768,-32768,-32768,  1045,-32768,-32768,
                  -  1046,-32768,  1050,-32768,-32768,-32768,-32768,-32768, 14166,-32768,
                  --32768,-32768,-32768,-32768,-32768, 12568,-32768,   -49,  9962,  1263,
                  -  1186,-32768,  1047,   154,-32768,  1549, 14166,   444,-32768,-32768,
                  --32768,-32768,  1271, 14166,   553,  9351,-32768, 13511,-32768,-32768,
                  -   188,  1054,  1057,-32768,   932,  1047,   826,   826,   274,   274,
                  -  1023,  1023,-32768,-32768,   472,  1047,   202,  1204,-32768,-32768,
                  --32768, 13511,    96,  1142, 13511,   851, 13511,  1549,  1549,   -26,
                  - 13511,   998,  1118,  1118,-32768,-32768,-32768,-32768,-32768,    15,
                  --32768,  1188,  1281,-32768,-32768,  1069,-32768, 14166,-32768, 14166,
                  -   495, 10003,   368,  1549,-32768,-32768,  8559,-32768,-32768,-32768,
                  -    33,-32768,  1204,  1073,-32768,  1139,-32768,-32768,-32768,-32768,
                  --32768,  1099,-32768,-32768,-32768,   496,  1118,  1109,  1109,  1081,
                  -  1082,  1079,   243,  1190,-32768,  7731,-32768,-32768,-32768,-32768,
                  -  1180,  1085,  1047,    56,    56,-32768,   203,-32768,   379,-32768,
                  -     3,  1109,-32768,-32768,  7731, 11809,-32768,  5028,  1263,  1089,
                  --32768,  2880,  1204,-32768,-32768,  1312,    75,-32768,-32768,-32768,
                  --32768,-32768,   502,-32768,-32768,-32768,   109,   109,-32768,-32768,
                  -   -26,  1186,  2619,   521,-32768,-32768,  1095,     0,  1188,  7731,
                  --32768,-32768,   374,-32768,-32768,-32768,-32768,-32768,   203,-32768,
                  -  1103,   109,  1110,  1100,-32768,  1282,-32768, 11809,-32768, 13511,
                  -   423,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1111,-32768,
                  --32768,   195,-32768,-32768,-32768,   998,-32768,  1249,  1252,-32768,
                  -  1118,-32768, 13511,-32768,-32768,  1113,  1340,  1342,-32768
                  +  1223,-32768,  1223,   832,-32768,  1223,-32768,  1249,-32768, 12499,
                  +-32768,  7205,  7826,  1197,    76,-32768,-32768,  8654,-32768,  1092,
                  +-32768,  1117,  3275,-32768, 10398,  1313,-32768, 14097,-32768,   376,
                  +-32768,-32768,  1235, 14097,  1096,  9446, 10035,   453,  1053,  2621,
                  +  2621,   331,   331,  1047,  1047,-32768,-32768,   542,  9994,  1225,
                  +-32768,  1100,  1607,-32768,  8654,   436,   436,   978,  1099,  1099,
                  +  1099,  1099,   822,  8861,  8654,  8654,  8654,  8654,  8654,  8654,
                  +  8654,  3331,  4100,  1254,-32768,   223,  1232,-32768,  1263,   501,
                  +  1109,-32768,  1106,  1111,-32768,-32768,     0,  1105,   905,   501,
                  +-32768,  1054,  1054,  1112,-32768,-32768,-32768,-32768,-32768,  1113,
                  +-32768,-32768,  1115,-32768,  1118,-32768,-32768,-32768,-32768,-32768,
                  + 14097,-32768,-32768,-32768,-32768,-32768, 12499,-32768,   -60,  9875,
                  +  1333,  1253,-32768,   771,   131,-32768,  3331, 14097,   545,-32768,
                  +-32768,-32768,-32768,  1336, 14097,  1235,  9446,-32768, 13442,-32768,
                  +-32768,   349,  1119,  1120,-32768,   978,   771,   842,   842,   354,
                  +   354,  1099,  1099,-32768,-32768,   549,   771,    43,  1260,-32768,
                  +-32768,-32768, 13442,    76,  1198, 13442,   919, 13442,  3331,  3331,
                  +   -55, 13442,  1054,  1185,  1185,-32768,-32768,-32768,-32768,-32768,
                  +   173,-32768,  1245,  1341,-32768,-32768,  1130,-32768, 14097,-32768,
                  + 14097,   556,  9994,   420,  3331,-32768,-32768,  8654,-32768,-32768,
                  +-32768,    77,-32768,  1260,  1132,-32768,  1199,-32768,-32768,-32768,
                  +-32768,-32768,  1158,-32768,-32768,-32768,   564,  1185,  1197,  1197,
                  +  1139,  1140,  1141,    80,  1248,-32768,  7826,-32768,-32768,-32768,
                  +-32768,  1254,  1145,   771,    44,    44,-32768,   384,-32768,   258,
                  +-32768,     0,  1197,-32768,-32768,  7826, 11740,-32768,  5123,  1333,
                  +  1148,-32768,  2222,  1260,-32768,-32768,  1367,    31,-32768,-32768,
                  +-32768,-32768,-32768,   568,-32768,-32768,-32768,   355,   355,-32768,
                  +-32768,   -55,  1253,  1634,   579,-32768,-32768,  1153,    14,  1245,
                  +  7826,-32768,-32768,   399,-32768,-32768,-32768,-32768,-32768,   384,
                  +-32768,  1152,   355,  1157,  1150,-32768,  1329,-32768, 11740,-32768,
                  + 13442,   501,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1160,
                  +-32768,-32768,   164,-32768,-32768,-32768,  1054,-32768,  1305,  1308,
                  +-32768,  1185,-32768, 13442,-32768,-32768,  1167,  1394,  1395,-32768
                   };
                   
                   static const short yypgoto[] = {-32768,
                  --32768,  1311,-32768,-32768,-32768,  1086,   950,   789,-32768,   544,
                  -   311,-32768,   970,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,-32768,-32768,-32768,   570,   557,   571,-32768,
                  --32768,-32768,   330,   133,-32768,  -675,-32768,  -504,-32768,  -115,
                  -   -91, -1190,  -179,  -212,  -149,  -180,-32768,-32768,-32768,-32768,
                  -   577,-32768,-32768,-32768,-32768,-32768,   -15,-32768,-32768,-32768,
                  --32768,-32768,-32768,  -779,-32768,-32768,-32768,-32768,  -233,-32768,
                  --32768,-32768,-32768,  -176,   334,-32768,   548,   559,-32768,-32768,
                  -  1363,  1148,  1005,-32768,  1378,-32768,  1083,   784,-32768,-32768,
                  --32768,-32768,-32768,-32768,-32768,-32768,   -89,  -162,  -187,-32768,
                  --32768,-32768,   -81,  1114,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,-32768,-32768,  1211,  -189,-32768,-32768,-32768,   -31,-32768,
                  --32768,-32768,  -177,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,   338,-32768,-32768,-32768,-32768,-32768,-32768,   367,-32768,
                  --32768,-32768,  1377,-32768,-32768,-32768,-32768,  -221,-32768,-32768,
                  - -1214,  -794,   572,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,  1008,  1075, -1234,-32768,  -185,-32768,   910,  -154,  -595,
                  -  -175,-32768,  -184,-32768,-32768,  -195,   -71, -1369, -1424,  -524,
                  --32768, -1106,    98, -1014,-32768,-32768,  -196,  -344,  -963,-32768,
                  -  -904,  -469,  1077,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  --32768,  -373,  -253,-32768,-32768,-32768,  1112,-32768,-32768,  -203,
                  --32768,   317,-32768,-32768,-32768,  1355,-32768,-32768,  -660,  -511,
                  -  -436,-32768,-32768,  -793,  -546,  -787,-32768,-32768,  -612,-32768,
                  --32768,-32768,-32768,  -190,   912,-32768,   653,  -822,   922,-32768,
                  -   110,  1241,-32768,  -938,   -97,  -101,    62,   764,-32768,-32768,
                  -  1815,  1424,    -6,   -16,  -168,  -703,    -3,   263,-32768
                  +-32768,  1363,-32768,-32768,-32768,  1138,   998,   845,-32768,   595,
                  +   366,-32768,  1020,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,-32768,   621,   607,   623,-32768,
                  +-32768,-32768,   382,   187,-32768, -1160,-32768,  -498,-32768,  -863,
                  +   -46, -1166,  -136,  -157,  -106,  -137,-32768,-32768,-32768,-32768,
                  +   617,-32768,-32768,-32768,-32768,-32768,   130,-32768,-32768,-32768,
                  +-32768,-32768,-32768,  -787,-32768,-32768,-32768,-32768,  -189,-32768,
                  +-32768,-32768,-32768,  -176,   380,-32768,   596,   598,-32768,-32768,
                  +  1398,  1181,  1040,-32768,  1425,-32768,  1126,   831,-32768,-32768,
                  +-32768,-32768,-32768,-32768,-32768,-32768,   -45,  -118,  -147,-32768,
                  +-32768,-32768,   -41,  1159,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,-32768,-32768,  1257,  -185,-32768,-32768,-32768,   -39,-32768,
                  +-32768,-32768,  -132,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,   509,-32768,-32768,-32768,-32768,-32768,-32768,   416,-32768,
                  +-32768,-32768,  1431,-32768,-32768,-32768,-32768,  -224,-32768,-32768,
                  + -1208,  -795,   625,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,  1070,  -220, -1103,-32768,  -135,-32768,   965,  -101,  -600,
                  +  -123,-32768,  -130,-32768,-32768,  -195,   -15, -1371, -1387,  -524,
                  +-32768, -1125,   154, -1122,-32768,-32768,  -140,  -369,  -965,-32768,
                  +  -882,  -471,  1135,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
                  +-32768,  -377,  -216,-32768,-32768,-32768,  1116,-32768,-32768,  -206,
                  +-32768,   365,-32768,-32768,-32768,  1763,-32768,-32768,  -611,  -345,
                  +  -443,-32768,-32768,  -767,  -481,  -763,-32768,-32768,  -620,-32768,
                  +-32768,-32768,-32768,   798,   971,-32768,   716,  -817,   977,-32768,
                  +    27,  1291,-32768,  -966,   -43,  -119,    67,  1144,-32768,-32768,
                  +  2085,  1551,  -197,   -16,  -169,  -386,    -3,   318,-32768
                   };
                   
                   
                  -#define    YYLAST      14459
                  +#define    YYLAST      14306
                   
                   
                   static const short yytable[] = {   166,
                  -   775,   259,   185,   301,  1016,   280,   299,  1170,   242,  1118,
                  -  1345,   845,   773,   225,   229,   388,   233,   777,   366,   292,
                  -   229,   856,  1075,  1076,   229,   248,   250,   229,   647,  1037,
                  -  1393,   786,   383,  1081,   305,   575,   759,   894,  1179,   896,
                  -   897,  1493,  1494,   888,   533,   922,   923,   924,   925,   926,
                  -   763,   763,  1488,  1112,   208,   379,  1113,   545,   519,  1038,
                  -   784,   515,   941,   536,  1328,   537,   442,   184,  1538,  1539,
                  -  1554,  1575,   606,   938,   889,   203,   771,  1085,   509,   459,
                  -   229,  1046,   561,   889,  1086,   779,   209,   805,   547,   874,
                  -   875,   876,   877,   843,   723,   516,   864,  1532,   284,  1540,
                  -   538,  -575,  1353,   889,  1047,   562,   889,   306,   939,   210,
                  -  1042,  1607,  1562,   308,  1045,   889,   186,   433,  1186,  -575,
                  -   437,   820,  1537,   307,   202,  1122,  1450,   228,   384,   865,
                  -   886,   548,  1123,   239,   209,  1576,   389,   246,  1541,   724,
                  -   251,   928,   607,   285,     6,   940,     7,  1354,   780,   217,
                  -  1048,   725,   480,  1142,  1555,   211,  1608,   210,   549,  1355,
                  -   608,  1451,  1453,  1577,   229,  1049,   563,   185,   185,    13,
                  -   212,   263,   265,   204,   185,   229,   890,  1533,   282,  1269,
                  -   286,   416,   229,   185,  1187,   890,   185,   979,   185,   263,
                  -   265,  -543,  1479,   255,   524,   185,   185,  1514,  1452,  1480,
                  -   311,   935,   234,   211,   629,   890,   381,  1276,   890,  -543,
                  -  1295,  1284,   205,   229,   895,    16,  1645,   890,   212,  1220,
                  -  1221,  1489,  1437,   240,   774,   510,   240,   240,   206,   240,
                  -    18,   229,   260,   261,   233,   308,   213,  1067,   311,   266,
                  -   229,   510,   539,   309,  1261,    86,   718,   861,   220,   542,
                  -   238,   293,  1348,   294,  1519,  1119,  1507,  -542,   236,    87,
                  -  1090,   302,  1286,   862,   785,   243,  1641,  1129,  1130,  1131,
                  -  1132,  1133,  1134,   642,  1114,  -542,   543,   258,   792,   233,
                  -   719,   720,   221,   428,   213,    28,  1349,  1350,   267,   545,
                  -   185,  1013,  1520,  1638,   308,   288,   863,  -573,  1551,   713,
                  -   240,    84,   429,  1563,  1564,   793,   366,  1433,  1127,   185,
                  -  1435,   660,   185,   438,    85,  -573,  1639,  1548,   721,  1549,
                  -   547,  1406,   430,  1084,  1351,   308,   315,  1592,   431,   504,
                  -   505,   372,  1092,  1093,  1094,  1095,  1096,  1097,   506,   929,
                  -   484,   167,  1116,   800,   387,   801,   201,   930,   931,   932,
                  -   933,   929,   219,   390,   254,   425,   231,   256,   934,   930,
                  -   931,   932,   933,   548,   268,   518,   521,   521,   883,   884,
                  -   934,  -801,   791,  -801,   507,   880,  -808,   885,  1077,   283,
                  -  1422,   529,   229,   881,   882,   883,   884,   802,   405,   803,
                  -   549,   229,   406,  1383,   885,   300,   587,   557,  1384,  1385,
                  -  1386,  1387,  1388,  1389,  1390,   577,  1580,   240,   312,  1581,
                  -   282,  1582,  1391,   303,     6,  1098,     7,   185,   229,   976,
                  -   932,   933,   314,   185,   984,   985,   185,   185,   313,   934,
                  -   981,   605,   316,   879,   240,   647,   614,   615,   616,    13,
                  -   575,   317,   382,   624,   575,   642,   642,   642,   642,   385,
                  -  1100,  1101,   490,  1215,  1216,   631,   386,  1169,   929,   392,
                  -   645,  1109,  1217,   308,  1135,  1257,   930,   931,   932,   933,
                  -  1397,   814,  1500,   815,  1272,  1273,  1274,   934,   661,   393,
                  -   662,  1298,   595,   647,   694,    16,   716,   394,   599,  1389,
                  -  1390,   600,   601,   397,   527,   530,   396,   491,  1391,  1137,
                  -    18,   401,   399,   492,   535,   788,   789,   790,   768,-32768,
                  -   768,  1291,  1292,  1293,   404,   713,   713,   713,   713,   713,
                  -  1320,   805,   830,  1024,   831,   480,  1321,   408,  1025,   480,
                  -   409,   596,   713,   480,   411,  1024,  1322,   480,   414,   413,
                  -  1026,   480,   185,   417,  1323,   480,  1527,   418,  1406,   480,
                  -  1263,   419,  1026,   480,  1586,    28,  1267,  1324,  1377,  1378,
                  -  1379,  1380,  1381,  1382,   821,  1201,   823,   824,   825,   826,
                  -  1325,   421,   452,   822,   422,   822,   822,   822,   822,  1624,
                  -   427,   880,   492,   524,  1027,  1625,  1626,  1326,   229,   881,
                  -   882,   883,   884,   308,   435,   453,  1027,  1028,   840,   447,
                  -   885,  1587,   496,  1029,   439,  1588,   840,   796,   440,  1028,
                  -  1202,   454,    99,   458,   443,  1029,  1203,   497,   841,   372,
                  -   842,   854,-32768,   855,  1030,   868,   768,   869,  1183,   800,
                  -  1184,  1185,   645,   645,   645,   645,  1030,   444,   299,   299,
                  -   445,   366,   366,   448,   109,   498,   841,   510,  1222,  1264,
                  -  1052,   449,   366,   502,   503,   504,   505,   841,   841,  1369,
                  -  1370,  1443,   450,  1456,   506,  1457,-32768,  1277,   580,  1508,
                  -   455,  1509,   462,   581,   881,   882,   883,   884,   464,   642,
                  -   642,   496,   465,   466,   582,   885,  1103,   485,   642,   642,
                  -   642,   642,   642,   642,   583,   584,   497,  1517,  1461,  1518,
                  -   468,   832,   716,   716,   716,   716,   716,  1465,  1466,  1467,
                  -  1468,  1469,  1470,  1471,  1472,  1207,  1476,   487,   585,   716,
                  -  1508,   421,  1550,  1561,-32768,   713,   488,  1609,   642,  1610,
                  -  1208,   507,   502,   503,   504,   505,  1409,   713,   713,   713,
                  -   713,   713,   713,   506,   512,  1598,  1618,  1365,  1619,   514,
                  -   513,   531,   880,   541,   558,    16,   566,   229,  1209,   229,
                  -   881,   882,   883,   884,   987,   578,  1213,  1214,  1215,  1216,
                  -   529,   885,   768,   592,  1091,   593,   602,  1217,   185,  1180,
                  -   610,   991,   617,   991,   993,   994,   185,   612,   625,   626,
                  -   630,  1012,   627,  1040,   628,   605,   991,   649,  1021,  1413,
                  -   506,   657,   658,   659,   229,   763,   776,  1430,   778,-32768,
                  -   577,  1061,  1061,  1051,   577,   782,  1423,   930,   931,   932,
                  -   933,   822,   822,   282,  1062,  1062,   282,   784,   934,   795,
                  -   185,   797,   185,  1071,   900,   798,   799,   605,   809,   808,
                  -   813,  1553,   810,   989,   811,  1078,  1079,  1080,  1646,   816,
                  -   827,   996,   819,   828,   829,   833,   834,   901,   844,   836,
                  -   835,  1083,   846,   366,   849,   850,   645,   645,   852,   853,
                  -   970,   859,   975,   857,   858,   645,   645,   645,   645,   645,
                  -   645,   860,   867,   527,  1193,   866,  1194,  1195,  1196,  1197,
                  -  1198,  1199,   870,   297,  1438,  1068,   871,  1070,   272,   273,
                  -   274,   275,   276,   277,   278,  1117,   878,   872,   873,  1203,
                  -  1120,  1121,   716,   892,   893,   645,   887,  1036,  1411,   912,
                  -   916,  1473,  1412,   899,   716,   716,   716,   716,   716,   716,
                  -   914,   915,   917,   997,   918,    91,   325,   919,   920,   264,
                  -   921,   936,   469,   978,   937,   944,   945,  1568,   947,   948,
                  -   330,   713,   977,   950,   372,   372,   951,   296,    93,   953,
                  -   983,   954,   956,   331,   957,   372,   959,   229,   960,   962,
                  -  1174,  1018,   963,   768,    98,    99,  1506,  1022,   965,   966,
                  -  1043,  1041,   902,  1065,   336,  1014,  1015,   903,   904,   905,
                  -   906,   907,   908,   909,  1072,  1104,  1012,   885,  1012,  1012,
                  -  1012,  1012,  1012,  1012,  1111,  1106,  1107,   109,  1207,  1110,
                  -   605,   605,   470,   340,  1108,   934,  1143,  1171,  1530,  1531,
                  -  1340,   185,   265,  1208,   381,  1245,  1146,  1371,  1149,  1152,
                  -  1155,  1383,    91,   113,  1158,  1161,   471,-32768,-32768,  1387,
                  -  1388,  1389,  1390,  1164,  1552,  1167,  1172,  1175,  1051,  1256,
                  -  1391,-32768,  1176,  1181,  1484,    93,  1188,  1189,   880,  1213,
                  -  1214,  1215,  1216,  1190,  1492,  1192,   881,   882,   883,   884,
                  -  1217,    98,    99,  1621,  1219,  -808,  1342,   885,  1223,  1224,
                  -   975,  1225,  1243,  1244,  1344,  1248,  1226,  1250,  1352,  1253,
                  -  1356,  1254,  1255,  1357,  1358,  1359,  1360,  1361,  1362,  1363,
                  -  1364,  1258,  1262,  1368,   109,   472,  1260,  1297,  1265,  1372,
                  -  1266,   619,   620,   929,   164,  1268,  1270,   164,  1271,  1275,
                  -   490,   930,   931,   932,   933,  1279,  1283,  1285,   164,   164,
                  -   113,   164,   934,  1287,  1288,   164,  1289,-32768,   716,   164,
                  -   164,   164,   164,  1290,  1383,  1387,  1388,  1389,  1390,  1384,
                  -  1385,  1386,  1387,  1388,  1389,  1390,  1391,  1329,  1294,  1331,
                  -  1296,  1303,  1304,  1391,  1305,   491,  1464,   229,  1306,   694,
                  -  1307,   492,  1308,  1332,  1334,  1309,   372,   493,  1310,   185,
                  -  1311,  1312,  1313,  1314,   185,  1315,  1316,  1317,  1012,  1318,
                  -  1336,  1337,  1341,  1217,  1347,   164,  1012,  1374,  1375,  1376,
                  -  1012,  1392,  1012,  1394,  1396,  1012,  1012,  1012,  1012,  1012,
                  -  1012,  1012,  1012,  1410,  1414,  1012,  1415,  1416,  1417,   185,
                  -  1419,  1012,  1420,  1424,  1425,  1431,  1436,   643,  1440,  1426,
                  -   265,   265,   265,   265,   265,   265,  1398,  1428,  1401,  1455,
                  -  1429,  1444,  1445,  1447,  1335,  1454,  1458,  1391,  1459,  1338,
                  -   229,  1477,  1383,   714,  1482,  1483,  1408,  1384,  1385,  1386,
                  -  1387,  1388,  1389,  1390,  1485,  1487,  1486,  1491,  1501,  1495,
                  -   496,  1391,  1496,  1497,  1503,  1505,  1636,  1498,  1510,   164,
                  -   975,  1515,   164,   164,  1516,   497,   164,   164,  1521,   164,
                  -   164,   490,  1526,   164,  1543,  1546,  1547,   164,   164,  1557,
                  -  1558,   164,  1533,   164,   164,   164,  1567,  1565,  1566,  1569,
                  -   164,   164,  1574,   498,  1600,  1606,  1620,  1442,   499,   500,
                  -   501,   502,   503,   504,   505,   229,  1628,  1631,   164,  1630,
                  -  1637,  1632,   506,   265,  1642,  1643,   491,  1590,   841,  1648,
                  -  1512,  1649,   492,   253,   403,  1247,   164,   807,   493,   164,
                  -  1035,  1012,   559,   522,   990,   164,  1017,   992,  1373,   494,
                  -  1605,  1246,  1511,  1400,   366,  1613,  1613,   489,  1462,  1463,
                  -   265,  1573,   490,  1556,  1579,  1627,  1252,  1064,  1020,   265,
                  -   265,   265,   265,   265,   265,   265,   265,  1063,   265,   245,
                  -  1629,   218,   391,   847,   164,   534,   434,  1529,  1591,   643,
                  -   643,   643,   643,  1615,  1528,   164,   298,  1251,   252,   426,
                  -  1614,   560,  1074,  1622,  1599,  1623,  1616,   491,   761,  1536,
                  -  1434,  1634,   473,   492,   164,   772,   980,   164,   164,   493,
                  -  1281,   762,   229,   295,  1560,  1330,     0,     0,   975,     0,
                  -   494,   496,   456,     0,     0,     0,     0,   495,     0,     0,
                  -     0,     0,  1012,     0,  1513,     0,   497,   474,     0,     0,
                  -     0,     0,     0,     0,     0,     0,  1525,     0,     0,   714,
                  -   714,   714,   714,   714,     0,     0,     0,     0,   185,     0,
                  -     0,   768,     0,   768,   498,     0,   714,   185,     0,   499,
                  -   500,   501,   502,   503,   504,   505,   164,   164,     0,     0,
                  -     0,     0,     0,   506,     0,     0,   164,     0,     0,     0,
                  -     0,     0,   164,   265,     0,     0,     0,     0,     0,     0,
                  -   164,     0,   496,     0,     0,   164,     0,     0,     0,  1200,
                  -     0,     0,   164,   164,  1201,     0,     0,   497,   164,     0,
                  -  1585,   164,   164,  1524,     0,   975,   164,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,  1009,  1596,
                  -   621,     0,  1597,     0,     0,   498,   319,   320,     0,     0,
                  -   499,   500,   501,   502,   503,   504,   505,     0,     0,  1202,
                  -     0,     0,    91,   325,   506,  1203,     0,  1128,     0,   469,
                  -     0,  1204,  1585,     0,     0,     0,     0,   330,     0,   164,
                  -     0,     0,  1205,     0,     0,    93,     0,     0,     0,  1206,
                  -   331,  1596,     0,     0,  1597,     0,  1635,   474,     0,     0,
                  -     0,    98,    99,   164,   332,   164,   333,     0,     0,     0,
                  -     0,   336,   806,   643,   643,     0,     0,     0,     0,   605,
                  -     0,     0,   643,   643,   643,   643,   643,   643,     0,     0,
                  -     0,     0,     0,     0,   109,     0,     0,   164,     0,   470,
                  -   340,     0,     0,     0,     0,     0,     0,  1201,   474,     0,
                  -     0,     0,     0,     0,   344,     0,     0,   372,     0,   714,
                  -   113,     0,   643,   471,  1207,     0,     0,     0,   460,     0,
                  -     0,   714,   714,   714,   714,   714,   714,     0,     0,  1208,
                  -     0,     0,   475,   164,     0,   476,     0,   477,   478,   479,
                  -   483,     0,  1202,   164,     0,     0,     0,     0,  1203,     0,
                  -     0,   164,     0,     0,  1204,     0,     0,  1209,     0,     0,
                  -     0,     0,  1210,  1211,  1212,  1213,  1214,  1215,  1216,   346,
                  -     0,   164,     0,     0,     0,     0,  1217,     0,     0,  1218,
                  -     0,     0,   472,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,  1009,     0,  1009,  1009,  1009,  1009,  1009,
                  -  1009,     0,     0,   594,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,  1241,
                  -     0,     0,     0,   611,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,   946,     0,     0,     0,   949,   528,     0,
                  -     0,   952,     0,     0,     0,   955,     0,  1207,     0,   958,
                  -     0,     0,   654,   961,     0,     0,     0,   964,     0,     0,
                  -     0,   967,  1208,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,   696,     0,     0,     0,   722,     0,   726,
                  -     0,     0,   730,   734,   738,   742,   746,   750,   754,   758,
                  -  1209,   760,     0,     0,     0,  1210,  1211,  1212,  1213,  1214,
                  -  1215,  1216,   164,     0,   164,     0,     0,     0,     0,  1217,
                  -     0,     0,     0,     0,     0,   164,     0,   164,     0,     0,
                  -     0,     0,     0,   164,     0,     0,   164,     0,   164,   164,
                  -   164,   164,     0,     0,     0,   714,     0,     0,     0,     0,
                  -   164,   164,     0,   164,     0,     0,     0,     0,     0,   164,
                  -     0,     0,     0,     0,     0,   164,     0,     0,     0,   164,
                  -     0,     0,     0,     0,     0,     0,     0,     0,   164,   164,
                  -   164,   164,     0,     0,     0,   164,     0,   164,   164,     0,
                  -     0,     0,   164,     0,     0,  1009,     0,     0,     0,   474,
                  -   164,   164,     0,  1009,     0,     0,     0,  1009,     0,  1009,
                  -     0,     0,  1009,  1009,  1009,  1009,  1009,  1009,  1009,  1009,
                  -     0,     0,  1009,     0,     0,     0,     0,     0,  1009,     0,
                  -     0,     0,     0,     0,     0,     0,   474,  1241,  1241,  1241,
                  -  1241,  1241,  1241,     0,   654,     0,   654,   654,     0,     0,
                  -     0,  1138,     0,   911,     0,     0,     0,     0,  1144,  1145,
                  -     0,  1147,  1148,  1407,  1150,  1151,     0,  1153,  1154,   490,
                  -  1156,  1157,     0,  1159,  1160,     0,  1162,  1163,     0,  1165,
                  -  1166,     0,   168,     0,     0,   474,     0,     0,   474,     0,
                  -     0,     0,     0,   169,  1200,   170,     0,     0,     0,  1201,
                  -   171,     0,     0,     0,     0,   927,   172,   173,     0,     0,
                  -   174,     0,     0,     0,   491,     0,     0,     0,     0,   943,
                  -   492,   175,   164,   483,     0,   164,   493,   483,   164,   176,
                  -     0,   483,  -320,     0,     0,   483,     0,     0,     0,   483,
                  -  1241,     0,   474,   483,  1202,     0,     0,   483,     0,     0,
                  -  1203,   483,   177,     0,     0,     0,  1204,     0,  1009,     0,
                  -   178,   179,     0,     0,     0,   164,   164,  1205,     0,   180,
                  -     0,     0,     0,     0,  1206,     0,   164,  1241,     0,     0,
                  -   164,     0,  1201,     0,     0,     0,  1241,  1241,  1241,  1241,
                  -  1241,  1241,  1241,  1241,     0,  1241,     0,     0,     0,     0,
                  -     0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,   496,
                  -     0,     0,     0,     0,  1278,     0,     0,  1202,  1280,     0,
                  -     0,     0,     0,  1203,   497,     0,     0,   528,     0,  1204,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,  1207,
                  -     0,     0,     0,  1082,     0,     0,     0,  1299,  1011,  1009,
                  -     0,     0,   498,     0,  1208,     0,     0,   654,-32768,-32768,
                  -   502,   503,   504,   505,     0,     0,     0,     0,     0,     0,
                  -     0,   506,     0,  1102,     0,     0,     0,     0,     0,     0,
                  -     0,     0,  1209,     0,   474,     0,     0,  1210,  1211,  1212,
                  -  1213,  1214,  1215,  1216,     0,     0,     0,  1200,     0,     0,
                  -     0,  1217,  1201,     0,  1343,   654,     0,     0,   644,     0,
                  -  1241,     0,   164,     0,   164,     0,     0,     0,     0,     0,
                  -     0,     0,  1207,     0,   164,     0,     0,     0,     0,   164,
                  -     0,     0,     0,     0,   715,     0,     0,  1208,     0,     0,
                  -     0,     0,   474,     0,     0,     0,     0,  1202,     0,     0,
                  -     0,     0,  1168,  1203,     0,     0,     0,   489,   474,  1204,
                  -     0,     0,   490,     0,   164,  1209,     0,     0,     0,     0,
                  -  1205,-32768,-32768,  1213,  1214,  1215,  1216,  1206,     0,     0,
                  -     0,     0,     0,  1418,  1217,     0,     0,  1421,     0,     0,
                  -  1011,     0,     0,     0,     0,   164,   187,     0,     0,     0,
                  -     0,   164,     0,     0,     0,     0,     0,   491,     0,   188,
                  -   474,     0,     0,   492,   189,     0,     0,     0,     0,   493,
                  -   190,   191,     0,     0,   192,     0,     0,   474,     0,     0,
                  -   494,     0,     0,     0,     0,   193,     0,   495,   474,     0,
                  -     0,     0,     0,   194,     0,     0,   195,     0,     0,     0,
                  -     0,     0,  1207,  1011,     0,  1011,  1011,  1011,  1011,  1011,
                  -  1011,     0,     0,     0,     0,     0,   196,  1208,   197,     0,
                  -   164,   654,   654,   654,   198,   199,     0,     0,     0,  1011,
                  -   644,   644,   644,   644,     0,     0,     0,     0,   474,     0,
                  -     0,     0,     0,     0,   474,  1209,     0,     0,  1282,     0,
                  -  1210,  1211,  1212,  1213,  1214,  1215,  1216,     0,   654,   654,
                  -   654,     0,   496,     0,  1217,     0,     0,  1460,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   497,     0,     0,
                  -     0,     0,   474,     0,     0,     0,     0,     0,     0,     0,
                  +   259,   776,   185,   301,  1017,   280,  1171,   846,   242,   311,
                  +   299,  1180,   388,   225,   229,   366,   233,   857,   292,   534,
                  +   229,   648,  1038,   509,   229,   248,   250,   229,  1076,  1077,
                  +   895,   576,   897,   898,  1121,  1346,   761,  1394,   787,  1082,
                  +  1494,  1495,  1115,   764,   228,  1116,  1329,   311,   516,  1489,
                  +   239,   383,   546,   379,   246,   785,   537,   251,   538,  1576,
                  +   208,   209,   203,   890,   607,   764,  1187,  1608,  1533,   931,
                  +   772,   186,   184,   305,  1378,  1379,  1380,  1381,  1382,  1383,
                  +   229,   520,   517,   548,   210,   220,   806,  1039,   510,   890,
                  +   202,   284,   209,   539,   720,  1520,   925,   926,   927,   928,
                  +   929,  1047,   217,   442,  1086,   890,  1539,  1540,  1145,  1087,
                  +   255,   429,  1609,   944,  1555,   210,   459,   433,   389,   221,
                  +   437,  1538,  -801,  1577,  1048,   889,   549,  -808,   721,   722,
                  +   211,   234,  1188,  1521,   608,   725,   285,  1194,   780,  1195,
                  +  1196,  1197,  1198,  1199,  1200,   212,   306,   384,  1534,   482,
                  +  1563,  1578,   609,   550,  1125,   875,   876,   877,   878,  1126,
                  +   204,   211,   307,   416,   229,   891,   723,   185,   185,   890,
                  +  1049,   263,   265,   286,   185,   229,   212,  1444,   282,   774,
                  +   726,   236,   229,   185,   778,  1050,   185,  1454,   185,   263,
                  +   265,   891,   727,   980,   258,   185,   185,   890,  1556,   205,
                  +  1434,   781,   308,  1436,  1438,   267,   381,   891,   896,  1277,
                  +   821,   213,   288,   229,  1462,   206,   240,   775,  1490,  1221,
                  +  1222,   240,   238,  1466,  1467,  1468,  1469,  1470,  1471,  1472,
                  +  1473,   229,  1477,  1068,   233,   540,  1286,   260,   261,   511,
                  +   229,   630,   213,   315,   266,   615,   616,   617,   372,   240,
                  +  1262,   511,   625,  1091,  1646,   240,   293,  1541,   294,   786,
                  +   844,   387,  1639,  1117,   632,  1642,   302,   932,  1270,   865,
                  +   390,   891,   243,  1297,   308,   933,   934,   935,   936,   233,
                  +   240,  1508,   309,   428,   862,  1640,   937,   562,   405,   663,
                  +   185,   664,   406,     6,  1407,     7,  1542,   887,  1014,   891,
                  +   863,  1349,   866,  1130,   366,  1552,   932,  1122,  -575,   185,
                  +   563,   308,   185,   438,   933,   934,   935,   936,    13,  1132,
                  +  1133,  1134,  1135,  1136,  1137,   937,  -575,   543,   662,  1343,
                  +   506,   507,   793,   864,   256,  1350,  1351,  1345,   807,   508,
                  +   486,  1353,  1549,  1357,  1550,   546,  1358,  1359,  1360,  1361,
                  +  1362,  1363,  1364,  1365,   544,    84,  1369,  1554,  1515,   794,
                  +   425,   254,  1373,  1354,    16,   519,   522,   522,    85,   938,
                  +  1288,   564,   792,  1352,   268,  -543,   548,  1078,   941,    18,
                  +    86,   530,   229,   823,   283,   823,   823,   823,   823,  1085,
                  +     6,   229,     7,  -543,    87,   977,   588,   558,  1093,  1094,
                  +  1095,  1096,  1097,  1098,  1424,   578,   982,  -542,  1355,  1480,
                  +   282,   528,   531,   942,  1099,    13,  1481,   185,   229,   549,
                  +  1356,   536,  1451,   185,   880,  -542,   185,   185,  1043,   648,
                  +   308,   606,  1046,  1587,    28,  1564,  1565,   576,  -573,   985,
                  +   986,   576,   303,-32768,  1101,  1102,   550,  1119,   597,   240,
                  +   943,   882,   883,   884,   885,  1110,  -573,  1452,   300,  1593,
                  +   646,    16,   886,  1398,   881,  1138,   312,  1273,  1274,  1275,
                  +   313,  1501,   882,   883,   884,   885,    18,  -801,   476,   648,
                  +  1588,   884,   885,   886,  1589,   430,   696,   596,   718,   316,
                  +   886,   431,  1456,   600,  1453,  1140,   601,   602,   789,   790,
                  +   791,   314,   317,   494,   935,   936,  1293,  1294,  1295,   769,
                  +   949,   769,   167,   937,   952,   382,  1204,   201,   955,  1528,
                  +   806,  1407,   958,   219,   482,   386,   961,   231,   482,   385,
                  +   964,    28,   482,  1300,   967,   903,   482,   372,   970,   801,
                  +   482,   802,   392,   185,   482,   393,  1216,  1217,   482,   394,
                  +   397,  1264,   482,   396,  1384,  1218,  1112,  1268,   904,  1385,
                  +  1386,  1387,  1388,  1389,  1390,  1391,   932,   401,   399,  1390,
                  +  1391,   404,   881,  1392,   933,   934,   935,   936,  1392,   408,
                  +   882,   883,   884,   885,   409,   937,   881,  1581,   240,   229,
                  +  1582,   886,  1583,  1513,   882,   883,   884,   885,   581,   841,
                  +   411,  1025,   498,   582,  1625,   886,  1026,   841,  1092,   413,
                  +  1626,  1627,   417,   797,   583,  1208,   414,   499,  1027,   833,
                  +   803,   418,   804,  1052,   584,   585,   815,   769,   816,   419,
                  +  1209,   823,   823,   646,   646,   646,   646,   421,   422,   366,
                  +   366,   427,   308,   299,   299,-32768,   435,   491,   586,   439,
                  +   366,  1053,   492,   504,   505,   506,   507,  1081,-32768,   452,
                  +   440,  1278,  1028,   831,   508,   832,  1214,  1215,  1216,  1217,
                  +   842,  1084,   843,   443,   855,  1029,   856,  1218,   308,  1025,
                  +  1258,  1030,   453,   905,  1104,   869,   447,   870,   906,   907,
                  +   908,   909,   910,   911,   912,   444,  1027,   493,   454,    99,
                  +   445,   448,  1031,   494,   718,   718,   718,   718,   718,   495,
                  +   822,   449,   824,   825,   826,   827,  1184,  1120,  1185,  1141,
                  +   496,   718,  1123,  1124,   450,   458,  1147,  1148,   462,  1150,
                  +  1151,   109,  1153,  1154,   476,  1156,  1157,  1410,  1159,  1160,
                  +  1028,  1162,  1163,   464,  1165,  1166,  1366,  1168,  1169,   465,
                  +   801,  1599,  1186,  1029,   842,   487,  1223,   455,   229,  1030,
                  +   229,   511,   842,  1265,  1370,   988,   842,  1457,  1371,  1458,
                  +  1509,   530,  1510,   769,  1518,   466,  1519,  1181,   468,   185,
                  +  1031,  1509,   992,  1551,   992,   994,   995,   185,   971,   421,
                  +   976,  1562,  1013,  1610,  1041,  1611,   606,   992,  1414,  1022,
                  +   489,   528,   498,   490,  1619,   229,  1620,   513,   515,   514,
                  +-32768,   578,  1062,  1062,   532,   578,  1425,   499,   933,   934,
                  +   935,   936,   542,   559,   282,  1063,  1063,   282,    16,   937,
                  +   567,   185,   579,   185,  1072,  1037,   593,   594,   606,   603,
                  +   611,   613,   618,   626,   627,   500,  1079,  1080,  1647,   990,
                  +   501,   502,   503,   504,   505,   506,   507,   997,  1052,   628,
                  +   629,   366,   631,   650,   508,   659,    91,   646,   646,   508,
                  +   660,   764,   372,   372,   661,   777,   646,   646,   646,   646,
                  +   646,   646,   779,   372,  1321,   783,   798,   785,  1439,    93,
                  +  1322,   796,  1280,   799,  1412,   800,  1282,   491,  1413,   809,
                  +  1323,  1069,   492,  1071,   810,    98,    99,   811,  1324,   812,
                  +   814,   817,   828,   820,   834,   718,   829,   835,   646,   830,
                  +  1474,  1325,   492,   836,   837,  1301,   845,   718,   718,   718,
                  +   718,   718,   718,  1418,  1326,   851,   847,   850,   109,   853,
                  +   854,   858,   859,  1569,   860,   620,   621,   493,   867,   868,
                  +   861,  1327,   871,   494,   872,   978,   894,   873,   874,   495,
                  +   879,   888,   492,   915,   113,   893,   900,   493,   229,   918,
                  +   496,  1175,   917,   494,   769,  1507,  1384,   497,   979,-32768,
                  +   919,  1385,  1386,  1387,  1388,  1389,  1390,  1391,   920,   921,
                  +   922,   923,   924,   939,   940,  1392,   947,  1013,   976,  1013,
                  +  1013,  1013,  1013,  1013,  1013,   948,   950,   493,   951,   953,
                  +   954,   606,   606,   494,   984,   998,   956,  1531,  1532,   495,
                  +  1341,   957,   185,   265,  1023,   381,  1246,  1384,  1372,   959,
                  +  1485,   960,  1385,  1386,  1387,  1388,  1389,  1390,  1391,   962,
                  +  1493,  1019,   963,  1553,  1042,   965,  1392,  1384,  1044,  1465,
                  +  1257,   966,   498,-32768,-32768,  1388,  1389,  1390,  1391,  1066,
                  +  1420,   968,   969,  1015,  1423,  1202,  1392,   499,  1073,   881,
                  +  1016,   886,   498,  1105,  1622,  1107,  1108,   882,   883,   884,
                  +   885,  1109,  1113,  1114,   937,  1146,  1172,   499,   886,  1149,
                  +  1152,  1173,  1227,  1155,   372,   500,  1158,  1161,  1164,  1167,
                  +   501,   502,   503,   504,   505,   506,   507,  1170,  1177,  1176,
                  +  1203,  1182,   498,  1189,   508,   500,  1204,  1131,   164,  1244,
                  +  1190,   164,  1205,   504,   505,   506,   507,   499,  1191,  1193,
                  +  1220,  -808,   164,   164,   508,   164,  1225,  1224,  1226,   164,
                  +   932,   718,  1245,   164,   164,   164,   164,  1249,   933,   934,
                  +   935,   936,  1254,  1255,  1251,   500,  1256,  1259,  1261,   937,
                  +   501,   502,   503,   504,   505,   506,   507,  1263,   229,  1266,
                  +   696,  1267,  1269,  1271,   508,  1272,  1276,  1281,  1463,  1464,
                  +   185,  1285,   525,-32768,  1287,   185,  1289,  1290,  1330,  1013,
                  +  1291,  1388,  1389,  1390,  1391,  1292,  1296,  1013,   976,   164,
                  +  1298,  1013,  1392,  1013,  1299,  1332,  1013,  1013,  1013,  1013,
                  +  1013,  1013,  1013,  1013,  1305,  1208,  1013,  1306,   297,  1307,
                  +   185,  1308,  1013,   272,   273,   274,   275,   276,   277,   278,
                  +  1209,   265,   265,   265,   265,   265,   265,  1399,  1309,  1402,
                  +  1333,  1310,  1311,  1312,  1313,  1314,  1315,  1202,  1316,  1317,
                  +  1336,   229,  1637,  1335,  1318,  1339,  1319,  1409,  1210,  1320,
                  +  1337,   643,  1338,  1211,  1212,  1213,  1214,  1215,  1216,  1217,
                  +  1342,  1218,  1348,  1395,  1375,  1506,  1376,  1218,  1377,  1397,
                  +  1411,  1401,  1393,   164,  1415,  1416,   164,   164,  1417,   715,
                  +   164,   164,  1203,   164,   164,  1419,  1421,   164,  1204,  1431,
                  +  1422,   164,   164,  1426,-32768,   164,  1427,   164,   164,   164,
                  +  1428,  1430,  1432,  1437,   164,   164,  1441,  1445,  1443,   264,
                  +  1448,  1446,  1455,  1392,  1459,  1478,   229,  1460,  1483,  1484,
                  +  1486,  1492,   164,  1487,   265,  1591,  1488,   296,  1502,  1496,
                  +  1497,  1504,  1498,  1511,  1522,  1499,  1516,  1517,  1527,  1201,
                  +   164,  1544,  1013,   164,  1202,  1547,   976,  1548,  1558,   164,
                  +  1559,  1534,   366,  1614,  1614,  1566,  1567,  1570,  1568,  1597,
                  +  1607,   265,  1575,  1601,  1621,  1629,  1631,  1632,  1633,  1638,
                  +   265,   265,   265,   265,   265,   265,   265,   265,  1630,   265,
                  +  1643,  1644,   842,  1649,  1650,   253,   403,  1208,   164,  1203,
                  +   560,  1248,  1036,   523,   808,  1204,   991,  1018,  1512,   164,
                  +   993,  1205,  1209,  1374,  1247,  1574,  1606,  1557,  1580,  1021,
                  +  1628,  1597,  1206,  1253,   245,   391,  1065,  1064,   164,  1207,
                  +   535,   164,   164,   229,   643,   643,   643,   643,   218,   434,
                  +  1210,   848,  1530,  1592,  1616,  1529,   456,   168,  1214,  1215,
                  +  1216,  1217,   298,  1013,   426,  1514,  1615,  1252,   169,  1218,
                  +   170,   474,   252,   976,  1623,   171,  1075,  1526,  1600,  1617,
                  +  1624,   172,   173,   561,   762,   174,  1537,  1435,  1635,   185,
                  +   473,  1283,   769,   295,   769,   773,   175,   763,   185,  1561,
                  +   981,  1331,     0,     0,   176,     0,     0,  -320,     0,     0,
                  +   164,   164,     0,     0,  1208,   715,   715,   715,   715,   715,
                  +   164,     0,     0,     0,   265,     0,   164,   177,     0,  1209,
                  +     0,     0,   715,     0,   164,   178,   179,     0,     0,   164,
                  +     0,     0,     0,     0,   180,     0,   164,   164,     0,     0,
                  +     0,  1586,   164,     0,     0,   164,   164,  1210,     0,  1525,
                  +   164,     0,  1211,  1212,  1213,  1214,  1215,  1216,  1217,   492,
                  +     0,     0,     0,  1598,   622,     0,  1218,     0,     0,  1219,
                  +  1201,     0,   525,     0,     0,  1202,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -   715,   715,   715,   715,   715,   498,     0,     0,     0,     0,
                  -   499,   500,   501,   502,   503,   504,   505,   715,     0,     0,
                  -   474,     0,     0,     0,   506,  -603,     0,   164,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   474,   474,     0,
                  -     0,     0,     0,     0,     0,   474,  1011,     0,     0,   164,
                  +     0,     0,     0,  1586,     0,   372,     0,     0,     0,     0,
                  +     0,     0,     0,     0,   493,   164,     0,   644,     0,     0,
                  +   494,     0,     0,     0,  1201,  1598,   495,  1636,     0,  1202,
                  +  1203,     0,     0,   474,     0,     0,  1204,   496,   164,     0,
                  +   164,     0,  1205,     0,     0,   716,     0,     0,     0,     0,
                  +   606,   491,     0,  1206,     0,     0,   492,     0,     0,     0,
                  +  1207,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,   164,     0,  1203,     0,     0,     0,   643,   643,
                  +  1204,     0,     0,   474,     0,     0,  1205,   643,   643,   643,
                  +   643,   643,   643,     0,     0,     0,     0,  1206,     0,     0,
                  +     0,   493,     0,     0,  1207,     0,     0,   494,     0,     0,
                  +     0,     0,     0,   495,     0,     0,     0,     0,   164,   498,
                  +     0,     0,     0,     0,   496,     0,   715,     0,   164,   643,
                  +     0,   497,     0,     0,   499,  1208,   164,     0,   715,   715,
                  +   715,   715,   715,   715,     0,     0,     0,     0,     0,     0,
                  +  1209,     0,     0,     0,     0,     0,   164,     0,     0,     0,
                  +     0,     0,   500,     0,     0,     0,     0,   501,   502,   503,
                  +   504,   505,   506,   507,     0,     0,     0,     0,  1210,  1208,
                  +     0,   508,     0,  1211,  1212,  1213,  1214,  1215,  1216,  1217,
                  +   644,   644,   644,   644,  1209,     0,     0,  1218,     0,     0,
                  +  1344,     0,     0,     0,     0,     0,   498,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,   499,  1210,     0,     0,     0,     0,  1211,  1212,  1213,
                  +  1214,  1215,  1216,  1217,     0,     0,     0,     0,     0,     0,
                  +     0,  1218,     0,     0,  1461,     0,     0,     0,     0,   500,
                  +     0,     0,     0,     0,   501,   502,   503,   504,   505,   506,
                  +   507,   716,   716,   716,   716,   716,     0,     0,   508,     0,
                  +     0,  1618,     0,     0,     0,     0,     0,     0,   716,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   164,     0,   164,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,   164,     0,     0,   164,     0,   164,   474,
                  -   474,     0,   164,     0,     0,     0,     0,     0,     0,  1010,
                  -     0,     0,     0,     0,     0,  1011,     0,     0,     0,   474,
                  -     0,   474,     0,  1011,  1011,   474,   489,  1011,     0,  1011,
                  -     0,   490,  1011,  1011,  1011,  1011,  1011,  1011,  1011,  1011,
                  -     0,     0,  1011,     0,     0,     0,     0,     0,  1011,     0,
                  -     0,     0,     0,     0,     0,     0,     0,  1011,  1011,  1011,
                  -  1011,  1011,  1011,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,   491,   164,     0,     0,
                  -     0,     0,   492,     0,   644,   644,  1439,     0,   493,     0,
                  -     0,     0,     0,   644,   644,   644,   644,   644,   644,   494,
                  -     0,     0,     0,     0,     0,     0,   495,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,   489,     0,
                  -  1011,     0,     0,   490,     0,     0,     0,     0,     0,   164,
                  -   715,   164,     0,   644,     0,     0,     0,     0,     0,     0,
                  -     0,     0,   715,   715,   715,   715,   715,   715,     0,     0,
                  -     0,  1141,     0,     0,   164,     0,     0,     0,     0,     0,
                  -  1011,     0,     0,     0,     0,     0,     0,     0,   491,     0,
                  -  1011,     0,     0,     0,   492,     0,  1011,     0,  1011,     0,
                  -   493,   496,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,   494,     0,     0,     0,     0,   497,  1011,   495,     0,
                  -     0,     0,     0,     0,     0,     0,  1011,  1011,  1011,  1011,
                  -  1011,  1011,  1011,  1011,  1010,  1011,  1010,  1010,  1010,  1010,
                  -  1010,  1010,     0,     0,   498,     0,     0,     0,     0,   499,
                  -   500,   501,   502,   503,   504,   505,     0,     0,     0,     0,
                  -  1242,     0,     0,   506,     0,     0,  1617,     0,     0,     0,
                  -     0,     0,  1011,     0,     0,     0,     0,     0,     0,     0,
                  +   164,     0,   164,     0,     0,     0,     0,     0,   164,     0,
                  +     0,   164,     0,   164,   164,   164,   164,     0,     0,     0,
                  +     0,     0,     0,     0,     0,   164,   164,     0,   164,     0,
                  +     0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
                  +   164,     0,     0,     0,   164,   529,     0,     0,     0,  1010,
                  +     0,     0,   715,   164,   164,   164,   164,     0,     0,     0,
                  +   164,     0,   164,   164,     0,     0,   491,   164,     0,     0,
                  +     0,   492,     0,     0,   474,   164,   164,     0,    91,   325,
                  +     0,     0,     0,     0,     0,   469,     0,     0,     0,     0,
                  +     0,     0,     0,   330,     0,     0,     0,   491,     0,     0,
                  +     0,    93,   492,     0,     0,     0,   331,     0,     0,     0,
                  +     0,   474,     0,     0,     0,     0,   493,    98,    99,     0,
                  +     0,     0,   494,     0,   644,   644,     0,   336,   495,     0,
                  +     0,     0,     0,   644,   644,   644,   644,   644,   644,   496,
                  +     0,     0,     0,     0,     0,     0,   497,   493,     0,     0,
                  +   109,     0,     0,   494,     0,   470,   340,     0,     0,   495,
                  +     0,     0,   474,     0,     0,   474,     0,     0,     0,     0,
                  +   496,     0,   716,     0,     0,   644,   113,   497,     0,   471,
                  +     0,     0,     0,     0,   716,   716,   716,   716,   716,   716,
                  +     0,     0,     0,     0,     0,     0,     0,   164,     0,     0,
                  +   164,     0,     0,   164,     0,     0,   460,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   474,     0,     0,
                  +   475,   498,     0,   478,     0,   479,   480,   481,   485,     0,
                  +     0,     0,     0,     0,     0,     0,   499,     0,     0,     0,
                  +   164,   164,     0,     0,     0,     0,     0,     0,   472,     0,
                  +     0,   164,   498,     0,  1010,   164,  1010,  1010,  1010,  1010,
                  +  1010,  1010,     0,     0,   500,     0,     0,   499,     0,   501,
                  +   502,   503,   504,   505,   506,   507,     0,     0,     0,   164,
                  +  1242,     0,     0,   508,  -603,     0,     0,     0,     0,     0,
                  +     0,   595,     0,     0,     0,   500,     0,     0,     0,     0,
                  +   501,   502,   503,   504,   505,   506,   507,     0,     0,     0,
                  +     0,   612,     0,     0,   508,  -602,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -  1011,     0,     0,   496,     0,     0,     0,  1011,     0,  1011,
                  -     0,     0,     0,     0,     0,     0,     0,   489,   497,     0,
                  -  1601,     0,   490,     0,     0,     0,     0,     0,     0,     0,
                  -  1572,     0,     0,     0,     0,     0,     0,     0,     0,   489,
                  -     0,     0,     0,     0,   490,     0,   498,     0,  1602,  1593,
                  -     0,   499,   500,   501,   502,   503,   504,   505,     0,   489,
                  -     0,  1011,     0,  1011,   490,   506,  -602,   491,     0,     0,
                  -  1011,     0,     0,   492,     0,     0,     0,     0,     0,   493,
                  -     0,     0,     0,     0,  1572,     0,   715,  1302,     0,   491,
                  -   494,     0,     0,     0,     0,   492,     0,   495,     0,     0,
                  -     0,   493,     0,   898,     0,     0,     0,     0,     0,   491,
                  -     0,     0,   494,     0,     0,   492,     0,     0,     0,   495,
                  -     0,   493,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,   494,  1603,     0,     0,  1010,     0,     0,   495,
                  -     0,     0,     0,     0,  1010,  1346,     0,     0,  1010,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,   491,
                  +   655,     0,  1602,     0,   492,     0,     0,     0,   658,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +   491,     0,     0,   698,     0,   492,     0,   724,     0,   728,
                  +  1603,   474,   732,   736,   740,   744,   748,   752,   756,   760,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,   493,
                  +     0,     0,     0,     0,     0,   494,     0,   164,   716,   164,
                  +     0,   495,     0,     0,     0,     0,     0,     0,     0,   164,
                  +   493,     0,   496,     0,   164,     0,   494,     0,     0,   497,
                  +     0,     0,   495,     0,     0,     0,     0,   474,     0,     0,
                  +     0,     0,     0,   496,     0,   529,     0,     0,     0,     0,
                  +   497,     0,     0,   474,     0,     0,  1010,     0,     0,   164,
                  +     0,     0,     0,     0,  1010,  1604,  1012,     0,  1010,     0,
                     1010,     0,     0,  1010,  1010,  1010,  1010,  1010,  1010,  1010,
                     1010,     0,     0,  1010,     0,     0,     0,     0,     0,  1010,
                  -     0,     0,   496,     0,     0,     0,     0,     0,  1242,  1242,
                  -  1242,  1242,  1242,  1242,     0,     0,     0,   497,     0,     0,
                  -     0,     0,     0,     0,   496,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,   497,
                  -     0,     0,     0,     0,   496,   498,     0,     0,     0,     0,
                  -   499,   500,   501,   502,   503,   504,   505,     0,     0,   497,
                  -     0,     0,     0,     0,   506,     0,     0,   498,     0,     0,
                  -     0,  1427,   499,   500,   501,   502,   503,   504,   505,     0,
                  -   968,     0,     0,     0,     0,   969,   506,   498,     0,     0,
                  -     0,     0,   499,   500,   501,   502,   503,   504,   505,     0,
                  -     0,     0,     0,     0,     0,     0,   506,     0,     0,     0,
                  -     0,  1242,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,  1346,     0,     0,     0,     0,     0,  1346,     0,  1010,
                  +   164,     0,     0,     0,     0,     0,   164,     0,  1242,  1242,
                  +  1242,  1242,  1242,  1242,   498,   474,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,   499,
                  +     0,     0,     0,   474,  1408,   498,     0,     0,     0,     0,
                  +     0,     0,     0,   655,   474,   655,   655,     0,     0,     0,
                  +   499,     0,     0,   914,     0,     0,     0,   500,     0,     0,
                  +     0,     0,   501,   502,   503,   504,   505,   506,   507,     0,
                  +     0,     0,   491,     0,   849,   164,   508,   492,   500,     0,
                  +     0,     0,     0,   501,   502,   503,   504,   505,   506,   507,
                  +     0,   901,     0,   474,     0,     0,   902,   508,     0,   474,
                  +     0,     0,     0,     0,     0,   930,     0,     0,     0,     0,
                  +     0,  1242,     0,     0,     0,     0,     0,     0,     0,   946,
                  +  1012,     0,   493,   485,     0,     0,     0,   485,   494,  1010,
                  +     0,   485,     0,     0,   495,   485,     0,   474,     0,   485,
                  +     0,   491,     0,   485,     0,   496,   492,   485,  1242,     0,
                  +     0,   485,   497,     0,     0,     0,     0,  1242,  1242,  1242,
                  +  1242,  1242,  1242,  1242,  1242,     0,  1242,     0,   492,     0,
                  +     0,     0,     0,     0,     0,     0,   474,     0,   645,     0,
                  +     0,  1012,   164,  1012,  1012,  1012,  1012,  1012,  1012,     0,
                  +     0,   493,   474,   474,     0,     0,     0,   494,     0,     0,
                  +   474,     0,     0,   495,   164,     0,   717,  1012,     0,     0,
                  +     0,     0,     0,   493,   496,     0,     0,     0,     0,   494,
                  +     0,   497,     0,     0,     0,   495,     0,   498,   164,     0,
                  +  1010,   164,     0,   164,   474,   474,     0,   164,     0,     0,
                  +     0,     0,   499,     0,   491,     0,     0,     0,     0,   492,
                  +     0,     0,  1083,     0,   474,     0,   474,     0,     0,     0,
                  +   474,     0,     0,  1202,     0,     0,   655,     0,     0,     0,
                  +   500,     0,     0,     0,     0,   501,   502,   503,   504,   505,
                  +   506,   507,  1103,     0,     0,     0,     0,     0,   899,   508,
                  +     0,  1242,     0,  1111,   493,     0,   498,     0,     0,     0,
                  +   494,     0,     0,     0,     0,     0,   495,     0,  1203,     0,
                  +     0,   499,   164,     0,  1204,     0,   655,   496,   498,     0,
                  +  1205,     0,     0,     0,   497,     0,  1012,     0,     0,     0,
                  +     0,     0,     0,   499,     0,     0,     0,     0,     0,   500,
                  +     0,     0,     0,     0,   501,   502,   503,   504,   505,   506,
                  +   507,   645,   645,   645,   645,     0,     0,  1279,   508,     0,
                  +     0,   500,     0,     0,   164,     0,   164,-32768,-32768,   504,
                  +   505,   506,   507,  1012,     0,     0,     0,     0,     0,     0,
                  +   508,  1012,  1012,     0,     0,  1012,     0,  1012,     0,   164,
                  +  1012,  1012,  1012,  1012,  1012,  1012,  1012,  1012,     0,   498,
                  +  1012,     0,     0,     0,     0,     0,  1012,     0,     0,     0,
                  +     0,     0,     0,  1208,   499,  1012,  1012,  1012,  1012,  1012,
                  +  1012,     0,   717,   717,   717,   717,   717,     0,  1209,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,   717,
                  +     0,     0,   500,     0,     0,     0,     0,   501,   502,   503,
                  +   504,   505,   506,   507,     0,     0,  1210,     0,     0,     0,
                  +     0,   508,-32768,-32768,  1214,  1215,  1216,  1217,     0,     0,
                  +     0,     0,     0,     0,     0,  1218,     0,     0,     0,  1012,
                  +   655,   655,   655,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,  1242,     0,
                  -     0,     0,     0,     0,     0,     0,     0,  1242,  1242,  1242,
                  -  1242,  1242,  1242,  1242,  1242,     0,  1242,     0,     0,     0,
                  -    89,    90,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,   318,   319,   320,     0,     0,     0,
                  -     0,     0,     0,     0,     0,   226,   321,   322,   323,   324,
                  -     0,    91,   325,  1499,     0,     0,     0,     0,   326,     0,
                  -     0,     0,   327,   328,   329,     0,   330,     0,     0,     0,
                  -     0,  1346,     0,     0,    93,     0,     0,    94,  1346,   331,
                  -  1010,     0,     0,    95,    96,     0,     0,     0,     0,    97,
                  -    98,    99,     0,   332,     0,   333,   100,     0,   334,   335,
                  -   336,   101,     0,   102,   103,     0,     0,     0,     0,   337,
                  -     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
                  -     0,     0,   108,   109,     0,     0,   338,     0,   339,   340,
                  -   111,   112,  1346,     0,  1346,   341,   342,     0,     0,     0,
                  -   343,  1242,     0,   344,     0,     0,     0,     0,     0,   113,
                  -   114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
                  -   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
                  -   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
                  -   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
                  -   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
                  -   149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
                  -   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
                  -   162,   347,   240,   348,   308,   349,   350,    89,    90,     0,
                  -     0,     0,   351,   769,     0,   353,   354,   355,     0,     0,
                  -     0,   318,   319,   320,   356,   770,     0,     0,     0,     0,
                  -     0,     0,   226,   321,   322,   323,   324,     0,    91,   325,
                  -     0,     0,     0,     0,     0,   326,     0,     0,     0,   327,
                  -   328,   329,     0,   330,     0,     0,     0,     0,     0,     0,
                  -     0,    93,     0,     0,    94,     0,   331,     0,     0,     0,
                  -    95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
                  -   332,     0,   333,   100,     0,   334,   335,   336,   101,     0,
                  -   102,   103,     0,     0,     0,     0,   337,     0,     0,   104,
                  -   105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
                  -   109,     0,     0,   338,     0,   339,   340,   111,   112,     0,
                  -     0,     0,   341,   342,     0,     0,     0,   343,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,  1284,
                  +  1011,     0,     0,     0,     0,     0,     0,     0,  1012,   655,
                  +   655,   655,     0,     0,     0,     0,     0,     0,  1012,     0,
                  +     0,     0,     0,     0,  1012,     0,  1012,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,  1012,     0,     0,     0,     0,
                  +     0,     0,     0,     0,  1012,  1012,  1012,  1012,  1012,  1012,
                  +  1012,  1012,     0,  1012,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,   645,   645,     0,     0,     0,
                  +     0,     0,     0,     0,   645,   645,   645,   645,   645,   645,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,  1012,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,  1012,     0,
                  +     0,     0,     0,   717,     0,  1012,   645,  1012,     0,     0,
                  +     0,   319,   320,     0,     0,   717,   717,   717,   717,   717,
                  +   717,     0,     0,     0,  1144,     0,     0,    91,   325,     0,
                  +     0,     0,     0,     0,   469,     0,     0,     0,     0,     0,
                  +     0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
                  +    93,     0,     0,     0,     0,   331,     0,     0,     0,  1012,
                  +     0,  1012,     0,     0,     0,     0,    98,    99,  1012,   332,
                  +     0,   333,     0,     0,     0,     0,   336,     0,    89,    90,
                  +     0,     0,     0,     0,     0,  1011,     0,  1011,  1011,  1011,
                  +  1011,  1011,  1011,   319,   320,  1440,     0,     0,     0,   109,
                  +     0,     0,     0,     0,   470,   340,     0,     0,     0,    91,
                  +   569,  1243,     0,     0,     0,     0,   570,     0,     0,   344,
                  +     0,     0,     0,     0,   571,   113,     0,     0,   471,     0,
                  +     0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
                  +     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  +     0,   332,     0,   333,   100,     0,     0,     0,   572,   101,
                  +     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
                  +   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  +   108,   109,     0,   805,   346,     0,   110,     0,   111,   112,
                  +     0,     0,     0,     0,     0,     0,     0,   472,     0,     0,
                  +     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                  +   116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  +     0,   122,   123,   124,   125,   126,     0,   127,   128,   717,
                  +  1304,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  +     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
                  +     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  +     0,   151,   152,   153,   154,   155,     0,     0,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,  1011,   162,   163,
                  +     0,     0,  1201,     0,  1447,  1011,  1347,  1202,     0,  1011,
                  +     0,  1011,     0,     0,  1011,  1011,  1011,  1011,  1011,  1011,
                  +  1011,  1011,     0,   573,  1011,     0,     0,     0,     0,  1573,
                  +  1011,     0,     0,     0,     0,     0,     0,     0,     0,  1243,
                  +  1243,  1243,  1243,  1243,  1243,     0,     0,     0,  1594,     0,
                  +     0,     0,  1203,     0,     0,     0,     0,     0,  1204,     0,
                  +     0,     0,     0,     0,  1205,     0,     0,     0,   319,   320,
                  +     0,     0,     0,     0,     0,  1206,     0,     0,     0,     0,
                  +     0,     0,  1207,  1573,    91,   325,     0,     0,     0,     0,
                  +     0,   469,     0,     0,     0,     0,     0,     0,     0,   330,
                  +     0,     0,     0,  1429,     0,     0,     0,    93,     0,     0,
                  +     0,     0,   331,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,    98,    99,     0,   332,     0,   333,     0,
                  +     0,     0,     0,   336,     0,     0,     0,     0,     0,     0,
                  +     0,     0,  1243,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,  1347,     0,     0,     0,   109,  1208,  1347,     0,
                  +  1011,   470,   340,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,  1209,     0,     0,     0,   344,     0,     0,  1243,
                  +     0,     0,   113,     0,     0,   471,     0,     0,  1243,  1243,
                  +  1243,  1243,  1243,  1243,  1243,  1243,     0,  1243,     0,     0,
                  +  1210,    89,    90,     0,     0,  1211,  1212,  1213,  1214,  1215,
                  +  1216,  1217,     0,     0,     0,   318,   319,   320,     0,  1218,
                  +     0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
                  +   324,     0,    91,   325,     0,  1500,     0,     0,     0,   326,
                  +     0,   346,     0,   327,   328,   329,     0,   330,     0,     0,
                  +     0,     0,  1347,     0,   472,    93,     0,     0,    94,  1347,
                  +   331,  1011,     0,     0,    95,    96,     0,     0,     0,     0,
                  +    97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
                  +   335,   336,   101,     0,   102,   103,     0,     0,     0,     0,
                  +   337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  +     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
                  +   340,   111,   112,  1347,     0,  1347,   341,   342,     0,     0,
                  +     0,   343,  1243,     0,   344,     0,     0,     0,     0,     0,
                  +   113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
                  +     0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
                  +   127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
                  +   135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
                  +   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  +   148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
                  +     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  +     0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
                  +     0,     0,     0,   351,   770,     0,   353,   354,   355,     0,
                  +     0,     0,   318,   319,   320,   356,   771,     0,     0,     0,
                  +     0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
                  +   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                  +   327,   328,   329,     0,   330,     0,     0,     0,     0,     0,
                  +     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                  +     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  +     0,   332,     0,   333,   100,     0,   334,   335,   336,   101,
                  +     0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
                  +   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  +   108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
                  +     0,     0,     0,   341,   342,     0,     0,     0,   343,     0,
                  +     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                  +   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  +     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                  +     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  +     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
                  +     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  +     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
                  +   240,   348,   308,   349,   350,    89,    90,     0,     0,     0,
                  +   351,     0,     0,   353,   354,   355,     0,     0,     0,   318,
                  +   319,   320,   356,  1100,     0,     0,     0,     0,     0,     0,
                  +   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
                  +     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
                  +     0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
                  +     0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
                  +     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
                  +   333,   100,     0,   334,   335,   336,   101,     0,   102,   103,
                  +     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
                  +     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  +     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
                  +   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
                  +     0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
                  +   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  +   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  +   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                  +     0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
                  +   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  +   153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
                  +     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
                  +   349,   350,    89,    90,     0,     0,     0,   351,     0,     0,
                  +   353,   354,   355,     0,     0,     0,  1228,   319,   320,   356,
                  +  1139,     0,     0,     0,     0,     0,     0,     0,  1229,  1230,
                  +  1231,  1232,     0,    91,   325,     0,     0,     0,     0,     0,
                  +   326,     0,     0,     0,     0,     0,   329,     0,   330,     0,
                  +     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
                  +     0,   331,     0,     0,     0,    95,    96,     0,     0,     0,
                  +     0,    97,    98,    99,     0,   332,     0,   333,   100,     0,
                  +     0,     0,   336,   101,     0,   102,   103,     0,     0,     0,
                  +     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
                  +   107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
                  +   339,   340,   111,   112,     0,     0,     0,     0,   342,     0,
                  +     0,     0,  1234,     0,     0,   344,     0,     0,     0,     0,
                  +     0,   113,   114,   115,   345,     0,   117,   118,     0,   119,
                  +   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                  +     0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
                  +   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
                  +     0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
                  +   147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
                  +   346,     0,   156,   157,   158,   159,   160,    89,    90,     0,
                  +   161,     0,   162,   347,   240,  1235,   308,   349,   350,     0,
                  +     0,  1000,   319,   320,  1236,     0,     0,  1237,  1238,  1239,
                  +     0,     0,     0,     0,   187,     0,  1240,  1475,    91,   325,
                  +     0,     0,     0,     0,     0,   326,     0,   188,     0,     0,
                  +     0,   329,   189,   330,     0,     0,     0,     0,   190,   191,
                  +     0,    93,   192,     0,    94,     0,   331,     0,     0,     0,
                  +    95,    96,     0,   193,     0,     0,    97,    98,    99,     0,
                  +   332,   194,   333,   100,   195,  1001,  1002,   336,   101,     0,
                  +   102,   103,     0,     0,     0,     0,     0,     0,     0,   104,
                  +   105,     0,     0,   106,   196,   107,   197,     0,     0,   108,
                  +   109,     0,   198,   199,     0,   339,   340,   111,   112,     0,
                  +     0,     0,     0,   342,     0,     0,     0,     0,     0,     0,
                      344,     0,     0,     0,     0,     0,   113,   114,   115,   345,
                        0,   117,   118,     0,   119,   120,     0,   121,     0,     0,
                      122,   123,   124,   125,   126,     0,   127,   128,     0,     0,
                      129,   130,   131,   132,   133,   134,   135,   136,   137,     0,
                  -     0,   138,     0,   139,   140,     0,   227,   141,   142,     0,
                  +     0,   138,     0,   139,   140,     0,     0,   141,   142,     0,
                      143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
                      151,   152,   153,   154,   155,   346,     0,   156,   157,   158,
                      159,   160,     0,     0,     0,   161,     0,   162,   347,   240,
                  -   348,   308,   349,   350,    89,    90,     0,     0,     0,   351,
                  -     0,     0,   353,   354,   355,     0,     0,     0,   318,   319,
                  -   320,   356,  1099,     0,     0,     0,     0,     0,     0,   226,
                  +  1003,   308,   349,   350,    89,    90,     0,     0,     0,  1004,
                  +     0,     0,  1005,  1006,  1007,   651,     0,     0,   318,   319,
                  +   320,  1008,  1367,     0,     0,     0,     0,     0,     0,   226,
                      321,   322,   323,   324,     0,    91,   325,     0,     0,     0,
                        0,     0,   326,     0,     0,     0,   327,   328,   329,     0,
                  -   330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
                  -     0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
                  +   330,     0,     0,   652,     0,     0,     0,     0,    93,     0,
                  +     0,    94,     0,   331,     0,     0,     0,    95,    96,   653,
                        0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
                      100,     0,   334,   335,   336,   101,     0,   102,   103,     0,
                        0,     0,     0,   337,     0,     0,   104,   105,     0,     0,
                      106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
                  -   338,     0,   339,   340,   111,   112,     0,     0,     0,   341,
                  +   338,     0,   339,   340,   111,   112,     0,   654,     0,   341,
                      342,     0,     0,     0,   343,     0,     0,   344,     0,     0,
                        0,     0,     0,   113,   114,   115,   345,     0,   117,   118,
                        0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                  @@ -1941,149 +2029,174 @@ static const short yytable[] = {   166,
                      154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
                        0,     0,   161,     0,   162,   347,   240,   348,   308,   349,
                      350,    89,    90,     0,     0,     0,   351,     0,     0,   353,
                  -   354,   355,     0,     0,     0,  1227,   319,   320,   356,  1136,
                  -     0,     0,     0,     0,     0,     0,     0,  1228,  1229,  1230,
                  -  1231,     0,    91,   325,     0,     0,     0,     0,     0,   326,
                  -     0,     0,     0,     0,     0,   329,     0,   330,     0,     0,
                  -     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
                  -   331,     0,     0,     0,    95,    96,     0,     0,     0,     0,
                  -    97,    98,    99,     0,   332,     0,   333,   100,     0,     0,
                  -     0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
                  -     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  -     0,     0,     0,   108,   109,     0,     0,     0,     0,   339,
                  -   340,   111,   112,     0,     0,     0,     0,   342,     0,     0,
                  -     0,  1233,     0,     0,   344,     0,     0,     0,     0,     0,
                  +   354,   355,  1088,     0,     0,   318,   319,   320,   356,     0,
                  +     0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
                  +   324,     0,    91,   325,     0,     0,     0,     0,     0,   326,
                  +     0,     0,     0,   327,   328,   329,     0,   330,     0,     0,
                  +   652,     0,     0,     0,     0,    93,     0,     0,    94,     0,
                  +   331,     0,     0,     0,    95,    96,  1089,     0,     0,     0,
                  +    97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
                  +   335,   336,   101,     0,   102,   103,     0,     0,     0,     0,
                  +   337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  +     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
                  +   340,   111,   112,     0,  1090,     0,   341,   342,     0,     0,
                  +     0,   343,     0,     0,   344,     0,     0,     0,     0,     0,
                      113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
                        0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
                      127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
                      135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
                  -     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  +   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                      148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
                  -     0,   156,   157,   158,   159,   160,    89,    90,     0,   161,
                  -     0,   162,   347,   240,  1234,   308,   349,   350,     0,     0,
                  -   999,   319,   320,  1235,     0,     0,  1236,  1237,  1238,     0,
                  -     0,     0,     0,     0,     0,  1239,  1474,    91,   325,     0,
                  -     0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
                  -   329,     0,   330,     0,     0,     0,     0,     0,     0,     0,
                  -    93,     0,     0,    94,     0,   331,     0,     0,     0,    95,
                  -    96,     0,     0,     0,     0,    97,    98,    99,     0,   332,
                  -     0,   333,   100,     0,  1000,  1001,   336,   101,     0,   102,
                  -   103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
                  -     0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
                  -     0,     0,     0,     0,   339,   340,   111,   112,     0,     0,
                  -     0,     0,   342,     0,     0,     0,     0,     0,     0,   344,
                  -     0,     0,     0,     0,     0,   113,   114,   115,   345,     0,
                  -   117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
                  -   123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
                  -   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
                  -   138,     0,   139,   140,     0,     0,   141,   142,     0,   143,
                  -     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
                  -   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
                  -   160,    89,    90,     0,   161,     0,   162,   347,   240,  1002,
                  -   308,   349,   350,     0,     0,     0,   319,   320,  1003,     0,
                  -     0,  1004,  1005,  1006,     0,     0,     0,     0,     0,     0,
                  -  1007,  1366,    91,   568,     0,     0,     0,     0,     0,   569,
                  -     0,     0,     0,     0,     0,     0,     0,   570,     0,     0,
                  +     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  +     0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
                  +     0,     0,     0,   351,     0,     0,   353,   354,   355,  1127,
                  +     0,     0,   318,   319,   320,   356,     0,     0,     0,     0,
                  +     0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
                  +   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                  +   327,   328,   329,     0,   330,     0,     0,   652,     0,     0,
                  +     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                  +     0,    95,    96,  1128,     0,     0,     0,    97,    98,    99,
                  +     0,   332,     0,   333,   100,     0,   334,   335,   336,   101,
                  +     0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
                  +   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  +   108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
                  +     0,  1129,     0,   341,   342,     0,     0,     0,   343,     0,
                  +     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                  +   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  +     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                  +     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  +     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
                  +     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  +     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
                  +   240,   348,   308,   349,   350,    89,    90,     0,     0,     0,
                  +   351,     0,     0,   353,   354,   355,     0,     0,     0,   318,
                  +   319,   320,   356,     0,     0,     0,     0,     0,     0,     0,
                  +   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
                  +     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
                  +     0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
                  +     0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
                  +     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
                  +   333,   100,     0,   334,   335,   336,   101,     0,   102,   103,
                  +     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
                  +     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  +     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
                  +   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
                  +     0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
                  +   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  +   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  +   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                  +     0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
                  +   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  +   153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
                  +     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
                  +   349,   350,     0,     0,     0,     0,     0,   351,   352,     0,
                  +   353,   354,   355,     0,    89,    90,     0,   733,     0,   356,
                  +   734,     0,     0,     0,     0,     0,     0,     0,   318,   319,
                  +   320,     0,     0,     0,     0,     0,     0,     0,     0,   226,
                  +   321,   322,   323,   324,     0,    91,   325,     0,     0,     0,
                  +     0,     0,   326,     0,     0,     0,   327,   328,   329,     0,
                  +   330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
                  +     0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
                  +     0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
                  +   100,     0,   334,     0,   336,   101,     0,   102,   103,     0,
                  +     0,     0,     0,   337,     0,     0,   104,   105,     0,     0,
                  +   106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
                  +   338,     0,   339,   340,   111,   112,     0,     0,     0,   341,
                  +   342,     0,     0,     0,   343,     0,     0,   344,     0,     0,
                  +     0,     0,     0,   113,   114,   115,   345,     0,   117,   118,
                  +     0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                  +   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
                  +   132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
                  +   139,   140,     0,   227,   141,   142,     0,   143,     0,   144,
                  +   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
                  +   154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
                  +     0,     0,   161,     0,   162,   347,   240,   348,   308,   349,
                  +   350,    89,    90,     0,   737,     0,   351,   738,     0,   353,
                  +   354,   355,     0,     0,     0,   318,   319,   320,   735,     0,
                  +     0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
                  +   324,     0,    91,   325,     0,     0,     0,     0,     0,   326,
                  +     0,     0,     0,   327,   328,   329,     0,   330,     0,     0,
                        0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
                  -     0,     0,     0,     0,    95,    96,     0,     0,     0,     0,
                  -    97,    98,    99,     0,   332,     0,   333,   100,     0,     0,
                  -     0,   571,   101,     0,   102,   103,     0,     0,     0,     0,
                  -     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  -     0,     0,     0,   108,   109,     0,     0,     0,     0,   110,
                  -     0,   111,   112,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,   344,     0,     0,     0,     0,     0,
                  -   113,   114,   115,   116,     0,   117,   118,     0,   119,   120,
                  +   331,     0,     0,     0,    95,    96,     0,     0,     0,     0,
                  +    97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
                  +     0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
                  +   337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  +     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
                  +   340,   111,   112,     0,     0,     0,   341,   342,     0,     0,
                  +     0,   343,     0,     0,   344,     0,     0,     0,     0,     0,
                  +   113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
                        0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
                      127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
                      135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
                  -     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  -   148,   149,   150,     0,   151,   152,   153,   154,   155,    89,
                  -    90,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  -   650,   162,   163,   318,   319,   320,     0,     0,     0,     0,
                  -     0,     0,     0,     0,   226,   321,   322,   323,   324,     0,
                  -    91,   325,     0,     0,     0,     0,   572,   326,     0,     0,
                  -     0,   327,   328,   329,     0,   330,     0,     0,   651,     0,
                  -     0,     0,     0,    93,     0,     0,    94,     0,   331,     0,
                  -     0,     0,    95,    96,   652,     0,     0,     0,    97,    98,
                  -    99,     0,   332,     0,   333,   100,     0,   334,   335,   336,
                  -   101,     0,   102,   103,     0,     0,     0,     0,   337,     0,
                  -     0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
                  -     0,   108,   109,     0,     0,   338,     0,   339,   340,   111,
                  -   112,     0,   653,     0,   341,   342,     0,     0,     0,   343,
                  -     0,     0,   344,     0,     0,     0,     0,     0,   113,   114,
                  -   115,   345,     0,   117,   118,     0,   119,   120,     0,   121,
                  -     0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
                  -     0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
                  -   137,     0,     0,   138,     0,   139,   140,     0,   227,   141,
                  -   142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
                  -   150,     0,   151,   152,   153,   154,   155,   346,     0,   156,
                  -   157,   158,   159,   160,     0,     0,     0,   161,     0,   162,
                  -   347,   240,   348,   308,   349,   350,    89,    90,     0,     0,
                  -     0,   351,     0,     0,   353,   354,   355,  1087,     0,     0,
                  -   318,   319,   320,   356,     0,     0,     0,     0,     0,     0,
                  -     0,   226,   321,   322,   323,   324,     0,    91,   325,     0,
                  -     0,     0,     0,     0,   326,     0,     0,     0,   327,   328,
                  -   329,     0,   330,     0,     0,   651,     0,     0,     0,     0,
                  -    93,     0,     0,    94,     0,   331,     0,     0,     0,    95,
                  -    96,  1088,     0,     0,     0,    97,    98,    99,     0,   332,
                  -     0,   333,   100,     0,   334,   335,   336,   101,     0,   102,
                  -   103,     0,     0,     0,     0,   337,     0,     0,   104,   105,
                  -     0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
                  -     0,     0,   338,     0,   339,   340,   111,   112,     0,  1089,
                  -     0,   341,   342,     0,     0,     0,   343,     0,     0,   344,
                  -     0,     0,     0,     0,     0,   113,   114,   115,   345,     0,
                  -   117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
                  -   123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
                  -   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
                  -   138,     0,   139,   140,     0,   227,   141,   142,     0,   143,
                  -     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
                  -   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
                  -   160,     0,     0,     0,   161,     0,   162,   347,   240,   348,
                  -   308,   349,   350,    89,    90,     0,     0,     0,   351,     0,
                  -     0,   353,   354,   355,  1124,     0,     0,   318,   319,   320,
                  -   356,     0,     0,     0,     0,     0,     0,     0,   226,   321,
                  -   322,   323,   324,     0,    91,   325,     0,     0,     0,     0,
                  -     0,   326,     0,     0,     0,   327,   328,   329,     0,   330,
                  -     0,     0,   651,     0,     0,     0,     0,    93,     0,     0,
                  -    94,     0,   331,     0,     0,     0,    95,    96,  1125,     0,
                  -     0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
                  -     0,   334,   335,   336,   101,     0,   102,   103,     0,     0,
                  -     0,     0,   337,     0,     0,   104,   105,     0,     0,   106,
                  -     0,   107,     0,     0,     0,   108,   109,     0,     0,   338,
                  -     0,   339,   340,   111,   112,     0,  1126,     0,   341,   342,
                  -     0,     0,     0,   343,     0,     0,   344,     0,     0,     0,
                  -     0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
                  -   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  -   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  -   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  -   140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
                  -   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  -   155,   346,     0,   156,   157,   158,   159,   160,     0,     0,
                  -     0,   161,     0,   162,   347,   240,   348,   308,   349,   350,
                  -    89,    90,     0,     0,     0,   351,     0,     0,   353,   354,
                  -   355,     0,     0,     0,   318,   319,   320,   356,     0,     0,
                  -     0,     0,     0,     0,     0,   226,   321,   322,   323,   324,
                  -     0,    91,   325,     0,     0,     0,     0,     0,   326,     0,
                  -     0,     0,   327,   328,   329,     0,   330,     0,     0,     0,
                  -     0,     0,     0,     0,    93,     0,     0,    94,     0,   331,
                  -     0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
                  -    98,    99,     0,   332,     0,   333,   100,     0,   334,   335,
                  -   336,   101,     0,   102,   103,     0,     0,     0,     0,   337,
                  -     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
                  -     0,     0,   108,   109,     0,     0,   338,     0,   339,   340,
                  -   111,   112,     0,     0,     0,   341,   342,     0,     0,     0,
                  -   343,     0,     0,   344,     0,     0,     0,     0,     0,   113,
                  -   114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
                  -   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
                  -   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
                  -   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
                  -   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
                  -   149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
                  -   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
                  -   162,   347,   240,   348,   308,   349,   350,     0,     0,     0,
                  -     0,     0,   351,   352,     0,   353,   354,   355,     0,    89,
                  -    90,     0,   731,     0,   356,   732,     0,     0,     0,     0,
                  -     0,     0,     0,   318,   319,   320,     0,     0,     0,     0,
                  +   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  +   148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
                  +     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  +     0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
                  +     0,   741,     0,   351,   742,     0,   353,   354,   355,     0,
                  +     0,     0,   318,   319,   320,   739,     0,     0,     0,     0,
                  +     0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
                  +   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                  +   327,   328,   329,     0,   330,     0,     0,     0,     0,     0,
                  +     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                  +     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  +     0,   332,     0,   333,   100,     0,   334,     0,   336,   101,
                  +     0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
                  +   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  +   108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
                  +     0,     0,     0,   341,   342,     0,     0,     0,   343,     0,
                  +     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                  +   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  +     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                  +     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  +     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
                  +     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  +     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
                  +   240,   348,   308,   349,   350,    89,    90,     0,   745,     0,
                  +   351,   746,     0,   353,   354,   355,     0,     0,     0,   318,
                  +   319,   320,   743,     0,     0,     0,     0,     0,     0,     0,
                  +   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
                  +     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
                  +     0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
                  +     0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
                  +     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
                  +   333,   100,     0,   334,     0,   336,   101,     0,   102,   103,
                  +     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
                  +     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  +     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
                  +   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
                  +     0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
                  +   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  +   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  +   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                  +     0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
                  +   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  +   153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
                  +     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
                  +   349,   350,    89,    90,     0,   749,     0,   351,   750,     0,
                  +   353,   354,   355,     0,     0,     0,   318,   319,   320,   747,
                  +     0,     0,     0,     0,     0,     0,     0,   226,   321,   322,
                  +   323,   324,     0,    91,   325,     0,     0,     0,     0,     0,
                  +   326,     0,     0,     0,   327,   328,   329,     0,   330,     0,
                  +     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
                  +     0,   331,     0,     0,     0,    95,    96,     0,     0,     0,
                  +     0,    97,    98,    99,     0,   332,     0,   333,   100,     0,
                  +   334,     0,   336,   101,     0,   102,   103,     0,     0,     0,
                  +     0,   337,     0,     0,   104,   105,     0,     0,   106,     0,
                  +   107,     0,     0,     0,   108,   109,     0,     0,   338,     0,
                  +   339,   340,   111,   112,     0,     0,     0,   341,   342,     0,
                  +     0,     0,   343,     0,     0,   344,     0,     0,     0,     0,
                  +     0,   113,   114,   115,   345,     0,   117,   118,     0,   119,
                  +   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                  +     0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
                  +   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
                  +     0,   227,   141,   142,     0,   143,     0,   144,   145,   146,
                  +   147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
                  +   346,     0,   156,   157,   158,   159,   160,     0,     0,     0,
                  +   161,     0,   162,   347,   240,   348,   308,   349,   350,    89,
                  +    90,     0,   753,     0,   351,   754,     0,   353,   354,   355,
                  +     0,     0,     0,   318,   319,   320,   751,     0,     0,     0,
                        0,     0,     0,     0,   226,   321,   322,   323,   324,     0,
                       91,   325,     0,     0,     0,     0,     0,   326,     0,     0,
                        0,   327,   328,   329,     0,   330,     0,     0,     0,     0,
                  @@ -2102,9 +2215,9 @@ static const short yytable[] = {   166,
                      142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
                      150,     0,   151,   152,   153,   154,   155,   346,     0,   156,
                      157,   158,   159,   160,     0,     0,     0,   161,     0,   162,
                  -   347,   240,   348,   308,   349,   350,    89,    90,     0,   735,
                  -     0,   351,   736,     0,   353,   354,   355,     0,     0,     0,
                  -   318,   319,   320,   733,     0,     0,     0,     0,     0,     0,
                  +   347,   240,   348,   308,   349,   350,    89,    90,     0,   757,
                  +     0,   351,   758,     0,   353,   354,   355,     0,     0,     0,
                  +   318,   319,   320,   755,     0,     0,     0,     0,     0,     0,
                        0,   226,   321,   322,   323,   324,     0,    91,   325,     0,
                        0,     0,     0,     0,   326,     0,     0,     0,   327,   328,
                      329,     0,   330,     0,     0,     0,     0,     0,     0,     0,
                  @@ -2123,15 +2236,15 @@ static const short yytable[] = {   166,
                        0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
                      152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
                      160,     0,     0,     0,   161,     0,   162,   347,   240,   348,
                  -   308,   349,   350,    89,    90,     0,   739,     0,   351,   740,
                  +   308,   349,   350,    89,    90,     0,     0,     0,   351,     0,
                        0,   353,   354,   355,     0,     0,     0,   318,   319,   320,
                  -   737,     0,     0,     0,     0,     0,     0,     0,   226,   321,
                  +   759,     0,     0,     0,     0,     0,     0,     0,   226,   321,
                      322,   323,   324,     0,    91,   325,     0,     0,     0,     0,
                        0,   326,     0,     0,     0,   327,   328,   329,     0,   330,
                  -     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                  +     0,     0,   652,     0,     0,     0,     0,    93,     0,     0,
                       94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
                        0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
                  -     0,   334,     0,   336,   101,     0,   102,   103,     0,     0,
                  +     0,   334,   335,   336,   101,     0,   102,   103,     0,     0,
                        0,     0,   337,     0,     0,   104,   105,     0,     0,   106,
                        0,   107,     0,     0,     0,   108,   109,     0,     0,   338,
                        0,   339,   340,   111,   112,     0,     0,     0,   341,   342,
                  @@ -2144,17 +2257,17 @@ static const short yytable[] = {   166,
                      146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                      155,   346,     0,   156,   157,   158,   159,   160,     0,     0,
                        0,   161,     0,   162,   347,   240,   348,   308,   349,   350,
                  -    89,    90,     0,   743,     0,   351,   744,     0,   353,   354,
                  -   355,     0,     0,     0,   318,   319,   320,   741,     0,     0,
                  +    89,    90,     0,     0,     0,   351,     0,     0,   353,   354,
                  +   355,     0,     0,     0,   318,   319,   320,   356,     0,     0,
                        0,     0,     0,     0,     0,   226,   321,   322,   323,   324,
                        0,    91,   325,     0,     0,     0,     0,     0,   326,     0,
                        0,     0,   327,   328,   329,     0,   330,     0,     0,     0,
                        0,     0,     0,     0,    93,     0,     0,    94,     0,   331,
                        0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
                  -    98,    99,     0,   332,     0,   333,   100,     0,   334,     0,
                  +    98,    99,     0,   332,     0,   333,   100,     0,   334,   335,
                      336,   101,     0,   102,   103,     0,     0,     0,     0,   337,
                        0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
                  -     0,     0,   108,   109,     0,     0,   338,     0,   339,   340,
                  +     0,     0,   108,   109,   618,     0,   338,     0,   339,   340,
                      111,   112,     0,     0,     0,   341,   342,     0,     0,     0,
                      343,     0,     0,   344,     0,     0,     0,     0,     0,   113,
                      114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
                  @@ -2165,14 +2278,14 @@ static const short yytable[] = {   166,
                      149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
                      156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
                      162,   347,   240,   348,   308,   349,   350,    89,    90,     0,
                  -   747,     0,   351,   748,     0,   353,   354,   355,     0,     0,
                  -     0,   318,   319,   320,   745,     0,     0,     0,     0,     0,
                  +     0,     0,   351,     0,     0,   353,   354,   355,     0,     0,
                  +     0,   318,   319,   320,   356,     0,     0,     0,     0,     0,
                        0,     0,   226,   321,   322,   323,   324,     0,    91,   325,
                        0,     0,     0,     0,     0,   326,     0,     0,     0,   327,
                      328,   329,     0,   330,     0,     0,     0,     0,     0,     0,
                        0,    93,     0,     0,    94,     0,   331,     0,     0,     0,
                       95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
                  -   332,     0,   333,   100,     0,   334,     0,   336,   101,     0,
                  +   332,     0,   333,   100,     0,   334,   335,   336,   101,     0,
                      102,   103,     0,     0,     0,     0,   337,     0,     0,   104,
                      105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
                      109,     0,     0,   338,     0,   339,   340,   111,   112,     0,
                  @@ -2185,15 +2298,15 @@ static const short yytable[] = {   166,
                      143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
                      151,   152,   153,   154,   155,   346,     0,   156,   157,   158,
                      159,   160,     0,     0,     0,   161,     0,   162,   347,   240,
                  -   348,   308,   349,   350,    89,    90,     0,   751,     0,   351,
                  -   752,     0,   353,   354,   355,     0,     0,     0,   318,   319,
                  -   320,   749,     0,     0,     0,     0,     0,     0,     0,   226,
                  +   348,   308,   349,   350,    89,    90,     0,   729,     0,   351,
                  +   730,     0,   353,   354,   355,     0,     0,     0,   318,   319,
                  +   320,   356,     0,     0,     0,     0,     0,     0,     0,   226,
                      321,   322,   323,   324,     0,    91,   325,     0,     0,     0,
                        0,     0,   326,     0,     0,     0,   327,   328,   329,     0,
                      330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
                        0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
                        0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
                  -   100,     0,   334,     0,   336,   101,     0,   102,   103,     0,
                  +   100,     0,     0,     0,   336,   101,     0,   102,   103,     0,
                        0,     0,     0,   337,     0,     0,   104,   105,     0,     0,
                      106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
                      338,     0,   339,   340,   111,   112,     0,     0,     0,   341,
                  @@ -2205,9 +2318,9 @@ static const short yytable[] = {   166,
                      139,   140,     0,   227,   141,   142,     0,   143,     0,   144,
                      145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
                      154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
                  -     0,     0,   161,     0,   162,   347,   240,   348,   308,   349,
                  -   350,    89,    90,     0,   755,     0,   351,   756,     0,   353,
                  -   354,   355,     0,     0,     0,   318,   319,   320,   753,     0,
                  +     0,     0,   161,     0,   162,   347,   240,-32768,   308,   349,
                  +   350,    89,    90,     0,     0,     0,   351,     0,     0,   353,
                  +   354,   355,     0,     0,     0,   318,   319,   320,   731,     0,
                        0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
                      324,     0,    91,   325,     0,     0,     0,     0,     0,   326,
                        0,     0,     0,   327,   328,   329,     0,   330,     0,     0,
                  @@ -2216,7 +2329,7 @@ static const short yytable[] = {   166,
                       97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
                        0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
                      337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  -     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
                  +     0,     0,     0,   108,   109,   618,     0,   338,     0,   339,
                      340,   111,   112,     0,     0,     0,   341,   342,     0,     0,
                        0,   343,     0,     0,   344,     0,     0,     0,     0,     0,
                      113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
                  @@ -2228,13 +2341,13 @@ static const short yytable[] = {   166,
                        0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                        0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
                        0,     0,     0,   351,     0,     0,   353,   354,   355,     0,
                  -     0,     0,   318,   319,   320,   757,     0,     0,     0,     0,
                  +     0,     0,   318,   319,   320,   356,     0,     0,     0,     0,
                        0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
                      325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                  -   327,   328,   329,     0,   330,     0,     0,   651,     0,     0,
                  +   327,   328,   329,     0,   330,     0,     0,     0,     0,     0,
                        0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                        0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  -     0,   332,     0,   333,   100,     0,   334,   335,   336,   101,
                  +     0,   332,     0,   333,   100,     0,   334,     0,   336,   101,
                        0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
                      104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                      108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
                  @@ -2248,18 +2361,18 @@ static const short yytable[] = {   166,
                        0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                      158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
                      240,   348,   308,   349,   350,    89,    90,     0,     0,     0,
                  -   351,     0,     0,   353,   354,   355,     0,     0,     0,   318,
                  +   351,     0,     0,   353,   354,   355,     0,     0,     0,   699,
                      319,   320,   356,     0,     0,     0,     0,     0,     0,     0,
                  -   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
                  -     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
                  +   226,   700,   701,   702,   703,     0,    91,   325,     0,     0,
                  +     0,     0,     0,   326,     0,     0,     0,     0,     0,   329,
                        0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
                        0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
                        0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
                  -   333,   100,     0,   334,   335,   336,   101,     0,   102,   103,
                  -     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
                  -     0,   106,     0,   107,     0,     0,     0,   108,   109,   617,
                  -     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
                  -   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
                  +   333,   100,     0,     0,     0,   336,   101,     0,   102,   103,
                  +     0,     0,     0,     0,   704,     0,     0,   104,   105,     0,
                  +     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  +     0,   705,     0,   339,   340,   111,   112,     0,     0,     0,
                  +   706,   342,     0,     0,     0,   707,     0,     0,   344,     0,
                        0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
                      118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                      124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  @@ -2267,20 +2380,20 @@ static const short yytable[] = {   166,
                        0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
                      144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                      153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
                  -     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
                  -   349,   350,    89,    90,     0,     0,     0,   351,     0,     0,
                  -   353,   354,   355,     0,     0,     0,   318,   319,   320,   356,
                  -     0,     0,     0,     0,     0,     0,     0,   226,   321,   322,
                  -   323,   324,     0,    91,   325,     0,     0,     0,     0,     0,
                  -   326,     0,     0,     0,   327,   328,   329,     0,   330,     0,
                  +     0,     0,     0,   161,     0,   162,   347,   240,   708,   308,
                  +   349,   350,    89,    90,     0,     0,     0,   709,     0,     0,
                  +   710,   711,   712,     0,     0,     0,   699,   319,   320,   713,
                  +     0,     0,     0,     0,     0,     0,     0,   226,   700,   701,
                  +   702,   703,     0,    91,   325,     0,     0,     0,     0,     0,
                  +   326,     0,     0,     0,     0,     0,   329,     0,   330,     0,
                        0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
                        0,   331,     0,     0,     0,    95,    96,     0,     0,     0,
                        0,    97,    98,    99,     0,   332,     0,   333,   100,     0,
                  -   334,   335,   336,   101,     0,   102,   103,     0,     0,     0,
                  -     0,   337,     0,     0,   104,   105,     0,     0,   106,     0,
                  -   107,     0,     0,     0,   108,   109,     0,     0,   338,     0,
                  -   339,   340,   111,   112,     0,     0,     0,   341,   342,     0,
                  -     0,     0,   343,     0,     0,   344,     0,     0,     0,     0,
                  +     0,     0,   336,   101,     0,   102,   103,     0,     0,     0,
                  +     0,   704,     0,     0,   104,   105,     0,     0,   106,     0,
                  +   107,     0,     0,     0,   108,   109,     0,     0,   705,     0,
                  +   339,   340,   111,   112,     0,     0,     0,   706,   342,     0,
                  +     0,     0,   707,     0,     0,   344,     0,     0,     0,     0,
                        0,   113,   114,   115,   345,     0,   117,   118,     0,   119,
                      120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                        0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
                  @@ -2288,183 +2401,99 @@ static const short yytable[] = {   166,
                        0,   227,   141,   142,     0,   143,     0,   144,   145,   146,
                      147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
                      346,     0,   156,   157,   158,   159,   160,     0,     0,     0,
                  -   161,     0,   162,   347,   240,   348,   308,   349,   350,    89,
                  -    90,     0,   727,     0,   351,   728,     0,   353,   354,   355,
                  -     0,     0,     0,   318,   319,   320,   356,     0,     0,     0,
                  -     0,     0,     0,     0,   226,   321,   322,   323,   324,     0,
                  +   161,     0,   162,   347,   240,-32768,   308,   349,   350,    89,
                  +    90,     0,     0,     0,   709,     0,     0,   710,   711,   712,
                  +     0,     0,     0,  1228,   319,   320,   713,     0,     0,     0,
                  +     0,     0,     0,     0,     0,  1229,  1230,  1231,  1232,     0,
                       91,   325,     0,     0,     0,     0,     0,   326,     0,     0,
                  -     0,   327,   328,   329,     0,   330,     0,     0,     0,     0,
                  +     0,     0,     0,   329,     0,   330,     0,     0,     0,     0,
                        0,     0,     0,    93,     0,     0,    94,     0,   331,     0,
                        0,     0,    95,    96,     0,     0,     0,     0,    97,    98,
                  -    99,     0,   332,     0,   333,   100,     0,     0,     0,   336,
                  -   101,     0,   102,   103,     0,     0,     0,     0,   337,     0,
                  +    99,     0,   332,     0,   333,   100,     0,     0,  1233,   336,
                  +   101,     0,   102,   103,     0,     0,     0,     0,     0,     0,
                        0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
                  -     0,   108,   109,     0,     0,   338,     0,   339,   340,   111,
                  -   112,     0,     0,     0,   341,   342,     0,     0,     0,   343,
                  +     0,   108,   109,     0,     0,     0,     0,   339,   340,   111,
                  +   112,     0,     0,     0,     0,   342,     0,     0,     0,  1234,
                        0,     0,   344,     0,     0,     0,     0,     0,   113,   114,
                      115,   345,     0,   117,   118,     0,   119,   120,     0,   121,
                        0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
                        0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
                  -   137,     0,     0,   138,     0,   139,   140,     0,   227,   141,
                  +   137,     0,     0,   138,     0,   139,   140,     0,     0,   141,
                      142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
                      150,     0,   151,   152,   153,   154,   155,   346,     0,   156,
                      157,   158,   159,   160,     0,     0,     0,   161,     0,   162,
                  -   347,   240,-32768,   308,   349,   350,    89,    90,     0,     0,
                  -     0,   351,     0,     0,   353,   354,   355,     0,     0,     0,
                  -   318,   319,   320,   729,     0,     0,     0,     0,     0,     0,
                  -     0,   226,   321,   322,   323,   324,     0,    91,   325,     0,
                  -     0,     0,     0,     0,   326,     0,     0,     0,   327,   328,
                  +   347,   240,  1235,   308,   349,   350,    89,    90,     0,     0,
                  +     0,  1236,     0,     0,  1237,  1238,  1239,     0,     0,     0,
                  +  1228,   319,   320,  1240,     0,     0,     0,     0,     0,     0,
                  +     0,     0,  1229,  1230,  1231,  1232,     0,    91,   325,     0,
                  +     0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
                      329,     0,   330,     0,     0,     0,     0,     0,     0,     0,
                       93,     0,     0,    94,     0,   331,     0,     0,     0,    95,
                       96,     0,     0,     0,     0,    97,    98,    99,     0,   332,
                  -     0,   333,   100,     0,   334,     0,   336,   101,     0,   102,
                  -   103,     0,     0,     0,     0,   337,     0,     0,   104,   105,
                  +     0,   333,   100,     0,     0,     0,   336,   101,     0,   102,
                  +   103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
                        0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
                  -   617,     0,   338,     0,   339,   340,   111,   112,     0,     0,
                  -     0,   341,   342,     0,     0,     0,   343,     0,     0,   344,
                  +     0,     0,     0,     0,   339,   340,   111,   112,     0,     0,
                  +     0,     0,   342,     0,     0,     0,  1234,     0,     0,   344,
                        0,     0,     0,     0,     0,   113,   114,   115,   345,     0,
                      117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
                      123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
                  -   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
                  -   138,     0,   139,   140,     0,   227,   141,   142,     0,   143,
                  -     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
                  -   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
                  -   160,     0,     0,     0,   161,     0,   162,   347,   240,   348,
                  -   308,   349,   350,    89,    90,     0,     0,     0,   351,     0,
                  -     0,   353,   354,   355,     0,     0,     0,   318,   319,   320,
                  -   356,     0,     0,     0,     0,     0,     0,     0,   226,   321,
                  -   322,   323,   324,     0,    91,   325,     0,     0,     0,     0,
                  -     0,   326,     0,     0,     0,   327,   328,   329,     0,   330,
                  -     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                  -    94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
                  -     0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
                  -     0,   334,     0,   336,   101,     0,   102,   103,     0,     0,
                  -     0,     0,   337,     0,     0,   104,   105,     0,     0,   106,
                  -     0,   107,     0,     0,     0,   108,   109,     0,     0,   338,
                  -     0,   339,   340,   111,   112,     0,     0,     0,   341,   342,
                  -     0,     0,     0,   343,     0,     0,   344,     0,     0,     0,
                  -     0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
                  -   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  -   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  -   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  -   140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
                  -   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  -   155,   346,     0,   156,   157,   158,   159,   160,     0,     0,
                  -     0,   161,     0,   162,   347,   240,   348,   308,   349,   350,
                  -    89,    90,     0,     0,     0,   351,     0,     0,   353,   354,
                  -   355,     0,     0,     0,   697,   319,   320,   356,     0,     0,
                  -     0,     0,     0,     0,     0,   226,   698,   699,   700,   701,
                  -     0,    91,   325,     0,     0,     0,     0,     0,   326,     0,
                  -     0,     0,     0,     0,   329,     0,   330,     0,     0,     0,
                  -     0,     0,     0,     0,    93,     0,     0,    94,     0,   331,
                  -     0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
                  -    98,    99,     0,   332,     0,   333,   100,     0,     0,     0,
                  -   336,   101,     0,   102,   103,     0,     0,     0,     0,   702,
                  -     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
                  -     0,     0,   108,   109,     0,     0,   703,     0,   339,   340,
                  -   111,   112,     0,     0,     0,   704,   342,     0,     0,     0,
                  -   705,     0,     0,   344,     0,     0,     0,     0,     0,   113,
                  -   114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
                  -   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
                  -   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
                  -   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
                  -   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
                  -   149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
                  -   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
                  -   162,   347,   240,   706,   308,   349,   350,    89,    90,     0,
                  -     0,     0,   707,     0,     0,   708,   709,   710,     0,     0,
                  -     0,   697,   319,   320,   711,     0,     0,     0,     0,     0,
                  -     0,     0,   226,   698,   699,   700,   701,     0,    91,   325,
                  -     0,     0,     0,     0,     0,   326,     0,     0,     0,     0,
                  -     0,   329,     0,   330,     0,     0,     0,     0,     0,     0,
                  -     0,    93,     0,     0,    94,     0,   331,     0,     0,     0,
                  -    95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
                  -   332,     0,   333,   100,     0,     0,     0,   336,   101,     0,
                  -   102,   103,     0,     0,     0,     0,   702,     0,     0,   104,
                  -   105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
                  -   109,     0,     0,   703,     0,   339,   340,   111,   112,     0,
                  -     0,     0,   704,   342,     0,     0,     0,   705,     0,     0,
                  -   344,     0,     0,     0,     0,     0,   113,   114,   115,   345,
                  -     0,   117,   118,     0,   119,   120,     0,   121,     0,     0,
                  -   122,   123,   124,   125,   126,     0,   127,   128,     0,     0,
                  -   129,   130,   131,   132,   133,   134,   135,   136,   137,     0,
                  -     0,   138,     0,   139,   140,     0,   227,   141,   142,     0,
                  -   143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
                  -   151,   152,   153,   154,   155,   346,     0,   156,   157,   158,
                  -   159,   160,     0,     0,     0,   161,     0,   162,   347,   240,
                  --32768,   308,   349,   350,    89,    90,     0,     0,     0,   707,
                  -     0,     0,   708,   709,   710,     0,     0,     0,  1227,   319,
                  -   320,   711,     0,     0,     0,     0,     0,     0,     0,     0,
                  -  1228,  1229,  1230,  1231,     0,    91,   325,     0,     0,     0,
                  -     0,     0,   326,     0,     0,     0,     0,     0,   329,     0,
                  -   330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
                  -     0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
                  -     0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
                  -   100,     0,     0,  1232,   336,   101,     0,   102,   103,     0,
                  -     0,     0,     0,     0,     0,     0,   104,   105,     0,     0,
                  -   106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
                  -     0,     0,   339,   340,   111,   112,     0,     0,     0,     0,
                  -   342,     0,     0,     0,  1233,     0,     0,   344,     0,     0,
                  -     0,     0,     0,   113,   114,   115,   345,     0,   117,   118,
                  -     0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                  -   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
                  -   132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
                  -   139,   140,     0,     0,   141,   142,     0,   143,     0,   144,
                  -   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
                  -   154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
                  -     0,     0,   161,     0,   162,   347,   240,  1234,   308,   349,
                  -   350,    89,    90,     0,     0,     0,  1235,     0,     0,  1236,
                  -  1237,  1238,     0,     0,     0,  1227,   319,   320,  1239,     0,
                  -     0,     0,     0,     0,     0,     0,     0,  1228,  1229,  1230,
                  -  1231,     0,    91,   325,     0,     0,     0,     0,     0,   326,
                  -     0,     0,     0,     0,     0,   329,     0,   330,     0,     0,
                  -     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
                  -   331,     0,     0,     0,    95,    96,     0,     0,     0,     0,
                  -    97,    98,    99,     0,   332,     0,   333,   100,     0,     0,
                  -     0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
                  -     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  -     0,     0,     0,   108,   109,     0,     0,     0,     0,   339,
                  -   340,   111,   112,     0,     0,     0,     0,   342,     0,     0,
                  -     0,  1233,     0,     0,   344,     0,     0,     0,     0,     0,
                  -   113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
                  -     0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
                  -   127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
                  -   135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
                  -     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  -   148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
                  -     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  -     0,   162,   347,   240,  1234,   308,   349,   350,    89,    90,
                  -     0,     0,     0,  1235,     0,     0,  1236,  1237,  1238,     0,
                  -     0,     0,  1227,   319,   320,  1239,     0,     0,     0,     0,
                  -     0,     0,     0,     0,  1228,  1229,  1230,  1231,     0,    91,
                  +   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
                  +   138,     0,   139,   140,     0,     0,   141,   142,     0,   143,
                  +     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
                  +   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
                  +   160,     0,     0,     0,   161,     0,   162,   347,   240,  1235,
                  +   308,   349,   350,    89,    90,     0,     0,     0,  1236,     0,
                  +     0,  1237,  1238,  1239,     0,     0,     0,  1228,   319,   320,
                  +  1240,     0,     0,     0,     0,     0,     0,     0,     0,  1229,
                  +  1230,  1231,  1232,     0,    91,   325,     0,     0,     0,     0,
                  +     0,   326,     0,     0,     0,     0,     0,   329,     0,   330,
                  +     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                  +    94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
                  +     0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
                  +     0,     0,     0,   336,   101,     0,   102,   103,     0,     0,
                  +     0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
                  +     0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
                  +     0,   339,   340,   111,   112,     0,     0,     0,     0,   342,
                  +     0,     0,     0,  1234,     0,     0,   344,     0,     0,     0,
                  +     0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
                  +   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  +   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  +   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  +   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
                  +   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  +   155,   346,     0,   156,   157,   158,   159,   160,    89,    90,
                  +     0,   161,     0,   162,   347,   240,-32768,   308,   349,   350,
                  +     0,     0,   633,   319,   320,  1236,     0,     0,  1237,  1238,
                  +  1239,     0,     0,   226,     0,     0,     0,  1240,     0,    91,
                      325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                        0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
                        0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                        0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                        0,   332,     0,   333,   100,     0,     0,     0,   336,   101,
                  -     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
                  +     0,   102,   103,     0,     0,     0,     0,   634,     0,     0,
                      104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  -   108,   109,     0,     0,     0,     0,   339,   340,   111,   112,
                  -     0,     0,     0,     0,   342,     0,     0,     0,  1233,     0,
                  +   108,   109,     0,     0,   635,     0,   339,   340,   111,   112,
                  +     0,     0,     0,   636,   342,     0,     0,     0,     0,     0,
                        0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                      345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                        0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                        0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  -     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
                  +     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
                        0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                        0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                      158,   159,   160,    89,    90,     0,   161,     0,   162,   347,
                  -   240,-32768,   308,   349,   350,     0,     0,   632,   319,   320,
                  -  1235,     0,     0,  1236,  1237,  1238,     0,     0,   226,     0,
                  -     0,     0,  1239,     0,    91,   325,     0,     0,     0,     0,
                  +   240,   637,   308,   349,   350,     0,     0,   633,   319,   320,
                  +   638,     0,     0,   639,     0,     0,     0,     0,   226,     0,
                  +     0,     0,   640,     0,    91,   325,     0,     0,     0,     0,
                        0,   326,     0,     0,     0,     0,     0,   329,     0,   330,
                        0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                       94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
                        0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
                        0,     0,     0,   336,   101,     0,   102,   103,     0,     0,
                  -     0,     0,   633,     0,     0,   104,   105,     0,     0,   106,
                  -     0,   107,     0,     0,     0,   108,   109,     0,     0,   634,
                  -     0,   339,   340,   111,   112,     0,     0,     0,   635,   342,
                  +     0,     0,   634,     0,     0,   104,   105,     0,     0,   106,
                  +     0,   107,     0,     0,     0,   108,   109,     0,     0,   635,
                  +     0,   339,   340,   111,   112,     0,     0,     0,   636,   342,
                        0,     0,     0,     0,     0,     0,   344,     0,     0,     0,
                        0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
                      119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  @@ -2473,34 +2502,34 @@ static const short yytable[] = {   166,
                      140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
                      146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                      155,   346,     0,   156,   157,   158,   159,   160,    89,    90,
                  -     0,   161,     0,   162,   347,   240,   636,   308,   349,   350,
                  -     0,     0,   632,   319,   320,   637,     0,     0,   638,     0,
                  -     0,     0,     0,   226,     0,     0,     0,   639,     0,    91,
                  +     0,   161,     0,   162,   347,   240,-32768,   308,   349,   350,
                  +     0,     0,  1000,   319,   320,   638,     0,     0,   639,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   640,     0,    91,
                      325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                        0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
                        0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                        0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  -     0,   332,     0,   333,   100,     0,     0,     0,   336,   101,
                  -     0,   102,   103,     0,     0,     0,     0,   633,     0,     0,
                  +     0,   332,     0,   333,   100,     0,  1001,  1002,   336,   101,
                  +     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
                      104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  -   108,   109,     0,     0,   634,     0,   339,   340,   111,   112,
                  -     0,     0,     0,   635,   342,     0,     0,     0,     0,     0,
                  +   108,   109,     0,     0,     0,     0,   339,   340,   111,   112,
                  +     0,     0,     0,     0,   342,     0,     0,     0,     0,     0,
                        0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                      345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                        0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                        0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  -     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
                  +     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
                        0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                        0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                      158,   159,   160,    89,    90,     0,   161,     0,   162,   347,
                  -   240,-32768,   308,   349,   350,     0,     0,   999,   319,   320,
                  -   637,     0,     0,   638,     0,     0,     0,     0,     0,     0,
                  -     0,     0,   639,     0,    91,   325,     0,     0,     0,     0,
                  +   240,  1003,   308,   349,   350,     0,     0,  1000,   319,   320,
                  +  1004,     0,     0,  1005,  1006,  1007,     0,     0,     0,     0,
                  +     0,     0,  1008,     0,    91,   325,     0,     0,     0,     0,
                        0,   326,     0,     0,     0,     0,     0,   329,     0,   330,
                        0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                       94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
                        0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
                  -     0,  1000,  1001,   336,   101,     0,   102,   103,     0,     0,
                  +     0,     0,  1002,   336,   101,     0,   102,   103,     0,     0,
                        0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
                        0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
                        0,   339,   340,   111,   112,     0,     0,     0,     0,   342,
                  @@ -2512,170 +2541,119 @@ static const short yytable[] = {   166,
                      140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
                      146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                      155,   346,     0,   156,   157,   158,   159,   160,    89,    90,
                  -     0,   161,     0,   162,   347,   240,  1002,   308,   349,   350,
                  -     0,     0,   999,   319,   320,  1003,     0,     0,  1004,  1005,
                  -  1006,     0,     0,     0,     0,     0,     0,  1007,     0,    91,
                  -   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
                  -     0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
                  -     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
                  +     0,   161,     0,   162,   347,   240,-32768,   308,   349,   350,
                  +     0,     0,     0,     0,     0,  1004,     0,     0,  1005,  1006,
                  +  1007,     0,     0,   226,     0,     0,     0,  1008,     0,    91,
                  +     0,     0,     0,     0,     0,     0,    92,     0,     0,     0,
                  +     0,     0,   491,     0,     0,     0,     0,   492,     0,     0,
                  +     0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
                        0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  -     0,   332,     0,   333,   100,     0,     0,  1001,   336,   101,
                  +     0,     0,     0,     0,   100,     0,     0,     0,     0,   101,
                        0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
                  -   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  -   108,   109,     0,     0,     0,     0,   339,   340,   111,   112,
                  -     0,     0,     0,     0,   342,     0,     0,     0,     0,     0,
                  -     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
                  -   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  +   104,   105,   493,     0,   106,     0,   107,     0,   494,     0,
                  +   108,   109,     0,     0,   495,     0,   110,     0,   111,   112,
                  +     0,     0,     0,     0,     0,   496,     0,     0,     0,     0,
                  +     0,     0,   497,     0,     0,     0,     0,   113,   114,   115,
                  +   116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                        0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                        0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  -     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
                  +     0,  1201,   138,     0,   139,   140,  1202,   227,   141,   142,
                        0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  -     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
                  -   158,   159,   160,    89,    90,     0,   161,     0,   162,   347,
                  -   240,-32768,   308,   349,   350,     0,     0,     0,     0,     0,
                  -  1003,     0,     0,  1004,  1005,  1006,     0,     0,   226,     0,
                  -     0,     0,  1007,     0,    91,     0,     0,     0,     0,     0,
                  -     0,    92,     0,     0,     0,     0,     0,   489,     0,   848,
                  -     0,     0,   490,     0,     0,     0,     0,    93,     0,     0,
                  -    94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
                  -     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
                  -     0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
                  -     0,     0,     0,     0,     0,   104,   105,   491,     0,   106,
                  -     0,   107,     0,   492,     0,   108,   109,     0,     0,   493,
                  -     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
                  -   494,     0,     0,     0,     0,     0,     0,   495,     0,     0,
                  -     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
                  -   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  -   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  -   133,   134,   135,   136,   137,     0,   489,   138,     0,   139,
                  -   140,   490,   227,   141,   142,     0,   143,     0,   144,   145,
                  -   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  -   155,     0,     0,   156,   157,   158,   159,   160,     0,     0,
                  -     0,   161,   496,   162,   163,     0,     0,  1200,     0,  1446,
                  -     0,     0,  1201,     0,     0,     0,   491,   497,     0,     0,
                  -     0,     0,   492,     0,     0,     0,     0,   971,   493,   489,
                  -     0,     0,     0,     0,   490,     0,     0,     0,     0,   494,
                  -     0,     0,     0,     0,     0,   498,   495,     0,     0,     0,
                  -   499,   500,   501,   502,   503,   504,   505,  1202,     0,     0,
                  -     0,     0,     0,  1203,   506,     0,     0,     0,     0,  1204,
                  -  1200,     0,     0,     0,     0,  1201,     0,     0,     0,   491,
                  -  1205,     0,     0,     0,     0,   492,     0,  1206,     0,     0,
                  -   489,   493,     0,     0,     0,   490,     0,     0,     0,     0,
                  -     0,     0,   494,     0,     0,     0,     0,     0,     0,   495,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -  1202,   496,     0,     0,     0,     0,  1203,     0,     0,     0,
                  -  1200,     0,  1204,     0,     0,  1201,   497,     0,     0,     0,
                  -   491,     0,     0,  1205,     0,     0,   492,     0,     0,     0,
                  -  1206,     0,   493,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,  1207,   494,   498,     0,     0,     0,     0,   499,
                  -   500,   501,   502,   503,   504,   505,     0,  1208,     0,     0,
                  -  1202,     0,  1319,   506,   496,     0,  1203,     0,     0,     0,
                  -     0,     0,  1204,     0,     0,     0,     0,     0,     0,   497,
                  -     0,     0,     0,  1205,     0,  1209,     0,     0,     0,     0,
                  -  1210,  1211,  1212,  1213,  1214,  1215,  1216,     0,     0,     0,
                  -     0,     0,     0,     0,  1217,  1207,     0,   498,     0,     0,
                  -     0,     0,   499,   500,   501,   502,   503,   504,   505,     0,
                  -  1208,     0,     0,     0,     0,   496,   506,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -   497,     0,     0,     0,     0,     0,     0,     0,  1209,     0,
                  -     0,     0,     0,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
                  -     0,     0,     0,     0,     0,  1207,     0,  1217,   498,    89,
                  -    90,     0,     0,   499,   500,   501,   502,   503,   504,   505,
                  -  1208,     0,     0,     0,     0,     0,     0,   506,     0,     0,
                  +     0,   151,   152,   153,   154,   155,     0,     0,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,   498,   162,   163,
                  +     0,     0,  1201,     0,     0,     0,     0,  1202,     0,     0,
                  +     0,  1203,   499,     0,     0,     0,     0,  1204,     0,     0,
                  +     0,     0,   972,  1205,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,  1206,     0,     0,     0,     0,     0,
                  +   500,  1207,     0,     0,     0,   501,   502,   503,   504,   505,
                  +   506,   507,  1203,     0,     0,     0,     0,     0,  1204,   508,
                  +     0,     0,     0,     0,  1205,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,  1206,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -    91,     0,     0,     0,     0,     0,     0,    92,  1209,     0,
                  -     0,     0,     0,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
                  -     0,     0,     0,    93,     0,     0,    94,  1217,     0,     0,
                  -     0,     0,    95,    96,     0,     0,     0,     0,    97,    98,
                  -    99,     0,     0,     0,     0,   100,     0,     0,     0,     0,
                  -   101,     0,   102,   103,     0,     0,     0,     0,     0,     0,
                  -     0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
                  -     0,   108,   109,     0,     0,     0,     0,   110,     0,   111,
                  -   112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
                  -   115,   116,     0,   117,   118,     0,   119,   120,     0,   121,
                  -     0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
                  -     0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
                  -   137,     0,     0,   138,     0,   139,   140,     0,     0,   141,
                  -   142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
                  -   150,     0,   151,   152,   153,   154,   155,  1053,     0,   156,
                  -   157,   158,   159,   160,    89,    90,     0,   161,     0,   162,
                  -   163,   240,   297,   308,     0,  1054,     0,   272,   273,   274,
                  -   275,  1055,   277,   278,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,    91,     0,     0,   588,     0,
                  -     0,     0,    92,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,    93,  1201,
                  -     0,    94,     0,     0,     0,     0,   269,    95,    96,     0,
                  -     0,     0,     0,    97,    98,    99,     0,     0,     0,     0,
                  -   100,     0,     0,     0,     0,   101,     0,   102,   103,     0,
                  -     0,     0,     0,     0,     0,     0,   104,   105,   270,     0,
                  -   106,     0,   107,     0,  1202,     0,   108,   109,     0,     0,
                  -  1203,     0,   110,     0,   111,   112,  1204,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,  1205,     0,     0,
                  -     0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
                  -     0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                  -   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
                  -   132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
                  -   139,   140,    89,    90,   141,   142,     0,   143,     0,   144,
                  -   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
                  -   154,   155,     0,     0,   156,   157,   158,   159,   160,     0,
                  -     0,     0,   161,    91,   162,   163,     0,   271,     0,  1207,
                  -    92,     0,   272,   273,   274,   275,   276,   277,   278,     0,
                  -     0,     0,     0,     0,  1208,     0,    93,     0,     0,    94,
                  -     0,     0,     0,     0,   269,    95,    96,     0,     0,     0,
                  -     0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
                  -     0,     0,  1209,   101,     0,   102,   103,  1210,  1211,  1212,
                  -  1213,  1214,  1215,  1216,   104,   105,   270,     0,   106,     0,
                  -   107,  1217,     0,     0,   108,   109,     0,     0,     0,     0,
                  -   110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
                  -   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                  -     0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
                  -   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
                  -     0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
                  -   147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
                  -     0,     0,   156,   157,   158,   159,   160,    89,    90,     0,
                  -   161,     0,   162,   163,     0,   271,     0,     0,     0,     0,
                  -   272,   273,   274,   275,   276,   277,   278,     0,     0,     0,
                  -     0,     0,   226,     0,     0,     0,     0,     0,    91,     0,
                  -     0,     0,     0,     0,     0,    92,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,    93,     0,     0,    94,     0,     0,     0,     0,     0,
                  -    95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
                  -     0,     0,     0,   100,     0,     0,     0,     0,   101,     0,
                  -   102,   103,     0,     0,     0,     0,     0,     0,     0,   104,
                  -   105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
                  -   109,     0,     0,     0,     0,   110,     0,   111,   112,     0,
                  +     0,     0,     0,     0,     0,     0,  1208,     0,     0,     0,
                  +    89,    90,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,  1209,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,   113,   114,   115,   116,
                  -     0,   117,   118,     0,   119,   120,     0,   121,     0,     0,
                  -   122,   123,   124,   125,   126,     0,   127,   128,     0,     0,
                  -   129,   130,   131,   132,   133,   134,   135,   136,   137,     0,
                  -     0,   138,     0,   139,   140,     0,   227,   141,   142,     0,
                  -   143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
                  -   151,   152,   153,   154,   155,    89,    90,   156,   157,   158,
                  -   159,   160,     0,     0,     0,   161,     0,   162,   163,     0,
                  -     0,     0,   349,     0,     0,     0,     0,     0,     0,     0,
                  -   523,     0,     0,     0,     0,     0,    91,     0,     0,     0,
                  +     0,    91,     0,     0,     0,     0,     0,  1208,    92,  1210,
                  +     0,     0,     0,     0,  1211,  1212,  1213,  1214,  1215,  1216,
                  +  1217,     0,  1209,     0,    93,     0,     0,    94,  1218,     0,
                  +     0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
                  +    98,    99,     0,     0,     0,     0,   100,     0,     0,     0,
                  +  1210,   101,     0,   102,   103,  1211,  1212,  1213,  1214,  1215,
                  +  1216,  1217,   104,   105,     0,     0,   106,     0,   107,  1218,
                  +     0,     0,   108,   109,     0,     0,     0,     0,   110,     0,
                  +   111,   112,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
                  +   114,   115,   116,     0,   117,   118,     0,   119,   120,     0,
                  +   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
                  +   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
                  +   136,   137,     0,     0,   138,     0,   139,   140,     0,     0,
                  +   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
                  +   149,   150,     0,   151,   152,   153,   154,   155,  1054,     0,
                  +   156,   157,   158,   159,   160,    89,    90,     0,   161,     0,
                  +   162,   163,   240,   297,   308,     0,  1055,     0,   272,   273,
                  +   274,   275,  1056,   277,   278,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,    91,     0,     0,   589,
                        0,     0,     0,    92,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,    93,
                  -     0,     0,    94,     0,     0,     0,     0,     0,    95,    96,
                  +  1202,     0,    94,     0,     0,     0,     0,   269,    95,    96,
                        0,     0,     0,     0,    97,    98,    99,     0,     0,     0,
                        0,   100,     0,     0,     0,     0,   101,     0,   102,   103,
                  -     0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
                  -     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  -     0,     0,     0,   110,     0,   111,   112,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   104,   105,   270,
                  +     0,   106,     0,   107,     0,  1203,     0,   108,   109,     0,
                  +     0,  1204,     0,   110,     0,   111,   112,  1205,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,  1206,     0,
                        0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
                      118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  -   124,   125,   126,     0,   127,   128,    89,    90,   129,   130,
                  +   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                      131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                  -     0,   139,   140,     0,     0,   141,   142,     0,   143,     0,
                  -   144,   145,   146,   147,   148,   149,   150,    91,   151,   152,
                  -   153,   154,   155,     0,    92,   156,   157,   158,   159,   160,
                  -     0,     0,     0,   161,     0,   162,   163,     0,     0,     0,
                  -    93,     0,     0,    94,     0,     0,     0,     0,   423,    95,
                  +     0,   139,   140,    89,    90,   141,   142,     0,   143,     0,
                  +   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  +   153,   154,   155,     0,     0,   156,   157,   158,   159,   160,
                  +     0,     0,     0,   161,    91,   162,   163,     0,   271,     0,
                  +  1208,    92,     0,   272,   273,   274,   275,   276,   277,   278,
                  +     0,     0,     0,     0,     0,  1209,     0,    93,     0,     0,
                  +    94,     0,     0,     0,     0,   269,    95,    96,     0,     0,
                  +     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
                  +     0,     0,     0,  1210,   101,     0,   102,   103,  1211,  1212,
                  +  1213,  1214,  1215,  1216,  1217,   104,   105,   270,     0,   106,
                  +     0,   107,  1218,     0,     0,   108,   109,     0,     0,     0,
                  +     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
                  +   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  +   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  +   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  +   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
                  +   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  +   155,     0,     0,   156,   157,   158,   159,   160,    89,    90,
                  +     0,   161,     0,   162,   163,     0,   271,     0,     0,     0,
                  +     0,   272,   273,   274,   275,   276,   277,   278,     0,     0,
                  +     0,     0,     0,   226,     0,     0,     0,     0,     0,    91,
                  +     0,     0,     0,     0,     0,     0,    92,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
                  +     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  +     0,     0,     0,     0,   100,     0,     0,     0,     0,   101,
                  +     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
                  +   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  +   108,   109,     0,     0,     0,     0,   110,     0,   111,   112,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   113,   114,   115,
                  +   116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  +     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                  +     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  +     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
                  +     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  +     0,   151,   152,   153,   154,   155,    89,    90,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,     0,   162,   163,
                  +     0,     0,     0,   349,     0,     0,     0,     0,     0,     0,
                  +     0,   524,     0,     0,     0,     0,     0,    91,     0,     0,
                  +     0,     0,     0,     0,    92,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +    93,     0,     0,    94,     0,     0,     0,     0,     0,    95,
                       96,     0,     0,     0,     0,    97,    98,    99,     0,     0,
                        0,     0,   100,     0,     0,     0,     0,   101,     0,   102,
                      103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
                  @@ -2690,7 +2668,7 @@ static const short yytable[] = {   166,
                        0,   144,   145,   146,   147,   148,   149,   150,    91,   151,
                      152,   153,   154,   155,     0,    92,   156,   157,   158,   159,
                      160,     0,     0,     0,   161,     0,   162,   163,     0,     0,
                  -     0,    93,     0,     0,    94,     0,     0,     0,     0,   765,
                  +     0,    93,     0,     0,    94,     0,     0,     0,     0,   423,
                       95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
                        0,     0,     0,   100,     0,     0,     0,     0,   101,     0,
                      102,   103,     0,     0,     0,     0,     0,     0,     0,   104,
                  @@ -2706,7 +2684,7 @@ static const short yytable[] = {   166,
                      151,   152,   153,   154,   155,     0,    92,   156,   157,   158,
                      159,   160,     0,     0,     0,   161,     0,   162,   163,     0,
                        0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
                  -   982,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                  +   766,    95,    96,     0,     0,     0,     0,    97,    98,    99,
                        0,     0,     0,     0,   100,     0,     0,     0,     0,   101,
                        0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
                      104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
                  @@ -2714,100 +2692,58 @@ static const short yytable[] = {   166,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,   113,   114,   115,
                      116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
                  -     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
                  -     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                  +     0,   122,   123,   124,   125,   126,     0,   127,   128,    89,
                  +    90,   129,   130,   131,   132,   133,   134,   135,   136,   137,
                        0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
                        0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
                  -     0,   151,   152,   153,   154,   155,     0,     0,   156,   157,
                  -   158,   159,   160,    89,    90,     0,   161,     0,   162,   163,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,  1178,     0,     0,     0,     0,     0,     0,   226,     0,
                  -     0,     0,     0,     0,    91,     0,     0,     0,     0,     0,
                  -     0,    92,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                  -    94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
                  -     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
                  -     0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
                  -     0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
                  -     0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
                  -     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
                  -   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  -   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  -   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  -   140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
                  -   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  -   155,    89,    90,   156,   157,   158,   159,   160,     0,     0,
                  -     0,   161,     0,   162,   163,     0,     0,     0,   349,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,    91,     0,     0,     0,     0,     0,     0,    92,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
                  -     0,     0,     0,     0,    95,    96,     0,     0,     0,     0,
                  -    97,    98,    99,     0,     0,     0,     0,   100,     0,     0,
                  -     0,     0,   101,     0,   102,   103,     0,     0,     0,     0,
                  -     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                  -     0,     0,     0,   108,   109,     0,     0,     0,     0,   110,
                  -     0,   111,   112,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -   113,   114,   115,   116,     0,   117,   118,     0,   119,   120,
                  -     0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
                  -   127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
                  -   135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
                  -     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  -   148,   149,   150,     0,   151,   152,   153,   154,   155,    89,
                  -    90,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  -     0,   162,   163,     0,     0,   308,     0,     0,     0,     0,
                  -     0,   663,     0,   664,   665,     0,     0,     0,     0,     0,
                  -    91,     0,     0,     0,     0,     0,     0,    92,     0,     0,
                  -     0,     0,     0,   666,     0,     0,     0,   667,     0,     0,
                  -     0,   668,     0,    93,     0,     0,    94,     0,     0,     0,
                  -     0,     0,    95,    96,     0,     0,     0,     0,    97,    98,
                  +    91,   151,   152,   153,   154,   155,     0,    92,   156,   157,
                  +   158,   159,   160,     0,     0,     0,   161,     0,   162,   163,
                  +     0,     0,     0,    93,     0,     0,    94,     0,     0,     0,
                  +     0,   983,    95,    96,     0,     0,     0,     0,    97,    98,
                       99,     0,     0,     0,     0,   100,     0,     0,     0,     0,
                  -   101,     0,   102,   103,     0,   669,     0,     0,   670,   671,
                  +   101,     0,   102,   103,     0,     0,     0,     0,     0,     0,
                        0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
                  -     0,   108,   109,     0,     0,     0,   672,   110,     0,   111,
                  -   112,     0,     0,   673,     0,   674,     0,     0,     0,     0,
                  +     0,   108,   109,     0,     0,     0,     0,   110,     0,   111,
                  +   112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
                  -   115,   116,   675,   117,   118,   676,   119,   120,   677,   121,
                  -   678,   679,   122,   123,   124,   125,   126,   680,   127,   128,
                  -   681,   682,   129,   130,   131,   132,   133,   134,   135,   136,
                  -   137,   683,   684,   138,   685,   139,   140,   686,   687,   141,
                  -   142,   688,   143,     0,   144,   145,   146,   147,   148,   149,
                  -   150,   689,   151,   152,   153,   154,   155,   690,   691,   156,
                  -   157,   158,   159,   160,    89,    90,   692,   161,   693,   162,
                  -   163,     0,     0,     0,     0,     0,     0,     0,     0,   319,
                  -   320,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,    91,   568,     0,     0,     0,
                  -     0,     0,   569,     0,     0,     0,     0,     0,     0,     0,
                  -   570,     0,     0,     0,     0,     0,     0,     0,    93,     0,
                  +   115,   116,     0,   117,   118,     0,   119,   120,     0,   121,
                  +     0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
                  +     0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
                  +   137,     0,     0,   138,     0,   139,   140,     0,     0,   141,
                  +   142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
                  +   150,     0,   151,   152,   153,   154,   155,     0,     0,   156,
                  +   157,   158,   159,   160,    89,    90,     0,   161,     0,   162,
                  +   163,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,  1179,     0,     0,     0,     0,     0,     0,   226,
                  +     0,     0,     0,     0,     0,    91,     0,     0,     0,     0,
                  +     0,     0,    92,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,    93,     0,
                        0,    94,     0,     0,     0,     0,     0,    95,    96,     0,
                  -     0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
                  -   100,     0,     0,     0,   571,   101,     0,   102,   103,     0,
                  +     0,     0,     0,    97,    98,    99,     0,     0,     0,     0,
                  +   100,     0,     0,     0,     0,   101,     0,   102,   103,     0,
                        0,     0,     0,     0,     0,     0,   104,   105,     0,     0,
                      106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
                        0,     0,   110,     0,   111,   112,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   344,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
                        0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                      125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
                      132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
                  -   139,   140,     0,     0,   141,   142,     0,   143,     0,   144,
                  +   139,   140,     0,   227,   141,   142,     0,   143,     0,   144,
                      145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
                      154,   155,    89,    90,   156,   157,   158,   159,   160,     0,
                  -     0,     0,   161,     0,   162,   163,     0,     0,     0,   545,
                  -     0,     0,     0,     0,   546,     0,     0,     0,     0,     0,
                  +     0,     0,   161,     0,   162,   163,     0,     0,     0,   349,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,    91,     0,     0,     0,     0,     0,     0,
                       92,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -   547,     0,     0,     0,     0,     0,    93,     0,     0,    94,
                  +     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
                        0,     0,     0,     0,     0,    95,    96,     0,     0,     0,
                        0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
                        0,     0,     0,   101,     0,   102,   103,     0,     0,     0,
                  -     0,     0,     0,   548,   104,   105,     0,     0,   106,     0,
                  +     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
                      107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
                      110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
                  -   549,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
                      120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                        0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
                  @@ -2815,30 +2751,72 @@ static const short yytable[] = {   166,
                        0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
                      147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
                       89,    90,   156,   157,   158,   159,   160,     0,     0,     0,
                  -   161,     0,   162,   163,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,   226,     0,     0,     0,     0,
                  +   161,     0,   162,   163,     0,     0,   308,     0,     0,     0,
                  +     0,     0,   665,     0,   666,   667,     0,     0,     0,     0,
                        0,    91,     0,     0,     0,     0,     0,     0,    92,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,    93,     0,     0,    94,     0,     0,
                  +     0,     0,     0,     0,   668,     0,     0,     0,   669,     0,
                  +     0,     0,   670,     0,    93,     0,     0,    94,     0,     0,
                        0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
                       98,    99,     0,     0,     0,     0,   100,     0,     0,     0,
                  -     0,   101,     0,   102,   103,     0,     0,     0,     0,     0,
                  -     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
                  -     0,     0,   108,   109,     0,     0,     0,     0,   110,     0,
                  -   111,   112,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,   101,     0,   102,   103,     0,   671,     0,     0,   672,
                  +   673,     0,   104,   105,     0,     0,   106,     0,   107,     0,
                  +     0,     0,   108,   109,     0,     0,     0,   674,   110,     0,
                  +   111,   112,     0,     0,   675,     0,   676,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
                  -   114,   115,   116,     0,   117,   118,     0,   119,   120,     0,
                  -   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
                  -   128,    89,    90,   129,   130,   131,   132,   133,   134,   135,
                  -   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
                  -   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
                  -   149,   150,    91,   151,   152,   153,   154,   155,     0,    92,
                  -   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
                  -   162,   163,     0,   837,     0,    93,     0,     0,    94,     0,
                  +   114,   115,   116,   677,   117,   118,   678,   119,   120,   679,
                  +   121,   680,   681,   122,   123,   124,   125,   126,   682,   127,
                  +   128,   683,   684,   129,   130,   131,   132,   133,   134,   135,
                  +   136,   137,   685,   686,   138,   687,   139,   140,   688,   689,
                  +   141,   142,   690,   143,     0,   144,   145,   146,   147,   148,
                  +   149,   150,   691,   151,   152,   153,   154,   155,   692,   693,
                  +   156,   157,   158,   159,   160,    89,    90,   694,   161,   695,
                  +   162,   163,     0,     0,     0,     0,     0,     0,     0,     0,
                  +   319,   320,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,    91,   569,     0,     0,
                  +     0,     0,     0,   570,     0,     0,     0,     0,     0,     0,
                  +     0,   571,     0,     0,     0,     0,     0,     0,     0,    93,
                  +     0,     0,    94,     0,     0,     0,     0,     0,    95,    96,
                  +     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
                  +   333,   100,     0,     0,     0,   572,   101,     0,   102,   103,
                  +     0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
                  +     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  +     0,     0,     0,   110,     0,   111,   112,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,   344,     0,
                  +     0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
                  +   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  +   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  +   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                  +     0,   139,   140,     0,     0,   141,   142,     0,   143,     0,
                  +   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  +   153,   154,   155,    89,    90,   156,   157,   158,   159,   160,
                  +     0,     0,     0,   161,     0,   162,   163,     0,     0,     0,
                  +   546,     0,     0,     0,     0,   547,     0,     0,     0,     0,
                  +     0,     0,     0,     0,    91,     0,     0,     0,     0,     0,
                  +     0,    92,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,   548,     0,     0,     0,     0,     0,    93,     0,     0,
                  +    94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
                  +     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
                  +     0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
                  +     0,     0,     0,     0,   549,   104,   105,     0,     0,   106,
                  +     0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
                  +     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
                  +     0,   550,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
                  +   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                  +   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
                  +   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  +   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
                  +   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
                  +   155,    89,    90,   156,   157,   158,   159,   160,     0,     0,
                  +     0,   161,     0,   162,   163,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,   226,     0,     0,     0,
                  +     0,     0,    91,     0,     0,     0,     0,     0,     0,    92,
                  +     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
                        0,     0,     0,     0,    95,    96,     0,     0,     0,     0,
                       97,    98,    99,     0,     0,     0,     0,   100,     0,     0,
                        0,     0,   101,     0,   102,   103,     0,     0,     0,     0,
                  -     0,     0,     0,   104,   105,     0,   838,   106,     0,   107,
                  +     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
                        0,     0,     0,   108,   109,     0,     0,     0,     0,   110,
                        0,   111,   112,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  @@ -2846,16 +2824,16 @@ static const short yytable[] = {   166,
                        0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
                      127,   128,    89,    90,   129,   130,   131,   132,   133,   134,
                      135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
                  -     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                  +   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
                      148,   149,   150,    91,   151,   152,   153,   154,   155,     0,
                       92,   156,   157,   158,   159,   160,     0,     0,     0,   161,
                  -     0,   162,   163,     0,     0,     0,    93,     0,     0,    94,
                  +     0,   162,   163,     0,   838,     0,    93,     0,     0,    94,
                        0,     0,     0,     0,     0,    95,    96,     0,     0,     0,
                  -     0,    97,    98,    99,   223,     0,     0,     0,   100,     0,
                  +     0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
                        0,     0,     0,   101,     0,   102,   103,     0,     0,     0,
                  -     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
                  +     0,     0,     0,     0,   104,   105,     0,   839,   106,     0,
                      107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
                  -   224,     0,   111,   112,     0,     0,     0,     0,     0,     0,
                  +   110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
                      120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                  @@ -2866,17 +2844,17 @@ static const short yytable[] = {   166,
                        0,    92,   156,   157,   158,   159,   160,     0,     0,     0,
                      161,     0,   162,   163,     0,     0,     0,    93,     0,     0,
                       94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
                  -     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
                  +     0,     0,    97,    98,    99,   223,     0,     0,     0,   100,
                        0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
                        0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
                        0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
                  -     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
                  +     0,   224,     0,   111,   112,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
                      119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
                      126,     0,   127,   128,    89,    90,   129,   130,   131,   132,
                      133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
                  -   140,     0,     0,   141,   142,   597,   143,     0,   144,   145,
                  +   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
                      146,   147,   148,   149,   150,    91,   151,   152,   153,   154,
                      155,     0,    92,   156,   157,   158,   159,   160,     0,     0,
                        0,   161,     0,   162,   163,     0,     0,     0,    93,     0,
                  @@ -2889,31 +2867,31 @@ static const short yytable[] = {   166,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
                        0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                  -   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
                  +   125,   126,     0,   127,   128,    89,    90,   129,   130,   131,
                      132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
                  -   139,   140,     0,     0,   141,   142,  1069,   143,     0,   144,
                  -   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
                  -   154,   155,    89,    90,   156,   157,   158,   159,   160,  1173,
                  -     0,     0,   161,     0,   162,   163,     0,     0,     0,     0,
                  +   139,   140,     0,     0,   141,   142,   598,   143,     0,   144,
                  +   145,   146,   147,   148,   149,   150,    91,   151,   152,   153,
                  +   154,   155,     0,    92,   156,   157,   158,   159,   160,     0,
                  +     0,     0,   161,     0,   162,   163,     0,     0,     0,    93,
                  +     0,     0,    94,     0,     0,     0,     0,     0,    95,    96,
                  +     0,     0,     0,     0,    97,    98,    99,     0,     0,     0,
                  +     0,   100,     0,     0,     0,     0,   101,     0,   102,   103,
                  +     0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
                  +     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  +     0,     0,     0,   110,     0,   111,   112,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,    91,     0,     0,     0,     0,     0,     0,
                  -    92,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
                  -     0,     0,     0,     0,     0,    95,    96,     0,     0,     0,
                  -     0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
                  -     0,     0,     0,   101,     0,   102,   103,     0,     0,     0,
                  -     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
                  -   107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
                  -   110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
                  +   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  +   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  +   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                  +     0,   139,   140,     0,     0,   141,   142,  1070,   143,     0,
                  +   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  +   153,   154,   155,    89,    90,   156,   157,   158,   159,   160,
                  +  1174,     0,     0,   161,     0,   162,   163,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
                  -   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
                  -     0,   127,   128,    89,    90,   129,   130,   131,   132,   133,
                  -   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
                  -     0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
                  -   147,   148,   149,   150,    91,   151,   152,   153,   154,   155,
                  -     0,    92,   156,   157,   158,   159,   160,     0,     0,     0,
                  -   161,     0,   162,   163,     0,     0,     0,    93,     0,     0,
                  +     0,     0,     0,     0,    91,     0,     0,     0,     0,     0,
                  +     0,    92,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
                       94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
                        0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
                        0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
                  @@ -2934,7 +2912,7 @@ static const short yytable[] = {   166,
                      100,     0,     0,     0,     0,   101,     0,   102,   103,     0,
                        0,     0,     0,     0,     0,     0,   104,   105,     0,     0,
                      106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
                  -     0,     0,   247,     0,   111,   112,     0,     0,     0,     0,
                  +     0,     0,   110,     0,   111,   112,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
                        0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
                  @@ -2949,437 +2927,532 @@ static const short yytable[] = {   166,
                        0,   100,     0,     0,     0,     0,   101,     0,   102,   103,
                        0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
                        0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
                  -     0,     0,     0,   249,     0,   111,   112,     0,     0,     0,
                  +     0,     0,     0,   247,     0,   111,   112,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
                      118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
                  -   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
                  +   124,   125,   126,     0,   127,   128,    89,    90,   129,   130,
                      131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
                        0,   139,   140,     0,     0,   141,   142,     0,   143,     0,
                  -   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
                  -   153,   154,   155,     0,     0,   156,   157,   158,   159,   160,
                  -     0,     0,     1,   161,     0,   162,   163,     2,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     3,     0,     0,     4,
                  -     0,     5,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     6,     0,     7,     0,     0,     0,     8,     9,    10,
                  -     0,     0,     0,    11,     0,     0,     0,     0,     0,    12,
                  -     0,     0,     0,     0,   319,   320,    13,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -    91,   325,     0,     0,     0,     0,     0,   469,     0,     0,
                  -     0,     0,     0,   329,     0,   330,     0,     0,     0,     0,
                  -     0,     0,     0,    93,     0,     0,     0,    14,   331,    15,
                  -     0,     0,    16,    17,     0,     0,     0,     0,     0,    98,
                  -    99,     0,   332,     0,   333,     0,     0,    18,     0,   336,
                  +   144,   145,   146,   147,   148,   149,   150,    91,   151,   152,
                  +   153,   154,   155,     0,    92,   156,   157,   158,   159,   160,
                  +     0,     0,     0,   161,     0,   162,   163,     0,     0,     0,
                  +    93,     0,     0,    94,     0,     0,     0,     0,     0,    95,
                  +    96,     0,     0,     0,     0,    97,    98,    99,     0,     0,
                  +     0,     0,   100,     0,     0,     0,     0,   101,     0,   102,
                  +   103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
                  +     0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
                  +     0,     0,     0,     0,   249,     0,   111,   112,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,    19,     0,     0,     0,     0,     0,     0,     0,    20,
                  -    21,     0,   109,   617,     0,     0,     0,   470,   340,    22,
                  -    23,     0,     0,     0,     0,   342,     0,     0,     0,     0,
                  -    24,    25,   344,    26,     0,     0,    27,     0,   113,     0,
                  -     0,   471,    28,   319,   320,     0,     0,     0,     0,     0,
                  -    29,     0,     0,     0,     0,     0,     0,    30,     0,    91,
                  -   325,     0,     0,    31,     0,    32,   469,     0,     0,     0,
                  -     0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
                  -     0,     0,    93,     0,     0,     0,     0,   331,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,   346,    98,    99,
                  -     0,   332,     0,   333,     0,     0,     0,     0,   336,     0,
                  -   472,   240,     0,   308,   349,   350,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,   113,   114,   115,   116,     0,
                  +   117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
                  +   123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
                  +   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
                  +   138,     0,   139,   140,     0,     0,   141,   142,     0,   143,
                  +     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
                  +   152,   153,   154,   155,     0,     0,   156,   157,   158,   159,
                  +   160,     0,     0,     1,   161,     0,   162,   163,     2,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     3,     0,     0,
                  +     4,     0,     5,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     6,     0,     7,     0,     0,     0,     8,     9,
                  +    10,     0,     0,     0,    11,     0,     0,     0,     0,     0,
                  +    12,     0,     0,     0,     0,   319,   320,    13,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,   109,   319,   320,     0,     0,   470,   340,     0,     0,
                  -     0,     0,     0,     0,   342,     0,     0,     0,    91,   325,
                  -     0,   344,     0,     0,     0,   469,     0,   113,     0,     0,
                  -   471,     0,     0,   330,     0,     0,     0,     0,     0,     0,
                  -     0,    93,     0,     0,     0,     0,   331,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,    98,    99,     0,
                  -   332,     0,   333,     0,     0,     0,     0,   336,     0,     0,
                  +     0,    91,   325,     0,     0,     0,     0,     0,   469,     0,
                  +     0,     0,     0,     0,   329,     0,   330,     0,     0,     0,
                  +     0,     0,     0,     0,    93,     0,     0,     0,    14,   331,
                  +    15,     0,     0,    16,    17,     0,     0,     0,     0,     0,
                  +    98,    99,     0,   332,     0,   333,     0,     0,    18,     0,
                  +   336,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,    19,     0,     0,     0,     0,     0,     0,     0,
                  +    20,    21,     0,   109,   618,     0,     0,     0,   470,   340,
                  +    22,    23,     0,     0,     0,     0,   342,     0,     0,     0,
                  +     0,    24,    25,   344,    26,     0,     0,    27,     0,   113,
                  +     0,     0,   471,    28,   319,   320,     0,     0,     0,     0,
                  +     0,    29,     0,     0,     0,     0,     0,     0,    30,     0,
                  +    91,   325,     0,     0,    31,     0,    32,   469,     0,     0,
                  +     0,     0,     0,   329,     0,   330,     0,     0,     0,     0,
                  +     0,     0,     0,    93,     0,     0,     0,     0,   331,     0,
                  +     0,     0,     0,     0,     0,     0,     0,     0,   346,    98,
                  +    99,     0,   332,     0,   333,     0,     0,     0,     0,   336,
                  +     0,   472,   240,     0,   308,   349,   350,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,   346,     0,     0,     0,
                  -   109,     0,     0,     0,     0,   470,   340,     0,     0,   472,
                  -   240,     0,   308,   349,   350,     0,     0,     0,     0,     0,
                  -   344,     0,     0,     0,     0,     0,   113,     0,     0,   471,
                  +     0,     0,   109,     0,     0,     0,     0,   470,   340,     0,
                  +     0,     0,     0,     0,     0,   342,     0,     0,     0,     0,
                  +     0,     0,   344,     0,     0,     0,     0,     0,   113,     0,
                  +     0,   471,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  +     0,     0,     0,     0,     0,     0,     0,   346,     0,     0,
                        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
                  -     0,     0,     0,     0,   804,   346,     0,     0,     0,     0,
                  -     0,     0,     0,     0,     0,     0,     0,     0,   472
                  +   472,   240,     0,   308,   349,   350
                   };
                   
                   static const short yycheck[] = {     3,
                  -   525,   170,     6,   199,   799,   182,   196,   971,    25,   914,
                  -  1201,   607,   524,    17,    18,   237,    20,   529,   222,   188,
                  -    24,   617,   845,   846,    28,    29,    30,    31,   465,   809,
                  -  1245,   536,   115,   856,     6,   409,   506,   650,   977,   652,
                  -   653,  1411,  1412,    52,   389,   706,   707,   708,   709,   710,
                  -    52,    52,    50,     6,     6,    37,     9,    20,    37,    37,
                  -    23,    37,   723,     5,  1171,     7,   320,     6,  1493,  1494,
                  -    38,    16,    37,    47,   124,     3,   513,   871,    63,   333,
                  -    84,    38,    38,   124,   872,    52,    38,   557,    51,   636,
                  -   637,   638,   639,   605,    13,    71,    73,   124,    60,    85,
                  -    42,   205,    13,   124,    61,    61,   124,    79,    82,    61,
                  -   814,    37,  1537,   207,   818,   124,    52,   313,    42,   223,
                  -   316,   215,  1492,    95,   183,   919,    47,    18,   211,   106,
                  -   642,    94,   920,    24,    38,    80,   238,    28,   124,    58,
                  -    31,     8,   107,   105,    36,   119,    38,    58,   115,    63,
                  -   107,    70,   356,     8,   122,   107,    82,    61,   121,    70,
                  -   125,    82,  1353,   108,   168,   122,   122,   171,   172,    61,
                  -   122,   175,   176,   101,   178,   179,   226,   204,   182,    10,
                  -   142,   283,   186,   187,   108,   226,   190,   228,   192,   193,
                  -   194,   205,   187,    84,   385,   199,   200,    10,   119,   194,
                  -   207,   713,   142,   107,   458,   226,   223,   228,   226,   223,
                  -   228,  1116,   140,   217,   651,   107,  1641,   226,   122,  1014,
                  -  1015,   219,  1329,   205,   226,   226,   205,   205,   156,   205,
                  -   122,   235,   171,   172,   238,   207,   188,   833,   245,   178,
                  -   244,   226,   184,   215,  1067,   117,    47,    57,     6,   146,
                  -   160,   190,    47,   192,    53,   916,  1447,   205,   202,   131,
                  -   873,   200,    10,    73,   227,   110,  1636,   928,   929,   930,
                  -   931,   932,   933,   464,   227,   223,   173,   168,   147,   283,
                  -    81,    82,    40,   300,   188,   177,    81,    82,   179,    20,
                  -   294,   796,    91,    99,   207,   186,   106,   205,  1513,   490,
                  -   205,   110,   309,  1538,  1539,   174,   510,  1322,   921,   313,
                  -  1325,   224,   316,   317,   123,   223,   122,  1508,   119,  1510,
                  -    51,  1260,    52,   870,   119,   207,   217,  1562,    58,   216,
                  -   217,   222,   879,   880,   881,   882,   883,   884,   225,   206,
                  -   357,     4,   224,   226,   235,   228,     9,   214,   215,   216,
                  -   217,   206,    15,   244,   220,   294,    19,   204,   225,   214,
                  -   215,   216,   217,    94,   182,   382,   383,   384,   216,   217,
                  -   225,   222,   541,   222,   223,   206,   227,   225,   848,   160,
                  -  1285,   385,   386,   214,   215,   216,   217,   226,   137,   228,
                  -   121,   395,   141,   206,   225,    67,   413,   401,   211,   212,
                  -   213,   214,   215,   216,   217,   409,   204,   205,    96,   207,
                  -   414,   209,   225,   204,    36,   885,    38,   421,   422,   764,
                  -   216,   217,   226,   427,   195,   196,   430,   431,    85,   225,
                  -   775,   435,    85,    58,   205,   872,   443,   444,   445,    61,
                  -   814,    85,   133,   450,   818,   636,   637,   638,   639,   108,
                  -   887,   888,    13,   216,   217,   462,    85,   969,   206,   133,
                  -   464,   898,   225,   207,   934,   209,   214,   215,   216,   217,
                  -  1250,   226,  1436,   228,  1087,  1088,  1089,   225,   485,   133,
                  -   487,  1142,   421,   920,   488,   107,   490,   139,   427,   216,
                  -   217,   430,   431,   216,   385,   386,   220,    58,   225,   936,
                  -   122,   227,   130,    64,   395,   537,   538,   539,   512,    70,
                  -   514,  1124,  1125,  1126,    10,   706,   707,   708,   709,   710,
                  -    53,   991,   226,    20,   228,   729,    59,   130,    25,   733,
                  -   227,   422,   723,   737,    10,    20,    69,   741,   227,    67,
                  -    37,   745,   546,   105,    77,   749,  1485,    33,  1487,   753,
                  -  1075,   129,    37,   757,   176,   177,  1081,    90,  1234,  1235,
                  -  1236,  1237,  1238,  1239,   580,    13,   582,   583,   584,   585,
                  -   103,   226,    34,   580,    85,   582,   583,   584,   585,   206,
                  -   227,   206,    64,   774,    81,   212,   213,   120,   592,   214,
                  -   215,   216,   217,   207,   227,    57,    81,    94,   602,    93,
                  -   225,   223,   163,   100,   227,   227,   610,   546,   127,    94,
                  -    58,    73,    74,    19,   227,   100,    64,   178,   226,   510,
                  -   228,   226,    70,   228,   121,   226,   630,   228,   226,   226,
                  -   228,   228,   636,   637,   638,   639,   121,   227,   828,   829,
                  -   227,   845,   846,   227,   106,   206,   226,   226,   228,   228,
                  -   827,   227,   856,   214,   215,   216,   217,   226,   226,   228,
                  -   228,  1337,   227,   226,   225,   228,   206,  1104,   143,   226,
                  -   132,   228,   227,   148,   214,   215,   216,   217,   227,   870,
                  -   871,   163,   227,   130,   159,   225,   890,   223,   879,   880,
                  -   881,   882,   883,   884,   169,   170,   178,   226,  1374,   228,
                  -   227,   592,   706,   707,   708,   709,   710,  1383,  1384,  1385,
                  -  1386,  1387,  1388,  1389,  1390,   163,  1392,   227,   193,   723,
                  -   226,   226,   228,   228,   206,   916,    10,   226,   919,   228,
                  -   178,   223,   214,   215,   216,   217,  1261,   928,   929,   930,
                  -   931,   932,   933,   225,   222,  1568,   226,  1217,   228,   222,
                  -   227,   130,   206,   181,    10,   107,   167,   761,   206,   763,
                  -   214,   215,   216,   217,   781,   186,   214,   215,   216,   217,
                  -   774,   225,   776,    85,   228,    50,   115,   225,   782,   983,
                  -    52,   785,   107,   787,   788,   789,   790,    19,   115,   115,
                  -   222,   795,   115,   810,   115,   799,   800,   111,   802,  1269,
                  -   225,   228,   228,   226,   808,    52,   222,  1319,   179,   206,
                  -   814,   828,   829,   820,   818,   227,  1286,   214,   215,   216,
                  -   217,   828,   829,   827,   828,   829,   830,    23,   225,   227,
                  -   834,    66,   836,   837,    58,    66,   227,   841,    88,    85,
                  -    93,  1517,   211,   782,   153,   849,   850,   854,  1643,   191,
                  -   158,   790,    85,   211,   211,   107,   226,    81,   125,   226,
                  -   228,   868,   227,  1067,   108,    22,   870,   871,   228,   228,
                  -   761,    52,   763,   228,   228,   879,   880,   881,   882,   883,
                  -   884,   228,    74,   774,  1000,   106,  1002,  1003,  1004,  1005,
                  -  1006,  1007,   227,   206,  1331,   834,   227,   836,   211,   212,
                  -   213,   214,   215,   216,   217,   912,   228,   227,   227,    64,
                  -   917,   918,   916,   228,   133,   919,   227,   808,  1263,   223,
                  -   227,  1391,  1267,   228,   928,   929,   930,   931,   932,   933,
                  -   224,   228,   227,    58,   227,    34,    35,   227,   227,   176,
                  -   227,   227,    41,   228,   227,   227,   227,  1543,   227,   227,
                  -    49,  1142,   222,   227,   845,   846,   227,   194,    57,   227,
                  -   211,   227,   227,    62,   227,   856,   227,   971,   227,   227,
                  -   974,   161,   227,   977,    73,    74,  1446,    94,   227,   227,
                  -   130,   211,   206,   124,    83,   227,   227,   211,   212,   213,
                  -   214,   215,   216,   217,   130,    50,  1000,   225,  1002,  1003,
                  -  1004,  1005,  1006,  1007,    58,   228,   228,   106,   163,   227,
                  -  1014,  1015,   111,   112,   228,   225,   227,   226,  1488,  1489,
                  -  1189,  1025,  1026,   178,  1041,  1029,   228,  1223,   228,   228,
                  -   228,   206,    34,   132,   228,   228,   135,   212,   213,   214,
                  -   215,   216,   217,   228,  1514,   228,    27,   216,  1055,  1053,
                  -   225,   206,    55,   124,  1399,    57,   115,    55,   206,   214,
                  -   215,   216,   217,   201,  1409,   227,   214,   215,   216,   217,
                  -   225,    73,    74,  1598,   227,   227,  1192,   225,   227,    66,
                  -   971,   227,    82,    66,  1200,    50,  1025,    88,  1204,    10,
                  -  1206,   115,   164,  1209,  1210,  1211,  1212,  1213,  1214,  1215,
                  -  1216,   204,    54,  1219,   106,   204,   227,   226,   228,  1225,
                  -   228,   113,   114,   206,     3,   228,   228,     6,   228,   228,
                  -    13,   214,   215,   216,   217,   227,   227,   224,    17,    18,
                  -   132,    20,   225,   228,   228,    24,   228,   206,  1142,    28,
                  -    29,    30,    31,   228,   206,   214,   215,   216,   217,   211,
                  -   212,   213,   214,   215,   216,   217,   225,    65,   228,    15,
                  -   228,   228,   228,   225,   228,    58,   228,  1171,   228,  1173,
                  -   228,    64,   228,    56,   150,   228,  1067,    70,   228,  1183,
                  -   228,   228,   228,   228,  1188,   228,   228,   228,  1192,   228,
                  -    37,    37,   199,   225,   227,    84,  1200,   227,   227,   227,
                  -  1204,   227,  1206,   152,    44,  1209,  1210,  1211,  1212,  1213,
                  -  1214,  1215,  1216,    87,   228,  1219,   228,   228,   228,  1223,
                  -   228,  1225,   228,   228,   228,    90,    65,   464,   120,   228,
                  -  1234,  1235,  1236,  1237,  1238,  1239,  1253,   228,  1255,  1355,
                  -   226,   226,   205,     8,  1183,   227,   100,   225,   228,  1188,
                  -  1254,    72,   206,   490,    97,    67,  1260,   211,   212,   213,
                  -   214,   215,   216,   217,   222,   226,   228,   227,     6,   228,
                  -   163,   225,   228,   228,    89,  1444,  1621,   228,     8,   168,
                  -  1171,   228,   171,   172,   228,   178,   175,   176,    85,   178,
                  -   179,    13,   151,   182,   107,    15,   228,   186,   187,   227,
                  -   162,   190,   204,   192,   193,   194,   228,   227,   227,   120,
                  -   199,   200,   228,   206,   226,     4,   222,  1334,   211,   212,
                  -   213,   214,   215,   216,   217,  1329,   224,   228,   217,   220,
                  -   220,    50,   225,  1337,    86,    84,    58,  1559,   226,     0,
                  -  1456,     0,    64,    33,   259,  1035,   235,   559,    70,   238,
                  -   807,  1355,   403,   384,   785,   244,   800,   787,  1226,    81,
                  -  1573,  1032,  1454,  1254,  1568,  1587,  1588,     8,  1375,  1376,
                  -  1374,  1551,    13,  1523,  1555,  1609,  1043,   830,   802,  1383,
                  -  1384,  1385,  1386,  1387,  1388,  1389,  1390,   829,  1392,    27,
                  -  1612,    14,   245,   610,   283,   391,   314,  1487,  1561,   636,
                  -   637,   638,   639,  1591,  1486,   294,   196,  1041,    32,   296,
                  -  1588,   404,   841,  1599,  1569,  1600,  1592,    58,   509,  1491,
                  -  1323,  1618,   346,    64,   313,   514,   774,   316,   317,    70,
                  -  1114,   510,  1436,   193,  1532,  1173,    -1,    -1,  1329,    -1,
                  -    81,   163,   331,    -1,    -1,    -1,    -1,    88,    -1,    -1,
                  -    -1,    -1,  1456,    -1,  1458,    -1,   178,   346,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,  1483,    -1,    -1,   706,
                  -   707,   708,   709,   710,    -1,    -1,    -1,    -1,  1482,    -1,
                  -    -1,  1485,    -1,  1487,   206,    -1,   723,  1491,    -1,   211,
                  -   212,   213,   214,   215,   216,   217,   385,   386,    -1,    -1,
                  -    -1,    -1,    -1,   225,    -1,    -1,   395,    -1,    -1,    -1,
                  -    -1,    -1,   401,  1517,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   409,    -1,   163,    -1,    -1,   414,    -1,    -1,    -1,     8,
                  -    -1,    -1,   421,   422,    13,    -1,    -1,   178,   427,    -1,
                  -  1557,   430,   431,  1482,    -1,  1436,   435,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   795,  1566,
                  -   449,    -1,  1566,    -1,    -1,   206,    18,    19,    -1,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    58,
                  -    -1,    -1,    34,    35,   225,    64,    -1,   228,    -1,    41,
                  -    -1,    70,  1609,    -1,    -1,    -1,    -1,    49,    -1,   488,
                  -    -1,    -1,    81,    -1,    -1,    57,    -1,    -1,    -1,    88,
                  -    62,  1618,    -1,    -1,  1618,    -1,  1620,   506,    -1,    -1,
                  -    -1,    73,    74,   512,    76,   514,    78,    -1,    -1,    -1,
                  -    -1,    83,   558,   870,   871,    -1,    -1,    -1,    -1,  1643,
                  -    -1,    -1,   879,   880,   881,   882,   883,   884,    -1,    -1,
                  -    -1,    -1,    -1,    -1,   106,    -1,    -1,   546,    -1,   111,
                  -   112,    -1,    -1,    -1,    -1,    -1,    -1,    13,   557,    -1,
                  -    -1,    -1,    -1,    -1,   126,    -1,    -1,  1568,    -1,   916,
                  -   132,    -1,   919,   135,   163,    -1,    -1,    -1,   334,    -1,
                  -    -1,   928,   929,   930,   931,   932,   933,    -1,    -1,   178,
                  -    -1,    -1,   348,   592,    -1,   351,    -1,   353,   354,   355,
                  -   356,    -1,    58,   602,    -1,    -1,    -1,    -1,    64,    -1,
                  -    -1,   610,    -1,    -1,    70,    -1,    -1,   206,    -1,    -1,
                  -    -1,    -1,   211,   212,   213,   214,   215,   216,   217,   191,
                  -    -1,   630,    -1,    -1,    -1,    -1,   225,    -1,    -1,   228,
                  -    -1,    -1,   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,  1000,    -1,  1002,  1003,  1004,  1005,  1006,
                  -  1007,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1026,
                  -    -1,    -1,    -1,   439,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,   729,    -1,    -1,    -1,   733,   385,    -1,
                  -    -1,   737,    -1,    -1,    -1,   741,    -1,   163,    -1,   745,
                  -    -1,    -1,   468,   749,    -1,    -1,    -1,   753,    -1,    -1,
                  -    -1,   757,   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,   489,    -1,    -1,    -1,   493,    -1,   495,
                  -    -1,    -1,   498,   499,   500,   501,   502,   503,   504,   505,
                  -   206,   507,    -1,    -1,    -1,   211,   212,   213,   214,   215,
                  -   216,   217,   761,    -1,   763,    -1,    -1,    -1,    -1,   225,
                  -    -1,    -1,    -1,    -1,    -1,   774,    -1,   776,    -1,    -1,
                  -    -1,    -1,    -1,   782,    -1,    -1,   785,    -1,   787,   788,
                  -   789,   790,    -1,    -1,    -1,  1142,    -1,    -1,    -1,    -1,
                  -   799,   800,    -1,   802,    -1,    -1,    -1,    -1,    -1,   808,
                  -    -1,    -1,    -1,    -1,    -1,   814,    -1,    -1,    -1,   818,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   827,   828,
                  -   829,   830,    -1,    -1,    -1,   834,    -1,   836,   837,    -1,
                  -    -1,    -1,   841,    -1,    -1,  1192,    -1,    -1,    -1,   848,
                  -   849,   850,    -1,  1200,    -1,    -1,    -1,  1204,    -1,  1206,
                  -    -1,    -1,  1209,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
                  -    -1,    -1,  1219,    -1,    -1,    -1,    -1,    -1,  1225,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,   885,  1234,  1235,  1236,
                  -  1237,  1238,  1239,    -1,   650,    -1,   652,   653,    -1,    -1,
                  -    -1,   937,    -1,   659,    -1,    -1,    -1,    -1,   944,   945,
                  -    -1,   947,   948,  1260,   950,   951,    -1,   953,   954,    13,
                  -   956,   957,    -1,   959,   960,    -1,   962,   963,    -1,   965,
                  -   966,    -1,   110,    -1,    -1,   934,    -1,    -1,   937,    -1,
                  -    -1,    -1,    -1,   121,     8,   123,    -1,    -1,    -1,    13,
                  -   128,    -1,    -1,    -1,    -1,   711,   134,   135,    -1,    -1,
                  -   138,    -1,    -1,    -1,    58,    -1,    -1,    -1,    -1,   725,
                  -    64,   149,   971,   729,    -1,   974,    70,   733,   977,   157,
                  -    -1,   737,   160,    -1,    -1,   741,    -1,    -1,    -1,   745,
                  -  1337,    -1,   991,   749,    58,    -1,    -1,   753,    -1,    -1,
                  -    64,   757,   180,    -1,    -1,    -1,    70,    -1,  1355,    -1,
                  -   188,   189,    -1,    -1,    -1,  1014,  1015,    81,    -1,   197,
                  -    -1,    -1,    -1,    -1,    88,    -1,  1025,  1374,    -1,    -1,
                  -  1029,    -1,    13,    -1,    -1,    -1,  1383,  1384,  1385,  1386,
                  -  1387,  1388,  1389,  1390,    -1,  1392,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,  1053,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   163,
                  -    -1,    -1,    -1,    -1,  1110,    -1,    -1,    58,  1114,    -1,
                  -    -1,    -1,    -1,    64,   178,    -1,    -1,   774,    -1,    70,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   163,
                  -    -1,    -1,    -1,   859,    -1,    -1,    -1,  1143,   795,  1456,
                  -    -1,    -1,   206,    -1,   178,    -1,    -1,   873,   212,   213,
                  -   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   225,    -1,   889,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,   206,    -1,  1143,    -1,    -1,   211,   212,   213,
                  -   214,   215,   216,   217,    -1,    -1,    -1,     8,    -1,    -1,
                  -    -1,   225,    13,    -1,   228,   921,    -1,    -1,   464,    -1,
                  -  1517,    -1,  1171,    -1,  1173,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,   163,    -1,  1183,    -1,    -1,    -1,    -1,  1188,
                  -    -1,    -1,    -1,    -1,   490,    -1,    -1,   178,    -1,    -1,
                  -    -1,    -1,  1201,    -1,    -1,    -1,    -1,    58,    -1,    -1,
                  -    -1,    -1,   968,    64,    -1,    -1,    -1,     8,  1217,    70,
                  -    -1,    -1,    13,    -1,  1223,   206,    -1,    -1,    -1,    -1,
                  -    81,   212,   213,   214,   215,   216,   217,    88,    -1,    -1,
                  -    -1,    -1,    -1,  1279,   225,    -1,    -1,  1283,    -1,    -1,
                  -   937,    -1,    -1,    -1,    -1,  1254,   110,    -1,    -1,    -1,
                  -    -1,  1260,    -1,    -1,    -1,    -1,    -1,    58,    -1,   123,
                  -  1269,    -1,    -1,    64,   128,    -1,    -1,    -1,    -1,    70,
                  -   134,   135,    -1,    -1,   138,    -1,    -1,  1286,    -1,    -1,
                  -    81,    -1,    -1,    -1,    -1,   149,    -1,    88,  1297,    -1,
                  -    -1,    -1,    -1,   157,    -1,    -1,   160,    -1,    -1,    -1,
                  -    -1,    -1,   163,  1000,    -1,  1002,  1003,  1004,  1005,  1006,
                  -  1007,    -1,    -1,    -1,    -1,    -1,   180,   178,   182,    -1,
                  -  1329,  1087,  1088,  1089,   188,   189,    -1,    -1,    -1,  1026,
                  -   636,   637,   638,   639,    -1,    -1,    -1,    -1,  1347,    -1,
                  -    -1,    -1,    -1,    -1,  1353,   206,    -1,    -1,  1114,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,    -1,  1124,  1125,
                  -  1126,    -1,   163,    -1,   225,    -1,    -1,   228,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,   178,    -1,    -1,
                  -    -1,    -1,  1391,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +   170,   526,     6,   199,   800,   182,   972,   608,    25,   207,
                  +   196,   978,   237,    17,    18,   222,    20,   618,   188,   389,
                  +    24,   465,   810,   369,    28,    29,    30,    31,   846,   847,
                  +   651,   409,   653,   654,   917,  1202,   508,  1246,   537,   857,
                  +  1412,  1413,     6,    52,    18,     9,  1172,   245,    37,    50,
                  +    24,   115,    20,    37,    28,    23,     5,    31,     7,    16,
                  +     6,    38,     3,   124,    37,    52,    42,    37,   124,     8,
                  +   514,    52,     6,     6,  1235,  1236,  1237,  1238,  1239,  1240,
                  +    84,    37,    71,    51,    61,     6,   558,    37,    63,   124,
                  +   183,    60,    38,    42,    47,    53,   708,   709,   710,   711,
                  +   712,    38,    63,   320,   872,   124,  1494,  1495,     8,   873,
                  +    84,   309,    82,   725,    38,    61,   333,   313,   238,    40,
                  +   316,  1493,   222,    80,    61,    52,    94,   227,    81,    82,
                  +   107,   142,   108,    91,   107,    13,   105,  1001,    52,  1003,
                  +  1004,  1005,  1006,  1007,  1008,   122,    79,   211,   204,   356,
                  +  1538,   108,   125,   121,   922,   637,   638,   639,   640,   923,
                  +   101,   107,    95,   283,   168,   226,   119,   171,   172,   124,
                  +   107,   175,   176,   142,   178,   179,   122,  1338,   182,   525,
                  +    58,   202,   186,   187,   530,   122,   190,  1354,   192,   193,
                  +   194,   226,    70,   228,   168,   199,   200,   124,   122,   140,
                  +  1323,   115,   207,  1326,  1330,   179,   223,   226,   652,   228,
                  +   215,   188,   186,   217,  1375,   156,   205,   226,   219,  1015,
                  +  1016,   205,   160,  1384,  1385,  1386,  1387,  1388,  1389,  1390,
                  +  1391,   235,  1393,   834,   238,   184,  1119,   171,   172,   226,
                  +   244,   458,   188,   217,   178,   443,   444,   445,   222,   205,
                  +  1068,   226,   450,   874,  1642,   205,   190,    85,   192,   227,
                  +   606,   235,    99,   227,   462,  1637,   200,   206,    10,    73,
                  +   244,   226,   110,   228,   207,   214,   215,   216,   217,   283,
                  +   205,  1448,   215,   300,    57,   122,   225,    38,   137,   487,
                  +   294,   489,   141,    36,  1261,    38,   124,   643,   797,   226,
                  +    73,    47,   106,   924,   511,  1514,   206,   919,   205,   313,
                  +    61,   207,   316,   317,   214,   215,   216,   217,    61,   931,
                  +   932,   933,   934,   935,   936,   225,   223,   146,   224,  1193,
                  +   216,   217,   147,   106,   204,    81,    82,  1201,   559,   225,
                  +   357,  1205,  1509,  1207,  1511,    20,  1210,  1211,  1212,  1213,
                  +  1214,  1215,  1216,  1217,   173,   110,  1220,  1518,    10,   174,
                  +   294,   220,  1226,    13,   107,   382,   383,   384,   123,   715,
                  +    10,   122,   542,   119,   182,   205,    51,   849,    47,   122,
                  +   117,   385,   386,   581,   160,   583,   584,   585,   586,   871,
                  +    36,   395,    38,   223,   131,   765,   413,   401,   880,   881,
                  +   882,   883,   884,   885,  1287,   409,   776,   205,    58,   187,
                  +   414,   385,   386,    82,   886,    61,   194,   421,   422,    94,
                  +    70,   395,    47,   427,    58,   223,   430,   431,   815,   873,
                  +   207,   435,   819,   176,   177,  1539,  1540,   815,   205,   195,
                  +   196,   819,   204,   206,   888,   889,   121,   224,   422,   205,
                  +   119,   214,   215,   216,   217,   899,   223,    82,    67,  1563,
                  +   464,   107,   225,  1251,   206,   937,    96,  1088,  1089,  1090,
                  +    85,  1437,   214,   215,   216,   217,   122,   222,   223,   923,
                  +   223,   216,   217,   225,   227,    52,   490,   421,   492,    85,
                  +   225,    58,  1356,   427,   119,   939,   430,   431,   538,   539,
                  +   540,   226,    85,    64,   216,   217,  1127,  1128,  1129,   513,
                  +   731,   515,     4,   225,   735,   133,    64,     9,   739,  1486,
                  +   992,  1488,   743,    15,   731,    85,   747,    19,   735,   108,
                  +   751,   177,   739,  1145,   755,    58,   743,   511,   759,   226,
                  +   747,   228,   133,   547,   751,   133,   216,   217,   755,   139,
                  +   216,  1076,   759,   220,   206,   225,   902,  1082,    81,   211,
                  +   212,   213,   214,   215,   216,   217,   206,   227,   130,   216,
                  +   217,    10,   206,   225,   214,   215,   216,   217,   225,   130,
                  +   214,   215,   216,   217,   227,   225,   206,   204,   205,   593,
                  +   207,   225,   209,  1457,   214,   215,   216,   217,   143,   603,
                  +    10,    20,   163,   148,   206,   225,    25,   611,   228,    67,
                  +   212,   213,   105,   547,   159,   163,   227,   178,    37,   593,
                  +   226,    33,   228,   821,   169,   170,   226,   631,   228,   129,
                  +   178,   829,   830,   637,   638,   639,   640,   226,    85,   846,
                  +   847,   227,   207,   829,   830,   206,   227,     8,   193,   227,
                  +   857,   828,    13,   214,   215,   216,   217,   855,   206,    34,
                  +   127,  1105,    81,   226,   225,   228,   214,   215,   216,   217,
                  +   226,   869,   228,   227,   226,    94,   228,   225,   207,    20,
                  +   209,   100,    57,   206,   891,   226,    93,   228,   211,   212,
                  +   213,   214,   215,   216,   217,   227,    37,    58,    73,    74,
                  +   227,   227,   121,    64,   708,   709,   710,   711,   712,    70,
                  +   581,   227,   583,   584,   585,   586,   226,   915,   228,   940,
                  +    81,   725,   920,   921,   227,    19,   947,   948,   227,   950,
                  +   951,   106,   953,   954,   223,   956,   957,  1262,   959,   960,
                  +    81,   962,   963,   227,   965,   966,  1218,   968,   969,   227,
                  +   226,  1569,   228,    94,   226,   223,   228,   132,   762,   100,
                  +   764,   226,   226,   228,   228,   782,   226,   226,   228,   228,
                  +   226,   775,   228,   777,   226,   130,   228,   984,   227,   783,
                  +   121,   226,   786,   228,   788,   789,   790,   791,   762,   226,
                  +   764,   228,   796,   226,   811,   228,   800,   801,  1270,   803,
                  +   227,   775,   163,    10,   226,   809,   228,   222,   222,   227,
                  +   206,   815,   829,   830,   130,   819,  1288,   178,   214,   215,
                  +   216,   217,   181,    10,   828,   829,   830,   831,   107,   225,
                  +   167,   835,   186,   837,   838,   809,    85,    50,   842,   115,
                  +    52,    19,   107,   115,   115,   206,   850,   851,  1644,   783,
                  +   211,   212,   213,   214,   215,   216,   217,   791,  1056,   115,
                  +   115,  1068,   222,   111,   225,   228,    34,   871,   872,   225,
                  +   228,    52,   846,   847,   226,   222,   880,   881,   882,   883,
                  +   884,   885,   179,   857,    53,   227,    66,    23,  1332,    57,
                  +    59,   227,  1113,    66,  1264,   227,  1117,     8,  1268,    85,
                  +    69,   835,    13,   837,    88,    73,    74,   211,    77,   153,
                  +    93,   191,   158,    85,   107,   919,   211,   226,   922,   211,
                  +  1392,    90,    13,   228,   226,  1146,   125,   931,   932,   933,
                  +   934,   935,   936,  1279,   103,    22,   227,   108,   106,   228,
                  +   228,   228,   228,  1544,    52,   113,   114,    58,   106,    74,
                  +   228,   120,   227,    64,   227,   222,   133,   227,   227,    70,
                  +   228,   227,    13,   223,   132,   228,   228,    58,   972,   228,
                  +    81,   975,   224,    64,   978,  1447,   206,    88,   228,    70,
                  +   227,   211,   212,   213,   214,   215,   216,   217,   227,   227,
                  +   227,   227,   227,   227,   227,   225,   227,  1001,   972,  1003,
                  +  1004,  1005,  1006,  1007,  1008,   227,   227,    58,   227,   227,
                  +   227,  1015,  1016,    64,   211,    58,   227,  1489,  1490,    70,
                  +  1190,   227,  1026,  1027,    94,  1042,  1030,   206,  1224,   227,
                  +  1400,   227,   211,   212,   213,   214,   215,   216,   217,   227,
                  +  1410,   161,   227,  1515,   211,   227,   225,   206,   130,   228,
                  +  1054,   227,   163,   212,   213,   214,   215,   216,   217,   124,
                  +  1281,   227,   227,   227,  1285,    13,   225,   178,   130,   206,
                  +   227,   225,   163,    50,  1599,   228,   228,   214,   215,   216,
                  +   217,   228,   227,    58,   225,   227,   226,   178,   225,   228,
                  +   228,    27,  1026,   228,  1068,   206,   228,   228,   228,   228,
                  +   211,   212,   213,   214,   215,   216,   217,   228,    55,   216,
                  +    58,   124,   163,   115,   225,   206,    64,   228,     3,    82,
                  +    55,     6,    70,   214,   215,   216,   217,   178,   201,   227,
                  +   227,   227,    17,    18,   225,    20,    66,   227,   227,    24,
                  +   206,  1145,    66,    28,    29,    30,    31,    50,   214,   215,
                  +   216,   217,    10,   115,    88,   206,   164,   204,   227,   225,
                  +   211,   212,   213,   214,   215,   216,   217,    54,  1172,   228,
                  +  1174,   228,   228,   228,   225,   228,   228,   227,  1376,  1377,
                  +  1184,   227,   385,   206,   224,  1189,   228,   228,    65,  1193,
                  +   228,   214,   215,   216,   217,   228,   228,  1201,  1172,    84,
                  +   228,  1205,   225,  1207,   226,    15,  1210,  1211,  1212,  1213,
                  +  1214,  1215,  1216,  1217,   228,   163,  1220,   228,   206,   228,
                  +  1224,   228,  1226,   211,   212,   213,   214,   215,   216,   217,
                  +   178,  1235,  1236,  1237,  1238,  1239,  1240,  1254,   228,  1256,
                  +    56,   228,   228,   228,   228,   228,   228,    13,   228,   228,
                  +  1184,  1255,  1622,   150,   228,  1189,   228,  1261,   206,   228,
                  +    37,   464,    37,   211,   212,   213,   214,   215,   216,   217,
                  +   199,   225,   227,   152,   227,  1445,   227,   225,   227,    44,
                  +    87,  1255,   227,   168,   228,   228,   171,   172,   228,   492,
                  +   175,   176,    58,   178,   179,   228,   228,   182,    64,   226,
                  +   228,   186,   187,   228,    70,   190,   228,   192,   193,   194,
                  +   228,   228,    90,    65,   199,   200,   120,   226,  1335,   176,
                  +     8,   205,   227,   225,   100,    72,  1330,   228,    97,    67,
                  +   222,   227,   217,   228,  1338,  1560,   226,   194,     6,   228,
                  +   228,    89,   228,     8,    85,   228,   228,   228,   151,     8,
                  +   235,   107,  1356,   238,    13,    15,  1330,   228,   227,   244,
                  +   162,   204,  1569,  1588,  1589,   227,   227,   120,   228,  1567,
                  +     4,  1375,   228,   226,   222,   224,   220,   228,    50,   220,
                  +  1384,  1385,  1386,  1387,  1388,  1389,  1390,  1391,  1613,  1393,
                  +    86,    84,   226,     0,     0,    33,   259,   163,   283,    58,
                  +   403,  1036,   808,   384,   560,    64,   786,   801,  1455,   294,
                  +   788,    70,   178,  1227,  1033,  1552,  1574,  1524,  1556,   803,
                  +  1610,  1619,    81,  1044,    27,   245,   831,   830,   313,    88,
                  +   391,   316,   317,  1437,   637,   638,   639,   640,    14,   314,
                  +   206,   611,  1488,  1562,  1592,  1487,   331,   110,   214,   215,
                  +   216,   217,   196,  1457,   296,  1459,  1589,  1042,   121,   225,
                  +   123,   346,    32,  1437,  1600,   128,   842,  1484,  1570,  1593,
                  +  1601,   134,   135,   404,   510,   138,  1492,  1324,  1619,  1483,
                  +   346,  1117,  1486,   193,  1488,   515,   149,   511,  1492,  1533,
                  +   775,  1174,    -1,    -1,   157,    -1,    -1,   160,    -1,    -1,
                  +   385,   386,    -1,    -1,   163,   708,   709,   710,   711,   712,
                  +   395,    -1,    -1,    -1,  1518,    -1,   401,   180,    -1,   178,
                  +    -1,    -1,   725,    -1,   409,   188,   189,    -1,    -1,   414,
                  +    -1,    -1,    -1,    -1,   197,    -1,   421,   422,    -1,    -1,
                  +    -1,  1558,   427,    -1,    -1,   430,   431,   206,    -1,  1483,
                  +   435,    -1,   211,   212,   213,   214,   215,   216,   217,    13,
                  +    -1,    -1,    -1,  1567,   449,    -1,   225,    -1,    -1,   228,
                  +     8,    -1,   775,    -1,    -1,    13,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   706,   707,   708,   709,   710,   206,    -1,    -1,    -1,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,   723,    -1,    -1,
                  -  1429,    -1,    -1,    -1,   225,   226,    -1,  1436,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1446,  1447,    -1,
                  -    -1,    -1,    -1,    -1,    -1,  1454,  1143,    -1,    -1,  1458,
                  +    -1,    -1,    -1,  1610,    -1,  1569,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    58,   490,    -1,   464,    -1,    -1,
                  +    64,    -1,    -1,    -1,     8,  1619,    70,  1621,    -1,    13,
                  +    58,    -1,    -1,   508,    -1,    -1,    64,    81,   513,    -1,
                  +   515,    -1,    70,    -1,    -1,   492,    -1,    -1,    -1,    -1,
                  +  1644,     8,    -1,    81,    -1,    -1,    13,    -1,    -1,    -1,
                  +    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   547,    -1,    58,    -1,    -1,    -1,   871,   872,
                  +    64,    -1,    -1,   558,    -1,    -1,    70,   880,   881,   882,
                  +   883,   884,   885,    -1,    -1,    -1,    -1,    81,    -1,    -1,
                  +    -1,    58,    -1,    -1,    88,    -1,    -1,    64,    -1,    -1,
                  +    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,   593,   163,
                  +    -1,    -1,    -1,    -1,    81,    -1,   919,    -1,   603,   922,
                  +    -1,    88,    -1,    -1,   178,   163,   611,    -1,   931,   932,
                  +   933,   934,   935,   936,    -1,    -1,    -1,    -1,    -1,    -1,
                  +   178,    -1,    -1,    -1,    -1,    -1,   631,    -1,    -1,    -1,
                  +    -1,    -1,   206,    -1,    -1,    -1,    -1,   211,   212,   213,
                  +   214,   215,   216,   217,    -1,    -1,    -1,    -1,   206,   163,
                  +    -1,   225,    -1,   211,   212,   213,   214,   215,   216,   217,
                  +   637,   638,   639,   640,   178,    -1,    -1,   225,    -1,    -1,
                  +   228,    -1,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,   178,   206,    -1,    -1,    -1,    -1,   211,   212,   213,
                  +   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,   225,    -1,    -1,   228,    -1,    -1,    -1,    -1,   206,
                  +    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,
                  +   217,   708,   709,   710,   711,   712,    -1,    -1,   225,    -1,
                  +    -1,   228,    -1,    -1,    -1,    -1,    -1,    -1,   725,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   762,    -1,   764,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +   775,    -1,   777,    -1,    -1,    -1,    -1,    -1,   783,    -1,
                  +    -1,   786,    -1,   788,   789,   790,   791,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,   800,   801,    -1,   803,    -1,
                  +    -1,    -1,    -1,    -1,   809,    -1,    -1,    -1,    -1,    -1,
                  +   815,    -1,    -1,    -1,   819,   385,    -1,    -1,    -1,   796,
                  +    -1,    -1,  1145,   828,   829,   830,   831,    -1,    -1,    -1,
                  +   835,    -1,   837,   838,    -1,    -1,     8,   842,    -1,    -1,
                  +    -1,    13,    -1,    -1,   849,   850,   851,    -1,    34,    35,
                  +    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    49,    -1,    -1,    -1,     8,    -1,    -1,
                  +    -1,    57,    13,    -1,    -1,    -1,    62,    -1,    -1,    -1,
                  +    -1,   886,    -1,    -1,    -1,    -1,    58,    73,    74,    -1,
                  +    -1,    -1,    64,    -1,   871,   872,    -1,    83,    70,    -1,
                  +    -1,    -1,    -1,   880,   881,   882,   883,   884,   885,    81,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    88,    58,    -1,    -1,
                  +   106,    -1,    -1,    64,    -1,   111,   112,    -1,    -1,    70,
                  +    -1,    -1,   937,    -1,    -1,   940,    -1,    -1,    -1,    -1,
                  +    81,    -1,   919,    -1,    -1,   922,   132,    88,    -1,   135,
                  +    -1,    -1,    -1,    -1,   931,   932,   933,   934,   935,   936,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   972,    -1,    -1,
                  +   975,    -1,    -1,   978,    -1,    -1,   334,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   992,    -1,    -1,
                  +   348,   163,    -1,   351,    -1,   353,   354,   355,   356,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,   178,    -1,    -1,    -1,
                  +  1015,  1016,    -1,    -1,    -1,    -1,    -1,    -1,   204,    -1,
                  +    -1,  1026,   163,    -1,  1001,  1030,  1003,  1004,  1005,  1006,
                  +  1007,  1008,    -1,    -1,   206,    -1,    -1,   178,    -1,   211,
                  +   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,  1054,
                  +  1027,    -1,    -1,   225,   226,    -1,    -1,    -1,    -1,    -1,
                  +    -1,   419,    -1,    -1,    -1,   206,    -1,    -1,    -1,    -1,
                  +   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
                  +    -1,   439,    -1,    -1,   225,   226,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,  1482,    -1,    -1,  1485,    -1,  1487,  1488,
                  -  1489,    -1,  1491,    -1,    -1,    -1,    -1,    -1,    -1,   795,
                  -    -1,    -1,    -1,    -1,    -1,  1192,    -1,    -1,    -1,  1508,
                  -    -1,  1510,    -1,  1200,  1201,  1514,     8,  1204,    -1,  1206,
                  -    -1,    13,  1209,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
                  -    -1,    -1,  1219,    -1,    -1,    -1,    -1,    -1,  1225,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1234,  1235,  1236,
                  -  1237,  1238,  1239,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    58,  1566,    -1,    -1,
                  -    -1,    -1,    64,    -1,   870,   871,  1332,    -1,    70,    -1,
                  -    -1,    -1,    -1,   879,   880,   881,   882,   883,   884,    81,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,    -1,
                  -  1297,    -1,    -1,    13,    -1,    -1,    -1,    -1,    -1,  1618,
                  -   916,  1620,    -1,   919,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,   928,   929,   930,   931,   932,   933,    -1,    -1,
                  -    -1,   937,    -1,    -1,  1643,    -1,    -1,    -1,    -1,    -1,
                  -  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,
                  -  1347,    -1,    -1,    -1,    64,    -1,  1353,    -1,  1355,    -1,
                  -    70,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    81,    -1,    -1,    -1,    -1,   178,  1374,    88,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,  1383,  1384,  1385,  1386,
                  -  1387,  1388,  1389,  1390,  1000,  1392,  1002,  1003,  1004,  1005,
                  -  1006,  1007,    -1,    -1,   206,    -1,    -1,    -1,    -1,   211,
                  -   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,    -1,
                  -  1026,    -1,    -1,   225,    -1,    -1,   228,    -1,    -1,    -1,
                  -    -1,    -1,  1429,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
                  +   468,    -1,    11,    -1,    13,    -1,    -1,    -1,   476,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -  1447,    -1,    -1,   163,    -1,    -1,    -1,  1454,    -1,  1456,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,   178,    -1,
                  -    11,    -1,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -  1546,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
                  -    -1,    -1,    -1,    -1,    13,    -1,   206,    -1,    39,  1565,
                  -    -1,   211,   212,   213,   214,   215,   216,   217,    -1,     8,
                  -    -1,  1508,    -1,  1510,    13,   225,   226,    58,    -1,    -1,
                  -  1517,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    70,
                  -    -1,    -1,    -1,    -1,  1600,    -1,  1142,  1143,    -1,    58,
                  -    81,    -1,    -1,    -1,    -1,    64,    -1,    88,    -1,    -1,
                  -    -1,    70,    -1,    52,    -1,    -1,    -1,    -1,    -1,    58,
                  -    -1,    -1,    81,    -1,    -1,    64,    -1,    -1,    -1,    88,
                  -    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    81,   124,    -1,    -1,  1192,    -1,    -1,    88,
                  -    -1,    -1,    -1,    -1,  1200,  1201,    -1,    -1,  1204,    -1,
                  -  1206,    -1,    -1,  1209,  1210,  1211,  1212,  1213,  1214,  1215,
                  -  1216,    -1,    -1,  1219,    -1,    -1,    -1,    -1,    -1,  1225,
                  -    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,  1234,  1235,
                  -  1236,  1237,  1238,  1239,    -1,    -1,    -1,   178,    -1,    -1,
                  -    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,
                  +     8,    -1,    -1,   491,    -1,    13,    -1,   495,    -1,   497,
                  +    39,  1146,   500,   501,   502,   503,   504,   505,   506,   507,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
                  +    -1,    -1,    -1,    -1,    -1,    64,    -1,  1172,  1145,  1174,
                  +    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1184,
                  +    58,    -1,    81,    -1,  1189,    -1,    64,    -1,    -1,    88,
                  +    -1,    -1,    70,    -1,    -1,    -1,    -1,  1202,    -1,    -1,
                  +    -1,    -1,    -1,    81,    -1,   775,    -1,    -1,    -1,    -1,
                  +    88,    -1,    -1,  1218,    -1,    -1,  1193,    -1,    -1,  1224,
                  +    -1,    -1,    -1,    -1,  1201,   124,   796,    -1,  1205,    -1,
                  +  1207,    -1,    -1,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
                  +  1217,    -1,    -1,  1220,    -1,    -1,    -1,    -1,    -1,  1226,
                  +  1255,    -1,    -1,    -1,    -1,    -1,  1261,    -1,  1235,  1236,
                  +  1237,  1238,  1239,  1240,   163,  1270,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   178,
                  -    -1,    -1,    -1,    -1,   163,   206,    -1,    -1,    -1,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,    -1,    -1,   178,
                  -    -1,    -1,    -1,    -1,   225,    -1,    -1,   206,    -1,    -1,
                  -    -1,  1297,   211,   212,   213,   214,   215,   216,   217,    -1,
                  -   219,    -1,    -1,    -1,    -1,   224,   225,   206,    -1,    -1,
                  +    -1,    -1,    -1,  1288,  1261,   163,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,   651,  1299,   653,   654,    -1,    -1,    -1,
                  +   178,    -1,    -1,   661,    -1,    -1,    -1,   206,    -1,    -1,
                       -1,    -1,   211,   212,   213,   214,   215,   216,   217,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,   225,    -1,    -1,    -1,
                  -    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,  1347,    -1,    -1,    -1,    -1,    -1,  1353,    -1,  1355,
                  +    -1,    -1,     8,    -1,    10,  1330,   225,    13,   206,    -1,
                  +    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
                  +    -1,   219,    -1,  1348,    -1,    -1,   224,   225,    -1,  1354,
                  +    -1,    -1,    -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,
                  +    -1,  1338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   727,
                  +   940,    -1,    58,   731,    -1,    -1,    -1,   735,    64,  1356,
                  +    -1,   739,    -1,    -1,    70,   743,    -1,  1392,    -1,   747,
                  +    -1,     8,    -1,   751,    -1,    81,    13,   755,  1375,    -1,
                  +    -1,   759,    88,    -1,    -1,    -1,    -1,  1384,  1385,  1386,
                  +  1387,  1388,  1389,  1390,  1391,    -1,  1393,    -1,    13,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,  1431,    -1,   464,    -1,
                  +    -1,  1001,  1437,  1003,  1004,  1005,  1006,  1007,  1008,    -1,
                  +    -1,    58,  1447,  1448,    -1,    -1,    -1,    64,    -1,    -1,
                  +  1455,    -1,    -1,    70,  1459,    -1,   492,  1027,    -1,    -1,
                  +    -1,    -1,    -1,    58,    81,    -1,    -1,    -1,    -1,    64,
                  +    -1,    88,    -1,    -1,    -1,    70,    -1,   163,  1483,    -1,
                  +  1457,  1486,    -1,  1488,  1489,  1490,    -1,  1492,    -1,    -1,
                  +    -1,    -1,   178,    -1,     8,    -1,    -1,    -1,    -1,    13,
                  +    -1,    -1,   860,    -1,  1509,    -1,  1511,    -1,    -1,    -1,
                  +  1515,    -1,    -1,    13,    -1,    -1,   874,    -1,    -1,    -1,
                  +   206,    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,
                  +   216,   217,   890,    -1,    -1,    -1,    -1,    -1,    52,   225,
                  +    -1,  1518,    -1,   901,    58,    -1,   163,    -1,    -1,    -1,
                  +    64,    -1,    -1,    -1,    -1,    -1,    70,    -1,    58,    -1,
                  +    -1,   178,  1567,    -1,    64,    -1,   924,    81,   163,    -1,
                  +    70,    -1,    -1,    -1,    88,    -1,  1146,    -1,    -1,    -1,
                  +    -1,    -1,    -1,   178,    -1,    -1,    -1,    -1,    -1,   206,
                  +    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,
                  +   217,   637,   638,   639,   640,    -1,    -1,   224,   225,    -1,
                  +    -1,   206,    -1,    -1,  1619,    -1,  1621,   212,   213,   214,
                  +   215,   216,   217,  1193,    -1,    -1,    -1,    -1,    -1,    -1,
                  +   225,  1201,  1202,    -1,    -1,  1205,    -1,  1207,    -1,  1644,
                  +  1210,  1211,  1212,  1213,  1214,  1215,  1216,  1217,    -1,   163,
                  +  1220,    -1,    -1,    -1,    -1,    -1,  1226,    -1,    -1,    -1,
                  +    -1,    -1,    -1,   163,   178,  1235,  1236,  1237,  1238,  1239,
                  +  1240,    -1,   708,   709,   710,   711,   712,    -1,   178,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   725,
                  +    -1,    -1,   206,    -1,    -1,    -1,    -1,   211,   212,   213,
                  +   214,   215,   216,   217,    -1,    -1,   206,    -1,    -1,    -1,
                  +    -1,   225,   212,   213,   214,   215,   216,   217,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,   225,    -1,    -1,    -1,  1299,
                  +  1088,  1089,  1090,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1374,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1383,  1384,  1385,
                  -  1386,  1387,  1388,  1389,  1390,    -1,  1392,    -1,    -1,    -1,
                  -     3,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    17,    18,    19,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
                  -    -1,    34,    35,  1429,    -1,    -1,    -1,    -1,    41,    -1,
                  -    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
                  -    -1,  1447,    -1,    -1,    57,    -1,    -1,    60,  1454,    62,
                  -  1456,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
                  -    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,
                  -    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
                  -    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
                  -    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
                  -   113,   114,  1508,    -1,  1510,   118,   119,    -1,    -1,    -1,
                  -   123,  1517,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
                  -   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
                  -   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
                  -   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
                  -   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
                  -   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
                  -   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
                  -   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
                  -   203,   204,   205,   206,   207,   208,   209,     3,     4,    -1,
                  -    -1,    -1,   215,   216,    -1,   218,   219,   220,    -1,    -1,
                  -    -1,    17,    18,    19,   227,   228,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
                  -    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
                  -    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
                  -    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
                  -    76,    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,
                  -    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,
                  -    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
                  -   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,
                  -    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1117,
                  +   796,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1338,  1127,
                  +  1128,  1129,    -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,
                  +    -1,    -1,    -1,    -1,  1354,    -1,  1356,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,  1375,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,  1384,  1385,  1386,  1387,  1388,  1389,
                  +  1390,  1391,    -1,  1393,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,   871,   872,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,   880,   881,   882,   883,   884,   885,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,  1431,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1448,    -1,
                  +    -1,    -1,    -1,   919,    -1,  1455,   922,  1457,    -1,    -1,
                  +    -1,    18,    19,    -1,    -1,   931,   932,   933,   934,   935,
                  +   936,    -1,    -1,    -1,   940,    -1,    -1,    34,    35,    -1,
                  +    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,  1509,
                  +    -1,  1511,    -1,    -1,    -1,    -1,    73,    74,  1518,    76,
                  +    -1,    78,    -1,    -1,    -1,    -1,    83,    -1,     3,     4,
                  +    -1,    -1,    -1,    -1,    -1,  1001,    -1,  1003,  1004,  1005,
                  +  1006,  1007,  1008,    18,    19,  1333,    -1,    -1,    -1,   106,
                  +    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,    -1,    34,
                  +    35,  1027,    -1,    -1,    -1,    -1,    41,    -1,    -1,   126,
                  +    -1,    -1,    -1,    -1,    49,   132,    -1,    -1,   135,    -1,
                  +    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
                  +    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  +    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  +   105,   106,    -1,   190,   191,    -1,   111,    -1,   113,   114,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,    -1,    -1,
                  +    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                  +   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                  +    -1,   146,   147,   148,   149,   150,    -1,   152,   153,  1145,
                  +  1146,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
                  +    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  +    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,  1193,   203,   204,
                  +    -1,    -1,     8,    -1,    10,  1201,  1202,    13,    -1,  1205,
                  +    -1,  1207,    -1,    -1,  1210,  1211,  1212,  1213,  1214,  1215,
                  +  1216,  1217,    -1,   228,  1220,    -1,    -1,    -1,    -1,  1547,
                  +  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1235,
                  +  1236,  1237,  1238,  1239,  1240,    -1,    -1,    -1,  1566,    -1,
                  +    -1,    -1,    58,    -1,    -1,    -1,    -1,    -1,    64,    -1,
                  +    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    18,    19,
                  +    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    88,  1601,    34,    35,    -1,    -1,    -1,    -1,
                  +    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
                  +    -1,    -1,    -1,  1299,    -1,    -1,    -1,    57,    -1,    -1,
                  +    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    73,    74,    -1,    76,    -1,    78,    -1,
                  +    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,  1338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,  1348,    -1,    -1,    -1,   106,   163,  1354,    -1,
                  +  1356,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   178,    -1,    -1,    -1,   126,    -1,    -1,  1375,
                  +    -1,    -1,   132,    -1,    -1,   135,    -1,    -1,  1384,  1385,
                  +  1386,  1387,  1388,  1389,  1390,  1391,    -1,  1393,    -1,    -1,
                  +   206,     3,     4,    -1,    -1,   211,   212,   213,   214,   215,
                  +   216,   217,    -1,    -1,    -1,    17,    18,    19,    -1,   225,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
                  +    32,    -1,    34,    35,    -1,  1431,    -1,    -1,    -1,    41,
                  +    -1,   191,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
                  +    -1,    -1,  1448,    -1,   204,    57,    -1,    -1,    60,  1455,
                  +    62,  1457,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                  +    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
                  +    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  +    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  +    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
                  +   112,   113,   114,  1509,    -1,  1511,   118,   119,    -1,    -1,
                  +    -1,   123,  1518,    -1,   126,    -1,    -1,    -1,    -1,    -1,
                  +   132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
                  +    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
                  +   152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
                  +   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
                  +   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  +   182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
                  +    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  +    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
                  +    -1,    -1,    -1,   215,   216,    -1,   218,   219,   220,    -1,
                  +    -1,    -1,    17,    18,    19,   227,   228,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
                  +    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  +    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                  +    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  +    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
                  +    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  +   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
                  +    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,
                  +    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                  +   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                  +    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                  +    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
                  +    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  +    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
                  +   205,   206,   207,   208,   209,     3,     4,    -1,    -1,    -1,
                  +   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
                  +    18,    19,   227,   228,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
                  +    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
                  +    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
                  +    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
                  +    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
                  +    78,    79,    -1,    81,    82,    83,    84,    -1,    86,    87,
                  +    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
                  +    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                  +    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
                  +   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
                  +    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                  +   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  +   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                  +   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                  +    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,
                  +   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  +   188,   189,   190,   191,    -1,   193,   194,   195,   196,   197,
                  +    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,
                  +   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,
                  +   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,
                  +   228,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
                  +    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,
                  +    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
                  +    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
                  +    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,
                  +    -1,    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
                  +   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
                  +   111,   112,   113,   114,    -1,    -1,    -1,    -1,   119,    -1,
                  +    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,
                  +    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
                  +   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
                  +    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
                  +   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
                  +    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
                  +   181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
                  +   191,    -1,   193,   194,   195,   196,   197,     3,     4,    -1,
                  +   201,    -1,   203,   204,   205,   206,   207,   208,   209,    -1,
                  +    -1,    17,    18,    19,   215,    -1,    -1,   218,   219,   220,
                  +    -1,    -1,    -1,    -1,   110,    -1,   227,   228,    34,    35,
                  +    -1,    -1,    -1,    -1,    -1,    41,    -1,   123,    -1,    -1,
                  +    -1,    47,   128,    49,    -1,    -1,    -1,    -1,   134,   135,
                  +    -1,    57,   138,    -1,    60,    -1,    62,    -1,    -1,    -1,
                  +    66,    67,    -1,   149,    -1,    -1,    72,    73,    74,    -1,
                  +    76,   157,    78,    79,   160,    81,    82,    83,    84,    -1,
                  +    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
                  +    96,    -1,    -1,    99,   180,   101,   182,    -1,    -1,   105,
                  +   106,    -1,   188,   189,    -1,   111,   112,   113,   114,    -1,
                  +    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,
                      126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
                       -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,
                      146,   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,
                      156,   157,   158,   159,   160,   161,   162,   163,   164,    -1,
                  -    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,
                  +    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,
                      176,    -1,   178,   179,   180,   181,   182,   183,   184,    -1,
                      186,   187,   188,   189,   190,   191,    -1,   193,   194,   195,
                      196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,
                      206,   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,
                  -    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,
                  +    -1,    -1,   218,   219,   220,    14,    -1,    -1,    17,    18,
                       19,   227,   228,    -1,    -1,    -1,    -1,    -1,    -1,    28,
                       29,    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,
                       -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,
                  -    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
                  -    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
                  +    49,    -1,    -1,    52,    -1,    -1,    -1,    -1,    57,    -1,
                  +    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    68,
                       -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
                       79,    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,
                       -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,
                       99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
                  -   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,
                  +   109,    -1,   111,   112,   113,   114,    -1,   116,    -1,   118,
                      119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,
                       -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
                       -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
                  @@ -3390,149 +3463,174 @@ static const short yycheck[] = {     3,
                      189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
                       -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
                      209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,
                  -   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,   228,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
                  +   219,   220,    14,    -1,    -1,    17,    18,    19,   227,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
                       32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
                  -    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
                  -    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                  -    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,
                  -    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  -    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
                  -   112,   113,   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,
                  +    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
                  +    52,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
                  +    62,    -1,    -1,    -1,    66,    67,    68,    -1,    -1,    -1,
                  +    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
                  +    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  +    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  +    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
                  +   112,   113,   114,    -1,   116,    -1,   118,   119,    -1,    -1,
                       -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
                      132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
                       -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
                      152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
                      162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
                  -    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  +   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                      182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
                  -    -1,   193,   194,   195,   196,   197,     3,     4,    -1,   201,
                  -    -1,   203,   204,   205,   206,   207,   208,   209,    -1,    -1,
                  -    17,    18,    19,   215,    -1,    -1,   218,   219,   220,    -1,
                  -    -1,    -1,    -1,    -1,    -1,   227,   228,    34,    35,    -1,
                  -    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
                  -    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,
                  -    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,
                  -    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,    86,
                  -    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
                  -    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
                  -    -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,    -1,
                  -    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,   126,
                  -    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
                  -   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
                  -   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
                  -   157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
                  -   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,
                  -    -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
                  -   187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
                  -   197,     3,     4,    -1,   201,    -1,   203,   204,   205,   206,
                  -   207,   208,   209,    -1,    -1,    -1,    18,    19,   215,    -1,
                  -    -1,   218,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   227,   228,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
                  +    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  +    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
                  +    -1,    -1,    -1,   215,    -1,    -1,   218,   219,   220,    14,
                  +    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
                  +    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  +    45,    46,    47,    -1,    49,    -1,    -1,    52,    -1,    -1,
                  +    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                  +    -1,    66,    67,    68,    -1,    -1,    -1,    72,    73,    74,
                  +    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
                  +    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  +   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
                  +    -1,   116,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,
                  +    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                  +   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                  +    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                  +    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
                  +    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  +    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
                  +   205,   206,   207,   208,   209,     3,     4,    -1,    -1,    -1,
                  +   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
                  +    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
                  +    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
                  +    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
                  +    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
                  +    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
                  +    78,    79,    -1,    81,    82,    83,    84,    -1,    86,    87,
                  +    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
                  +    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                  +    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
                  +   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
                  +    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                  +   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  +   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                  +   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                  +    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,
                  +   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  +   188,   189,   190,   191,    -1,   193,   194,   195,   196,   197,
                  +    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,
                  +   208,   209,    -1,    -1,    -1,    -1,    -1,   215,   216,    -1,
                  +   218,   219,   220,    -1,     3,     4,    -1,     6,    -1,   227,
                  +     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    17,    18,
                  +    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
                  +    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,
                  +    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,
                  +    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
                  +    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
                  +    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
                  +    79,    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,
                  +    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,
                  +    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
                  +   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,
                  +   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,
                  +    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
                  +    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
                  +   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
                  +   159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
                  +   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,
                  +   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
                  +   189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
                  +    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
                  +   209,     3,     4,    -1,     6,    -1,   215,     9,    -1,   218,
                  +   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
                  +    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
                  +    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
                  -    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                  -    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,
                  +    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                  +    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
                       -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  -    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
                  -    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
                  +    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  +    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
                  +   112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,
                  +    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
                      132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
                       -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
                      152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
                      162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
                  -    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  -   182,   183,   184,    -1,   186,   187,   188,   189,   190,     3,
                  -     4,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  -    14,   203,   204,    17,    18,    19,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
                  -    34,    35,    -1,    -1,    -1,    -1,   228,    41,    -1,    -1,
                  -    -1,    45,    46,    47,    -1,    49,    -1,    -1,    52,    -1,
                  -    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,
                  -    -1,    -1,    66,    67,    68,    -1,    -1,    -1,    72,    73,
                  -    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,
                  -    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,
                  -    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
                  -    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,
                  -   114,    -1,   116,    -1,   118,   119,    -1,    -1,    -1,   123,
                  -    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,
                  -   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
                  -    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
                  -    -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
                  -   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,
                  -   174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
                  -   184,    -1,   186,   187,   188,   189,   190,   191,    -1,   193,
                  -   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,
                  -   204,   205,   206,   207,   208,   209,     3,     4,    -1,    -1,
                  -    -1,   215,    -1,    -1,   218,   219,   220,    14,    -1,    -1,
                  -    17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    -1,
                  -    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,
                  -    47,    -1,    49,    -1,    -1,    52,    -1,    -1,    -1,    -1,
                  -    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,
                  -    67,    68,    -1,    -1,    -1,    72,    73,    74,    -1,    76,
                  -    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,    86,
                  -    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,
                  -    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
                  -    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,   116,
                  -    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,
                  -    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
                  -   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
                  -   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
                  -   157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
                  -   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,
                  -    -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
                  -   187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
                  -   197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,
                  -   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,
                  -    -1,   218,   219,   220,    14,    -1,    -1,    17,    18,    19,
                  -   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
                  -    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
                  -    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
                  -    -1,    -1,    52,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                  -    60,    -1,    62,    -1,    -1,    -1,    66,    67,    68,    -1,
                  -    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
                  -    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
                  -    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,
                  -    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,
                  -    -1,   111,   112,   113,   114,    -1,   116,    -1,   118,   119,
                  -    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,
                  -    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
                  -   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                  -   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
                  -   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
                  -   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,
                  -   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                  -   190,   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,
                  -    -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
                  -     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
                  -   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
                  -    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
                  -    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,
                  -    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
                  -    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,
                  -    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
                  -    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
                  -    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
                  -   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
                  -   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
                  -   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
                  -   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
                  -   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
                  -   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
                  -   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
                  -   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
                  -   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
                  -   203,   204,   205,   206,   207,   208,   209,    -1,    -1,    -1,
                  -    -1,    -1,   215,   216,    -1,   218,   219,   220,    -1,     3,
                  -     4,    -1,     6,    -1,   227,     9,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    17,    18,    19,    -1,    -1,    -1,    -1,
                  +   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  +   182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
                  +    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  +    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
                  +    -1,     6,    -1,   215,     9,    -1,   218,   219,   220,    -1,
                  +    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
                  +    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  +    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                  +    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  +    -1,    76,    -1,    78,    79,    -1,    81,    -1,    83,    84,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
                  +    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  +   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
                  +    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,
                  +    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                  +   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                  +    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                  +    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
                  +    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  +    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
                  +   205,   206,   207,   208,   209,     3,     4,    -1,     6,    -1,
                  +   215,     9,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
                  +    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
                  +    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
                  +    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
                  +    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
                  +    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
                  +    78,    79,    -1,    81,    -1,    83,    84,    -1,    86,    87,
                  +    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
                  +    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                  +    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
                  +   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
                  +    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                  +   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  +   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                  +   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                  +    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,
                  +   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  +   188,   189,   190,   191,    -1,   193,   194,   195,   196,   197,
                  +    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,
                  +   208,   209,     3,     4,    -1,     6,    -1,   215,     9,    -1,
                  +   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
                  +    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,
                  +    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
                  +    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
                  +    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,
                  +    81,    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
                  +    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
                  +   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,
                  +   111,   112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,
                  +    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,
                  +    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
                  +   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
                  +    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
                  +   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
                  +    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,   180,
                  +   181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
                  +   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,
                  +   201,    -1,   203,   204,   205,   206,   207,   208,   209,     3,
                  +     4,    -1,     6,    -1,   215,     9,    -1,   218,   219,   220,
                  +    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
                       34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
                       -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
                  @@ -3572,15 +3670,15 @@ static const short yycheck[] = {     3,
                       -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
                      187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
                      197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,
                  -   207,   208,   209,     3,     4,    -1,     6,    -1,   215,     9,
                  +   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,
                       -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,
                      227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
                       30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
                       -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                  +    -1,    -1,    52,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                       60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,
                       -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
                  -    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,    -1,
                  +    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
                       -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,
                       -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,
                       -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,   119,
                  @@ -3593,17 +3691,17 @@ static const short yycheck[] = {     3,
                      180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                      190,   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,
                       -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
                  -     3,     4,    -1,     6,    -1,   215,     9,    -1,   218,   219,
                  +     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
                      220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
                       -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
                       -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,
                       -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
                  -    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    -1,
                  +    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,
                       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
                       -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
                  -    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
                  +    -1,    -1,   105,   106,   107,    -1,   109,    -1,   111,   112,
                      113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
                      123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
                      133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
                  @@ -3614,14 +3712,14 @@ static const short yycheck[] = {     3,
                      183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
                      193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
                      203,   204,   205,   206,   207,   208,   209,     3,     4,    -1,
                  -     6,    -1,   215,     9,    -1,   218,   219,   220,    -1,    -1,
                  +    -1,    -1,   215,    -1,    -1,   218,   219,   220,    -1,    -1,
                       -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
                       -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
                       46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
                       66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
                  -    76,    -1,    78,    79,    -1,    81,    -1,    83,    84,    -1,
                  +    76,    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,
                       86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,
                       96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
                      106,    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,
                  @@ -3642,7 +3740,7 @@ static const short yycheck[] = {     3,
                       49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
                       -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
                       -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
                  -    79,    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,
                  +    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,    -1,
                       -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,
                       99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
                      109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,
                  @@ -3655,7 +3753,7 @@ static const short yycheck[] = {     3,
                      179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
                      189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
                       -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
                  -   209,     3,     4,    -1,     6,    -1,   215,     9,    -1,   218,
                  +   209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,
                      219,   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
                       32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
                  @@ -3665,7 +3763,7 @@ static const short yycheck[] = {     3,
                       72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
                       -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                       92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  -    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
                  +    -1,    -1,    -1,   105,   106,   107,    -1,   109,    -1,   111,
                      112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,
                       -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
                      132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
                  @@ -3680,10 +3778,10 @@ static const short yycheck[] = {     3,
                       -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
                       35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  -    45,    46,    47,    -1,    49,    -1,    -1,    52,    -1,    -1,
                  +    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  -    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
                  +    -1,    76,    -1,    78,    79,    -1,    81,    -1,    83,    84,
                       -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
                       95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                      105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
                  @@ -3700,13 +3798,13 @@ static const short yycheck[] = {     3,
                      215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
                       18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
                  -    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
                  +    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,
                       -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
                       -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
                       -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
                  -    78,    79,    -1,    81,    82,    83,    84,    -1,    86,    87,
                  +    78,    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,
                       -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
                  -    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,   107,
                  +    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                       -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
                      118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
                       -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                  @@ -3721,11 +3819,11 @@ static const short yycheck[] = {     3,
                      218,   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
                       31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,
                  -    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,
                  +    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
                       -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
                       -1,    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,
                  -    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
                  +    -1,    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
                       -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
                      101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,
                      111,   112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,
                  @@ -3738,173 +3836,89 @@ static const short yycheck[] = {     3,
                      181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
                      191,    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,
                      201,    -1,   203,   204,   205,   206,   207,   208,   209,     3,
                  -     4,    -1,     6,    -1,   215,     9,    -1,   218,   219,   220,
                  +     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,   220,
                       -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    -1,
                       34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
                  -    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,
                       -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
                  -    74,    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,
                  -    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,
                  +    74,    -1,    76,    -1,    78,    79,    -1,    -1,    82,    83,
                  +    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
                  -    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,
                  -   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,   123,
                  +    -1,   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,
                  +   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,   123,
                       -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,
                      134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
                       -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
                       -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
                  -   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,
                  +   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,
                      174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
                      184,    -1,   186,   187,   188,   189,   190,   191,    -1,   193,
                      194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,
                      204,   205,   206,   207,   208,   209,     3,     4,    -1,    -1,
                       -1,   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,
                       17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    -1,
                  -    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,
                  +    -1,    -1,    29,    30,    31,    32,    -1,    34,    35,    -1,
                  +    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
                       47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,
                       67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,
                  -    -1,    78,    79,    -1,    81,    -1,    83,    84,    -1,    86,
                  -    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,
                  +    -1,    78,    79,    -1,    -1,    -1,    83,    84,    -1,    86,
                  +    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
                       -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
                  -   107,    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,
                  -    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,
                  +    -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,    -1,
                  +    -1,    -1,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,
                       -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
                      137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
                      147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
                      157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
                  -   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,
                  +   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,
                       -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
                      187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
                      197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,
                      207,   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,
                       -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,
                  -   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
                  +   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
                       30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
                  -    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
                  +    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                       60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,
                       -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
                  -    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,    -1,
                  -    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,
                  -    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,
                  -    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,   119,
                  +    -1,    -1,    -1,    83,    84,    -1,    86,    87,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
                  +    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
                  +    -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,   119,
                       -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,
                       -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
                      140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                      150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
                      160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
                  -   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,
                  +   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
                      180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                  -   190,   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,
                  +   190,   191,    -1,   193,   194,   195,   196,   197,     3,     4,
                       -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
                  -     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
                  -   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
                  -    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
                  -    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,
                  -    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
                  -    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,    -1,
                  -    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
                  -    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
                  -    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
                  -   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
                  -   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
                  -   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
                  -   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
                  -   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
                  -   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
                  -   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
                  -   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
                  -   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
                  -   203,   204,   205,   206,   207,   208,   209,     3,     4,    -1,
                  -    -1,    -1,   215,    -1,    -1,   218,   219,   220,    -1,    -1,
                  -    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
                  -    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
                  -    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
                  -    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
                  -    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,    -1,
                  -    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,
                  -    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
                  -   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,
                  -    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,
                  -   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
                  -    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,
                  -   146,   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,
                  -   156,   157,   158,   159,   160,   161,   162,   163,   164,    -1,
                  -    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,
                  -   176,    -1,   178,   179,   180,   181,   182,   183,   184,    -1,
                  -   186,   187,   188,   189,   190,   191,    -1,   193,   194,   195,
                  -   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,
                  -   206,   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,
                  -    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,
                  -    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,
                  -    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,
                  -    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
                  -    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
                  -    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
                  -    79,    -1,    -1,    82,    83,    84,    -1,    86,    87,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
                  -    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
                  -    -1,    -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,
                  -   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,
                  -    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
                  -    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
                  -   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
                  -   159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
                  -   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,
                  -   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
                  -   189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
                  -    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
                  -   209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,
                  -   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
                  -    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
                  -    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
                  -    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                  -    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,
                  -    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  -    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
                  -   112,   113,   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,
                  -    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
                  -   132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
                  -    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
                  -   152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
                  -   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
                  -    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  -   182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
                  -    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  -    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
                  -    -1,    -1,    -1,   215,    -1,    -1,   218,   219,   220,    -1,
                  -    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    29,    30,    31,    32,    -1,    34,
                  +    -1,    -1,    17,    18,    19,   215,    -1,    -1,   218,   219,
                  +   220,    -1,    -1,    28,    -1,    -1,    -1,   227,    -1,    34,
                       35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                       -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                       -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,
                  -    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
                       95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  -   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
                  -    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,   123,    -1,
                  +   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
                  +    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
                       -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                      135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                       -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                       -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  -    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
                       -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                       -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
                      195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
                      205,   206,   207,   208,   209,    -1,    -1,    17,    18,    19,
                  -   215,    -1,    -1,   218,   219,   220,    -1,    -1,    28,    -1,
                  +   215,    -1,    -1,   218,    -1,    -1,    -1,    -1,    28,    -1,
                       -1,    -1,   227,    -1,    34,    35,    -1,    -1,    -1,    -1,
                       -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                  @@ -3924,32 +3938,32 @@ static const short yycheck[] = {     3,
                      190,   191,    -1,   193,   194,   195,   196,   197,     3,     4,
                       -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
                       -1,    -1,    17,    18,    19,   215,    -1,    -1,   218,    -1,
                  -    -1,    -1,    -1,    28,    -1,    -1,    -1,   227,    -1,    34,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,    -1,    34,
                       35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                       -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  -    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,
                  -    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
                  +    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  -   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
                  -    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
                  +   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
                  +    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
                       -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                      135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                       -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                       -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  -    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
                       -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                       -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
                      195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
                      205,   206,   207,   208,   209,    -1,    -1,    17,    18,    19,
                  -   215,    -1,    -1,   218,    -1,    -1,    -1,    -1,    -1,    -1,
                  +   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    -1,
                       -1,    -1,   227,    -1,    34,    35,    -1,    -1,    -1,    -1,
                       -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                       60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,
                       -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
                  -    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
                  +    -1,    -1,    82,    83,    84,    -1,    86,    87,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
                       -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
                       -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,   119,
                  @@ -3962,169 +3976,118 @@ static const short yycheck[] = {     3,
                      180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                      190,   191,    -1,   193,   194,   195,   196,   197,     3,     4,
                       -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
                  -    -1,    -1,    17,    18,    19,   215,    -1,    -1,   218,   219,
                  -   220,    -1,    -1,    -1,    -1,    -1,    -1,   227,    -1,    34,
                  -    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  -    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
                  +   220,    -1,    -1,    28,    -1,    -1,    -1,   227,    -1,    34,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  +    -1,    -1,     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,
                  +    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
                       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  -    -1,    76,    -1,    78,    79,    -1,    -1,    82,    83,    84,
                  +    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,
                       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  -   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
                  -    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                  +    95,    96,    58,    -1,    99,    -1,   101,    -1,    64,    -1,
                  +   105,   106,    -1,    -1,    70,    -1,   111,    -1,   113,   114,
                  +    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    88,    -1,    -1,    -1,    -1,   132,   133,   134,
                      135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                       -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                       -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  -    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
                  +    -1,     8,   167,    -1,   169,   170,    13,   172,   173,   174,
                       -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  -    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
                  -   195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
                  -   205,   206,   207,   208,   209,    -1,    -1,    -1,    -1,    -1,
                  -   215,    -1,    -1,   218,   219,   220,    -1,    -1,    28,    -1,
                  -    -1,    -1,   227,    -1,    34,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    41,    -1,    -1,    -1,    -1,    -1,     8,    -1,    10,
                  -    -1,    -1,    13,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                  -    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
                  -    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
                  -    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    95,    96,    58,    -1,    99,
                  -    -1,   101,    -1,    64,    -1,   105,   106,    -1,    -1,    70,
                  -    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
                  -    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
                  -    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
                  -   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                  -   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
                  -   160,   161,   162,   163,   164,    -1,     8,   167,    -1,   169,
                  -   170,    13,   172,   173,   174,    -1,   176,    -1,   178,   179,
                  -   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                  -   190,    -1,    -1,   193,   194,   195,   196,   197,    -1,    -1,
                  -    -1,   201,   163,   203,   204,    -1,    -1,     8,    -1,    10,
                  -    -1,    -1,    13,    -1,    -1,    -1,    58,   178,    -1,    -1,
                  -    -1,    -1,    64,    -1,    -1,    -1,    -1,   227,    70,     8,
                  -    -1,    -1,    -1,    -1,    13,    -1,    -1,    -1,    -1,    81,
                  -    -1,    -1,    -1,    -1,    -1,   206,    88,    -1,    -1,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,    58,    -1,    -1,
                  -    -1,    -1,    -1,    64,   225,    -1,    -1,    -1,    -1,    70,
                  -     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,    -1,    58,
                  -    81,    -1,    -1,    -1,    -1,    64,    -1,    88,    -1,    -1,
                  -     8,    70,    -1,    -1,    -1,    13,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    58,   163,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,
                  -     8,    -1,    70,    -1,    -1,    13,   178,    -1,    -1,    -1,
                  -    58,    -1,    -1,    81,    -1,    -1,    64,    -1,    -1,    -1,
                  -    88,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,   163,    81,   206,    -1,    -1,    -1,    -1,   211,
                  -   212,   213,   214,   215,   216,   217,    -1,   178,    -1,    -1,
                  -    58,    -1,   224,   225,   163,    -1,    64,    -1,    -1,    -1,
                  -    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,   178,
                  -    -1,    -1,    -1,    81,    -1,   206,    -1,    -1,    -1,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,   225,   163,    -1,   206,    -1,    -1,
                  -    -1,    -1,   211,   212,   213,   214,   215,   216,   217,    -1,
                  -   178,    -1,    -1,    -1,    -1,   163,   225,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,
                  -    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
                  -    -1,    -1,    -1,    -1,    -1,   163,    -1,   225,   206,     3,
                  -     4,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
                  -   178,    -1,    -1,    -1,    -1,    -1,    -1,   225,    -1,    -1,
                  +    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,   163,   203,   204,
                  +    -1,    -1,     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,
                  +    -1,    58,   178,    -1,    -1,    -1,    -1,    64,    -1,    -1,
                  +    -1,    -1,   227,    70,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,
                  +   206,    88,    -1,    -1,    -1,   211,   212,   213,   214,   215,
                  +   216,   217,    58,    -1,    -1,    -1,    -1,    -1,    64,   225,
                  +    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,   206,    -1,
                  -    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
                  -    -1,    -1,    -1,    57,    -1,    -1,    60,   225,    -1,    -1,
                  -    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
                  -    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
                  -    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
                  -    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,   113,
                  -   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,
                  -   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
                  -    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
                  -    -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
                  -   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,
                  -   174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
                  -   184,    -1,   186,   187,   188,   189,   190,   191,    -1,   193,
                  -   194,   195,   196,   197,     3,     4,    -1,   201,    -1,   203,
                  -   204,   205,   206,   207,    -1,   209,    -1,   211,   212,   213,
                  -   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    37,    -1,
                  -    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    13,
                  -    -1,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    -1,
                  -    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
                  -    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    -1,
                  -    99,    -1,   101,    -1,    58,    -1,   105,   106,    -1,    -1,
                  -    64,    -1,   111,    -1,   113,   114,    70,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
                  -    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
                  -    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
                  -   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
                  -   159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
                  -   169,   170,     3,     4,   173,   174,    -1,   176,    -1,   178,
                  -   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
                  -   189,   190,    -1,    -1,   193,   194,   195,   196,   197,    -1,
                  -    -1,    -1,   201,    34,   203,   204,    -1,   206,    -1,   163,
                  -    41,    -1,   211,   212,   213,   214,   215,   216,   217,    -1,
                  -    -1,    -1,    -1,    -1,   178,    -1,    57,    -1,    -1,    60,
                  -    -1,    -1,    -1,    -1,    65,    66,    67,    -1,    -1,    -1,
                  -    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
                  -    -1,    -1,   206,    84,    -1,    86,    87,   211,   212,   213,
                  -   214,   215,   216,   217,    95,    96,    97,    -1,    99,    -1,
                  -   101,   225,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
                  -   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
                  -   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
                  -    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
                  -   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
                  -    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
                  -   181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
                  -    -1,    -1,   193,   194,   195,   196,   197,     3,     4,    -1,
                  -   201,    -1,   203,   204,    -1,   206,    -1,    -1,    -1,    -1,
                  -   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
                  -    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    34,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
                  -    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
                  -    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,
                  -    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
                  -    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
                  -   106,    -1,    -1,    -1,    -1,   111,    -1,   113,   114,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
                  +     3,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
                  -    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,
                  -   146,   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,
                  -   156,   157,   158,   159,   160,   161,   162,   163,   164,    -1,
                  -    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,
                  -   176,    -1,   178,   179,   180,   181,   182,   183,   184,    -1,
                  -   186,   187,   188,   189,   190,     3,     4,   193,   194,   195,
                  -   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,    -1,
                  -    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   216,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,
                  +    -1,    34,    -1,    -1,    -1,    -1,    -1,   163,    41,   206,
                  +    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,
                  +   217,    -1,   178,    -1,    57,    -1,    -1,    60,   225,    -1,
                  +    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
                  +    73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
                  +   206,    84,    -1,    86,    87,   211,   212,   213,   214,   215,
                  +   216,   217,    95,    96,    -1,    -1,    99,    -1,   101,   225,
                  +    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,
                  +   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,
                  +   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
                  +   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
                  +   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
                  +   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,
                  +   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
                  +   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
                  +   193,   194,   195,   196,   197,     3,     4,    -1,   201,    -1,
                  +   203,   204,   205,   206,   207,    -1,   209,    -1,   211,   212,
                  +   213,   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    37,
                       -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
                  -    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
                  +    13,    -1,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
                       -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
                       -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
                  -    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                  -    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,
                  +    -1,    99,    -1,   101,    -1,    58,    -1,   105,   106,    -1,
                  +    -1,    64,    -1,   111,    -1,   113,   114,    70,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,
                       -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                      138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  -   148,   149,   150,    -1,   152,   153,     3,     4,   156,   157,
                  +   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                      158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                  -    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,
                  -   178,   179,   180,   181,   182,   183,   184,    34,   186,   187,
                  -   188,   189,   190,    -1,    41,   193,   194,   195,   196,   197,
                  -    -1,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
                  -    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,   216,    66,
                  +    -1,   169,   170,     3,     4,   173,   174,    -1,   176,    -1,
                  +   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  +   188,   189,   190,    -1,    -1,   193,   194,   195,   196,   197,
                  +    -1,    -1,    -1,   201,    34,   203,   204,    -1,   206,    -1,
                  +   163,    41,    -1,   211,   212,   213,   214,   215,   216,   217,
                  +    -1,    -1,    -1,    -1,    -1,   178,    -1,    57,    -1,    -1,
                  +    60,    -1,    -1,    -1,    -1,    65,    66,    67,    -1,    -1,
                  +    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
                  +    -1,    -1,    -1,   206,    84,    -1,    86,    87,   211,   212,
                  +   213,   214,   215,   216,   217,    95,    96,    97,    -1,    99,
                  +    -1,   101,   225,    -1,    -1,   105,   106,    -1,    -1,    -1,
                  +    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
                  +   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                  +   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
                  +   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
                  +   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
                  +   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                  +   190,    -1,    -1,   193,   194,   195,   196,   197,     3,     4,
                  +    -1,   201,    -1,   203,   204,    -1,   206,    -1,    -1,    -1,
                  +    -1,   211,   212,   213,   214,   215,   216,   217,    -1,    -1,
                  +    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    34,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
                  +    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
                  +    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,
                  +    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
                  +   105,   106,    -1,    -1,    -1,    -1,   111,    -1,   113,   114,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                  +   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                  +    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                  +    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  +    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
                  +    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  +    -1,   186,   187,   188,   189,   190,     3,     4,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
                  +    -1,    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,   216,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
                       67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,
                       -1,    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,
                       87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
                  @@ -4163,100 +4126,58 @@ static const short yycheck[] = {     3,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
                      135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
                  -    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
                  -    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                  +    -1,   146,   147,   148,   149,   150,    -1,   152,   153,     3,
                  +     4,   156,   157,   158,   159,   160,   161,   162,   163,   164,
                       -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
                       -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
                  -    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,   194,
                  -   195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   216,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,
                  -    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                  -    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
                  -    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
                  -    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
                  -    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
                  -    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
                  -   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                  -   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
                  -   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
                  -   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,
                  -   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                  -   190,     3,     4,   193,   194,   195,   196,   197,    -1,    -1,
                  -    -1,   201,    -1,   203,   204,    -1,    -1,    -1,   208,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
                  -    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                  -    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,
                  -    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                  -    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
                  -    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
                  -    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
                  -   152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
                  -   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
                  -    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  -   182,   183,   184,    -1,   186,   187,   188,   189,   190,     3,
                  -     4,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  -    -1,   203,   204,    -1,    -1,   207,    -1,    -1,    -1,    -1,
                  -    -1,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,
                  -    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
                  -    -1,    -1,    -1,    47,    -1,    -1,    -1,    51,    -1,    -1,
                  -    -1,    55,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,
                  -    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
                  +    34,   186,   187,   188,   189,   190,    -1,    41,   193,   194,
                  +   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
                  +    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,
                  +    -1,   216,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
                       74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
                  -    84,    -1,    86,    87,    -1,    89,    -1,    -1,    92,    93,
                  +    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
                  -    -1,   105,   106,    -1,    -1,    -1,   110,   111,    -1,   113,
                  -   114,    -1,    -1,   117,    -1,   119,    -1,    -1,    -1,    -1,
                  +    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,   113,
                  +   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,
                  -   134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
                  -   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
                  -   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
                  -   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
                  -   174,   175,   176,    -1,   178,   179,   180,   181,   182,   183,
                  -   184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
                  -   194,   195,   196,   197,     3,     4,   200,   201,   202,   203,
                  -   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    18,
                  -    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    34,    35,    -1,    -1,    -1,
                  +   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
                  +    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
                  +    -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
                  +   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,
                  +   174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
                  +   184,    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,
                  +   194,   195,   196,   197,     3,     4,    -1,   201,    -1,   203,
                  +   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   216,    -1,    -1,    -1,    -1,    -1,    -1,    28,
                  +    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,
                       -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
                       -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
                  -    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
                  -    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,    -1,
                  +    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
                  +    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
                       99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
                       -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
                       -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
                      149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
                      159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
                  -   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,
                  +   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,
                      179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
                      189,   190,     3,     4,   193,   194,   195,   196,   197,    -1,
                  -    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    20,
                  -    -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,   208,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
                       41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    51,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
                       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
                       -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
                       -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    94,    95,    96,    -1,    -1,    99,    -1,
                  +    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
                      101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
                      111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
                  -   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
                      141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
                       -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
                  @@ -4264,30 +4185,72 @@ static const short yycheck[] = {     3,
                       -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
                      181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
                        3,     4,   193,   194,   195,   196,   197,    -1,    -1,    -1,
                  -   201,    -1,   203,   204,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
                  +   201,    -1,   203,   204,    -1,    -1,   207,    -1,    -1,    -1,
                  +    -1,    -1,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,
                       -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    47,    -1,    -1,    -1,    51,    -1,
                  +    -1,    -1,    55,    -1,    57,    -1,    -1,    60,    -1,    -1,
                       -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
                       73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
                  -    -1,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
                  -    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,
                  -   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    84,    -1,    86,    87,    -1,    89,    -1,    -1,    92,
                  +    93,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
                  +    -1,    -1,   105,   106,    -1,    -1,    -1,   110,   111,    -1,
                  +   113,   114,    -1,    -1,   117,    -1,   119,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,
                  -   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
                  -   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
                  -   153,     3,     4,   156,   157,   158,   159,   160,   161,   162,
                  -   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
                  -   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
                  -   183,   184,    34,   186,   187,   188,   189,   190,    -1,    41,
                  -   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
                  -   203,   204,    -1,    55,    -1,    57,    -1,    -1,    60,    -1,
                  +   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
                  +   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
                  +   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
                  +   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
                  +   173,   174,   175,   176,    -1,   178,   179,   180,   181,   182,
                  +   183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
                  +   193,   194,   195,   196,   197,     3,     4,   200,   201,   202,
                  +   203,   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    18,    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    -1,    -1,
                  +    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
                  +    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
                  +    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
                  +    78,    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
                  +    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                  +    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,    -1,
                  +    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                  +   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  +   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                  +   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                  +    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,
                  +   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  +   188,   189,   190,     3,     4,   193,   194,   195,   196,   197,
                  +    -1,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
                  +    20,    -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    51,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                  +    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
                  +    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
                  +    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    94,    95,    96,    -1,    -1,    99,
                  +    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
                  +    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
                  +    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
                  +   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                  +   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
                  +   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
                  +   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
                  +   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
                  +   190,     3,     4,   193,   194,   195,   196,   197,    -1,    -1,
                  +    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,
                  +    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
                       -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
                       72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,
                       -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    95,    96,    -1,    98,    99,    -1,   101,
                  +    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
                       -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
                       -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  @@ -4295,14 +4258,14 @@ static const short yycheck[] = {     3,
                       -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
                      152,   153,     3,     4,   156,   157,   158,   159,   160,   161,
                      162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
                  -    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                  +   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
                      182,   183,   184,    34,   186,   187,   188,   189,   190,    -1,
                       41,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
                  -    -1,   203,   204,    -1,    -1,    -1,    57,    -1,    -1,    60,
                  +    -1,   203,   204,    -1,    55,    -1,    57,    -1,    -1,    60,
                       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
                  -    -1,    72,    73,    74,    75,    -1,    -1,    -1,    79,    -1,
                  +    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
                       -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
                  +    -1,    -1,    -1,    -1,    95,    96,    -1,    98,    99,    -1,
                      101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
                      111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  @@ -4315,7 +4278,7 @@ static const short yycheck[] = {     3,
                       -1,    41,   193,   194,   195,   196,   197,    -1,    -1,    -1,
                      201,    -1,   203,   204,    -1,    -1,    -1,    57,    -1,    -1,
                       60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
                  -    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
                  +    -1,    -1,    72,    73,    74,    75,    -1,    -1,    -1,    79,
                       -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
                       -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
                  @@ -4325,7 +4288,7 @@ static const short yycheck[] = {     3,
                      140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
                      150,    -1,   152,   153,     3,     4,   156,   157,   158,   159,
                      160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
                  -   170,    -1,    -1,   173,   174,   175,   176,    -1,   178,   179,
                  +   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
                      180,   181,   182,   183,   184,    34,   186,   187,   188,   189,
                      190,    -1,    41,   193,   194,   195,   196,   197,    -1,    -1,
                       -1,   201,    -1,   203,   204,    -1,    -1,    -1,    57,    -1,
                  @@ -4338,31 +4301,31 @@ static const short yycheck[] = {     3,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
                       -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
                  -   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
                  +   149,   150,    -1,   152,   153,     3,     4,   156,   157,   158,
                      159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
                      169,   170,    -1,    -1,   173,   174,   175,   176,    -1,   178,
                  -   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
                  -   189,   190,     3,     4,   193,   194,   195,   196,   197,    10,
                  -    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    -1,
                  +   179,   180,   181,   182,   183,   184,    34,   186,   187,   188,
                  +   189,   190,    -1,    41,   193,   194,   195,   196,   197,    -1,
                  +    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    57,
                  +    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
                  +    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
                  +    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
                  +    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
                  +    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
                  -    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
                  -    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
                  -    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
                  -   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
                  -   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                  +   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  +   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                  +   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                  +    -1,   169,   170,    -1,    -1,   173,   174,   175,   176,    -1,
                  +   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  +   188,   189,   190,     3,     4,   193,   194,   195,   196,   197,
                  +    10,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
                  -   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
                  -    -1,   152,   153,     3,     4,   156,   157,   158,   159,   160,
                  -   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
                  -    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
                  -   181,   182,   183,   184,    34,   186,   187,   188,   189,   190,
                  -    -1,    41,   193,   194,   195,   196,   197,    -1,    -1,    -1,
                  -   201,    -1,   203,   204,    -1,    -1,    -1,    57,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
                       60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
                       -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
                       -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
                  @@ -4402,59 +4365,66 @@ static const short yycheck[] = {     3,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
                      138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
                  -   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
                  +   148,   149,   150,    -1,   152,   153,     3,     4,   156,   157,
                      158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
                       -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,
                  -   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
                  -   188,   189,   190,    -1,    -1,   193,   194,   195,   196,   197,
                  -    -1,    -1,     7,   201,    -1,   203,   204,    12,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    21,    -1,    -1,    24,
                  -    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    36,    -1,    38,    -1,    -1,    -1,    42,    43,    44,
                  -    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
                  -    -1,    -1,    -1,    -1,    18,    19,    61,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
                  -    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    57,    -1,    -1,    -1,   102,    62,   104,
                  -    -1,    -1,   107,   108,    -1,    -1,    -1,    -1,    -1,    73,
                  -    74,    -1,    76,    -1,    78,    -1,    -1,   122,    -1,    83,
                  +   178,   179,   180,   181,   182,   183,   184,    34,   186,   187,
                  +   188,   189,   190,    -1,    41,   193,   194,   195,   196,   197,
                  +    -1,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
                  +    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
                  +    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,
                  +    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,
                  +    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
                  +    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
                  +    -1,    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   144,
                  -   145,    -1,   106,   107,    -1,    -1,    -1,   111,   112,   154,
                  -   155,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
                  -   165,   166,   126,   168,    -1,    -1,   171,    -1,   132,    -1,
                  -    -1,   135,   177,    18,    19,    -1,    -1,    -1,    -1,    -1,
                  -   185,    -1,    -1,    -1,    -1,    -1,    -1,   192,    -1,    34,
                  -    35,    -1,    -1,   198,    -1,   200,    41,    -1,    -1,    -1,
                  -    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    73,    74,
                  -    -1,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    -1,
                  -   204,   205,    -1,   207,   208,   209,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
                  +   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
                  +   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
                  +   157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
                  +   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,
                  +    -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
                  +   187,   188,   189,   190,    -1,    -1,   193,   194,   195,   196,
                  +   197,    -1,    -1,     7,   201,    -1,   203,   204,    12,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    -1,    -1,
                  +    24,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    42,    43,
                  +    44,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
                  +    54,    -1,    -1,    -1,    -1,    18,    19,    61,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,   106,    18,    19,    -1,    -1,   111,   112,    -1,    -1,
                  -    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    34,    35,
                  -    -1,   126,    -1,    -1,    -1,    41,    -1,   132,    -1,    -1,
                  -   135,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,
                  -    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    -1,    -1,
                  +    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
                  +    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,   102,    62,
                  +   104,    -1,    -1,   107,   108,    -1,    -1,    -1,    -1,    -1,
                  +    73,    74,    -1,    76,    -1,    78,    -1,    -1,   122,    -1,
                  +    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +   144,   145,    -1,   106,   107,    -1,    -1,    -1,   111,   112,
                  +   154,   155,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
                  +    -1,   165,   166,   126,   168,    -1,    -1,   171,    -1,   132,
                  +    -1,    -1,   135,   177,    18,    19,    -1,    -1,    -1,    -1,
                  +    -1,   185,    -1,    -1,    -1,    -1,    -1,    -1,   192,    -1,
                  +    34,    35,    -1,    -1,   198,    -1,   200,    41,    -1,    -1,
                  +    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,    62,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    73,
                  +    74,    -1,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,
                  +    -1,   204,   205,    -1,   207,   208,   209,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,    -1,
                  -   106,    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,   204,
                  -   205,    -1,   207,   208,   209,    -1,    -1,    -1,    -1,    -1,
                  -   126,    -1,    -1,    -1,    -1,    -1,   132,    -1,    -1,   135,
                  +    -1,    -1,   106,    -1,    -1,    -1,    -1,   111,   112,    -1,
                  +    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
                  +    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,    -1,
                  +    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  +    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,
                       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,   190,   191,    -1,    -1,    -1,    -1,
                  -    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204
                  +   204,   205,    -1,   207,   208,   209
                   };
                   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
                  -#line 3 "/usr/lib/bison.simple"
                  +#line 3 "/usr/local/bison/bison.simple"
                   
                   /* Skeleton output parser for bison,
                      Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
                  @@ -4647,7 +4617,7 @@ __yy_memcpy (char *to, char *from, int count)
                   #endif
                   #endif
                   \f
                  -#line 196 "/usr/lib/bison.simple"
                  +#line 196 "/usr/local/bison/bison.simple"
                   
                   /* The user can define YYPARSE_PARAM as the name of an argument to be passed
                      into yyparse.  The argument should have type void *.
                  @@ -9938,443 +9908,444 @@ case 818:
                   #line 4602 "gram.y"
                   {
                                      yyval.paramno = makeNode(ParamNo);
                  -                   yyval.paramno->number = yyvsp[0].ival;
                  +                   yyval.paramno->number = yyvsp[-1].ival;
                  +                   yyval.paramno->indirection = yyvsp[0].list;
                                  ;
                       break;}
                   case 819:
                  -#line 4608 "gram.y"
                  +#line 4609 "gram.y"
                   { yyval.ival = yyvsp[0].ival; ;
                       break;}
                   case 820:
                  -#line 4609 "gram.y"
                  +#line 4610 "gram.y"
                   { yyval.str = yyvsp[0].str; ;
                       break;}
                   case 821:
                  -#line 4610 "gram.y"
                  +#line 4611 "gram.y"
                   { yyval.str = yyvsp[0].str; ;
                       break;}
                   case 822:
                  -#line 4618 "gram.y"
                  +#line 4619 "gram.y"
                   {  yyval.str = xlateSqlType(yyvsp[0].str); ;
                       break;}
                   case 823:
                  -#line 4620 "gram.y"
                  +#line 4621 "gram.y"
                   {  yyval.str = xlateSqlType(yyvsp[0].str); ;
                       break;}
                   case 824:
                  -#line 4622 "gram.y"
                  +#line 4623 "gram.y"
                   {  yyval.str = xlateSqlType(yyvsp[0].str); ;
                       break;}
                   case 825:
                  -#line 4632 "gram.y"
                  +#line 4633 "gram.y"
                   { yyval.str = yyvsp[0].str; ;
                       break;}
                   case 826:
                  -#line 4633 "gram.y"
                  +#line 4634 "gram.y"
                   { yyval.str = yyvsp[0].str; ;
                       break;}
                   case 827:
                  -#line 4634 "gram.y"
                  +#line 4635 "gram.y"
                   { yyval.str = "absolute"; ;
                       break;}
                   case 828:
                  -#line 4635 "gram.y"
                  +#line 4636 "gram.y"
                   { yyval.str = "action"; ;
                       break;}
                   case 829:
                  -#line 4636 "gram.y"
                  +#line 4637 "gram.y"
                   { yyval.str = "after"; ;
                       break;}
                   case 830:
                  -#line 4637 "gram.y"
                  +#line 4638 "gram.y"
                   { yyval.str = "aggregate"; ;
                       break;}
                   case 831:
                  -#line 4638 "gram.y"
                  +#line 4639 "gram.y"
                   { yyval.str = "backward"; ;
                       break;}
                   case 832:
                  -#line 4639 "gram.y"
                  +#line 4640 "gram.y"
                   { yyval.str = "before"; ;
                       break;}
                   case 833:
                  -#line 4640 "gram.y"
                  +#line 4641 "gram.y"
                   { yyval.str = "cache"; ;
                       break;}
                   case 834:
                  -#line 4641 "gram.y"
                  +#line 4642 "gram.y"
                   { yyval.str = "createdb"; ;
                       break;}
                   case 835:
                  -#line 4642 "gram.y"
                  +#line 4643 "gram.y"
                   { yyval.str = "createuser"; ;
                       break;}
                   case 836:
                  -#line 4643 "gram.y"
                  +#line 4644 "gram.y"
                   { yyval.str = "cycle"; ;
                       break;}
                   case 837:
                  -#line 4644 "gram.y"
                  +#line 4645 "gram.y"
                   { yyval.str = "database"; ;
                       break;}
                   case 838:
                  -#line 4645 "gram.y"
                  +#line 4646 "gram.y"
                   { yyval.str = "delimiters"; ;
                       break;}
                   case 839:
                  -#line 4646 "gram.y"
                  +#line 4647 "gram.y"
                   { yyval.str = "double"; ;
                       break;}
                   case 840:
                  -#line 4647 "gram.y"
                  +#line 4648 "gram.y"
                   { yyval.str = "each"; ;
                       break;}
                   case 841:
                  -#line 4648 "gram.y"
                  +#line 4649 "gram.y"
                   { yyval.str = "encoding"; ;
                       break;}
                   case 842:
                  -#line 4649 "gram.y"
                  +#line 4650 "gram.y"
                   { yyval.str = "forward"; ;
                       break;}
                   case 843:
                  -#line 4650 "gram.y"
                  +#line 4651 "gram.y"
                   { yyval.str = "function"; ;
                       break;}
                   case 844:
                  -#line 4651 "gram.y"
                  +#line 4652 "gram.y"
                   { yyval.str = "handler"; ;
                       break;}
                   case 845:
                  -#line 4652 "gram.y"
                  +#line 4653 "gram.y"
                   { yyval.str = "increment"; ;
                       break;}
                   case 846:
                  -#line 4653 "gram.y"
                  +#line 4654 "gram.y"
                   { yyval.str = "index"; ;
                       break;}
                   case 847:
                  -#line 4654 "gram.y"
                  +#line 4655 "gram.y"
                   { yyval.str = "inherits"; ;
                       break;}
                   case 848:
                  -#line 4655 "gram.y"
                  +#line 4656 "gram.y"
                   { yyval.str = "insensitive"; ;
                       break;}
                   case 849:
                  -#line 4656 "gram.y"
                  +#line 4657 "gram.y"
                   { yyval.str = "instead"; ;
                       break;}
                   case 850:
                  -#line 4657 "gram.y"
                  +#line 4658 "gram.y"
                   { yyval.str = "isnull"; ;
                       break;}
                   case 851:
                  -#line 4658 "gram.y"
                  +#line 4659 "gram.y"
                   { yyval.str = "key"; ;
                       break;}
                   case 852:
                  -#line 4659 "gram.y"
                  +#line 4660 "gram.y"
                   { yyval.str = "language"; ;
                       break;}
                   case 853:
                  -#line 4660 "gram.y"
                  +#line 4661 "gram.y"
                   { yyval.str = "lancompiler"; ;
                       break;}
                   case 854:
                  -#line 4661 "gram.y"
                  +#line 4662 "gram.y"
                   { yyval.str = "location"; ;
                       break;}
                   case 855:
                  -#line 4662 "gram.y"
                  +#line 4663 "gram.y"
                   { yyval.str = "match"; ;
                       break;}
                   case 856:
                  -#line 4663 "gram.y"
                  +#line 4664 "gram.y"
                   { yyval.str = "maxvalue"; ;
                       break;}
                   case 857:
                  -#line 4664 "gram.y"
                  +#line 4665 "gram.y"
                   { yyval.str = "minvalue"; ;
                       break;}
                   case 858:
                  -#line 4665 "gram.y"
                  +#line 4666 "gram.y"
                   { yyval.str = "next"; ;
                       break;}
                   case 859:
                  -#line 4666 "gram.y"
                  +#line 4667 "gram.y"
                   { yyval.str = "nocreatedb"; ;
                       break;}
                   case 860:
                  -#line 4667 "gram.y"
                  +#line 4668 "gram.y"
                   { yyval.str = "nocreateuser"; ;
                       break;}
                   case 861:
                  -#line 4668 "gram.y"
                  +#line 4669 "gram.y"
                   { yyval.str = "nothing"; ;
                       break;}
                   case 862:
                  -#line 4669 "gram.y"
                  +#line 4670 "gram.y"
                   { yyval.str = "notnull"; ;
                       break;}
                   case 863:
                  -#line 4670 "gram.y"
                  +#line 4671 "gram.y"
                   { yyval.str = "of"; ;
                       break;}
                   case 864:
                  -#line 4671 "gram.y"
                  +#line 4672 "gram.y"
                   { yyval.str = "oids"; ;
                       break;}
                   case 865:
                  -#line 4672 "gram.y"
                  +#line 4673 "gram.y"
                   { yyval.str = "only"; ;
                       break;}
                   case 866:
                  -#line 4673 "gram.y"
                  +#line 4674 "gram.y"
                   { yyval.str = "operator"; ;
                       break;}
                   case 867:
                  -#line 4674 "gram.y"
                  +#line 4675 "gram.y"
                   { yyval.str = "option"; ;
                       break;}
                   case 868:
                  -#line 4675 "gram.y"
                  +#line 4676 "gram.y"
                   { yyval.str = "password"; ;
                       break;}
                   case 869:
                  -#line 4676 "gram.y"
                  +#line 4677 "gram.y"
                   { yyval.str = "prior"; ;
                       break;}
                   case 870:
                  -#line 4677 "gram.y"
                  +#line 4678 "gram.y"
                   { yyval.str = "privileges"; ;
                       break;}
                   case 871:
                  -#line 4678 "gram.y"
                  +#line 4679 "gram.y"
                   { yyval.str = "procedural"; ;
                       break;}
                   case 872:
                  -#line 4679 "gram.y"
                  +#line 4680 "gram.y"
                   { yyval.str = "read"; ;
                       break;}
                   case 873:
                  -#line 4680 "gram.y"
                  +#line 4681 "gram.y"
                   { yyval.str = "recipe"; ;
                       break;}
                   case 874:
                  -#line 4681 "gram.y"
                  +#line 4682 "gram.y"
                   { yyval.str = "relative"; ;
                       break;}
                   case 875:
                  -#line 4682 "gram.y"
                  +#line 4683 "gram.y"
                   { yyval.str = "rename"; ;
                       break;}
                   case 876:
                  -#line 4683 "gram.y"
                  +#line 4684 "gram.y"
                   { yyval.str = "returns"; ;
                       break;}
                   case 877:
                  -#line 4684 "gram.y"
                  +#line 4685 "gram.y"
                   { yyval.str = "row"; ;
                       break;}
                   case 878:
                  -#line 4685 "gram.y"
                  +#line 4686 "gram.y"
                   { yyval.str = "rule"; ;
                       break;}
                   case 879:
                  -#line 4686 "gram.y"
                  +#line 4687 "gram.y"
                   { yyval.str = "scroll"; ;
                       break;}
                   case 880:
                  -#line 4687 "gram.y"
                  +#line 4688 "gram.y"
                   { yyval.str = "sequence"; ;
                       break;}
                   case 881:
                  -#line 4688 "gram.y"
                  +#line 4689 "gram.y"
                   { yyval.str = "serial"; ;
                       break;}
                   case 882:
                  -#line 4689 "gram.y"
                  +#line 4690 "gram.y"
                   { yyval.str = "start"; ;
                       break;}
                   case 883:
                  -#line 4690 "gram.y"
                  +#line 4691 "gram.y"
                   { yyval.str = "statement"; ;
                       break;}
                   case 884:
                  -#line 4691 "gram.y"
                  +#line 4692 "gram.y"
                   { yyval.str = "stdin"; ;
                       break;}
                   case 885:
                  -#line 4692 "gram.y"
                  +#line 4693 "gram.y"
                   { yyval.str = "stdout"; ;
                       break;}
                   case 886:
                  -#line 4693 "gram.y"
                  +#line 4694 "gram.y"
                   { yyval.str = "time"; ;
                       break;}
                   case 887:
                  -#line 4694 "gram.y"
                  +#line 4695 "gram.y"
                   { yyval.str = "timezone_hour"; ;
                       break;}
                   case 888:
                  -#line 4695 "gram.y"
                  +#line 4696 "gram.y"
                   { yyval.str = "timezone_minute"; ;
                       break;}
                   case 889:
                  -#line 4696 "gram.y"
                  +#line 4697 "gram.y"
                   { yyval.str = "trigger"; ;
                       break;}
                   case 890:
                  -#line 4697 "gram.y"
                  +#line 4698 "gram.y"
                   { yyval.str = "trusted"; ;
                       break;}
                   case 891:
                  -#line 4698 "gram.y"
                  +#line 4699 "gram.y"
                   { yyval.str = "type"; ;
                       break;}
                   case 892:
                  -#line 4699 "gram.y"
                  +#line 4700 "gram.y"
                   { yyval.str = "valid"; ;
                       break;}
                   case 893:
                  -#line 4700 "gram.y"
                  +#line 4701 "gram.y"
                   { yyval.str = "version"; ;
                       break;}
                   case 894:
                  -#line 4701 "gram.y"
                  +#line 4702 "gram.y"
                   { yyval.str = "zone"; ;
                       break;}
                   case 895:
                  -#line 4714 "gram.y"
                  +#line 4715 "gram.y"
                   { yyval.str = yyvsp[0].str; ;
                       break;}
                   case 896:
                  -#line 4715 "gram.y"
                  +#line 4716 "gram.y"
                   { yyval.str = "abort"; ;
                       break;}
                   case 897:
                  -#line 4716 "gram.y"
                  +#line 4717 "gram.y"
                   { yyval.str = "analyze"; ;
                       break;}
                   case 898:
                  -#line 4717 "gram.y"
                  +#line 4718 "gram.y"
                   { yyval.str = "binary"; ;
                       break;}
                   case 899:
                  -#line 4718 "gram.y"
                  +#line 4719 "gram.y"
                   { yyval.str = "cluster"; ;
                       break;}
                   case 900:
                  -#line 4719 "gram.y"
                  +#line 4720 "gram.y"
                   { yyval.str = "constraint"; ;
                       break;}
                   case 901:
                  -#line 4720 "gram.y"
                  +#line 4721 "gram.y"
                   { yyval.str = "copy"; ;
                       break;}
                   case 902:
                  -#line 4721 "gram.y"
                  +#line 4722 "gram.y"
                   { yyval.str = "cross"; ;
                       break;}
                   case 903:
                  -#line 4722 "gram.y"
                  +#line 4723 "gram.y"
                   { yyval.str = "current"; ;
                       break;}
                   case 904:
                  -#line 4723 "gram.y"
                  +#line 4724 "gram.y"
                   { yyval.str = "do"; ;
                       break;}
                   case 905:
                  -#line 4724 "gram.y"
                  +#line 4725 "gram.y"
                   { yyval.str = "explain"; ;
                       break;}
                   case 906:
                  -#line 4725 "gram.y"
                  +#line 4726 "gram.y"
                   { yyval.str = "extend"; ;
                       break;}
                   case 907:
                  -#line 4726 "gram.y"
                  +#line 4727 "gram.y"
                   { yyval.str = "false"; ;
                       break;}
                   case 908:
                  -#line 4727 "gram.y"
                  +#line 4728 "gram.y"
                   { yyval.str = "foreign"; ;
                       break;}
                   case 909:
                  -#line 4728 "gram.y"
                  +#line 4729 "gram.y"
                   { yyval.str = "group"; ;
                       break;}
                   case 910:
                  -#line 4729 "gram.y"
                  +#line 4730 "gram.y"
                   { yyval.str = "listen"; ;
                       break;}
                   case 911:
                  -#line 4730 "gram.y"
                  +#line 4731 "gram.y"
                   { yyval.str = "load"; ;
                       break;}
                   case 912:
                  -#line 4731 "gram.y"
                  +#line 4732 "gram.y"
                   { yyval.str = "lock"; ;
                       break;}
                   case 913:
                  -#line 4732 "gram.y"
                  +#line 4733 "gram.y"
                   { yyval.str = "move"; ;
                       break;}
                   case 914:
                  -#line 4733 "gram.y"
                  +#line 4734 "gram.y"
                   { yyval.str = "new"; ;
                       break;}
                   case 915:
                  -#line 4734 "gram.y"
                  +#line 4735 "gram.y"
                   { yyval.str = "none"; ;
                       break;}
                   case 916:
                  -#line 4735 "gram.y"
                  +#line 4736 "gram.y"
                   { yyval.str = "order"; ;
                       break;}
                   case 917:
                  -#line 4736 "gram.y"
                  +#line 4737 "gram.y"
                   { yyval.str = "position"; ;
                       break;}
                   case 918:
                  -#line 4737 "gram.y"
                  +#line 4738 "gram.y"
                   { yyval.str = "precision"; ;
                       break;}
                   case 919:
                  -#line 4738 "gram.y"
                  +#line 4739 "gram.y"
                   { yyval.str = "reset"; ;
                       break;}
                   case 920:
                  -#line 4739 "gram.y"
                  +#line 4740 "gram.y"
                   { yyval.str = "setof"; ;
                       break;}
                   case 921:
                  -#line 4740 "gram.y"
                  +#line 4741 "gram.y"
                   { yyval.str = "show"; ;
                       break;}
                   case 922:
                  -#line 4741 "gram.y"
                  +#line 4742 "gram.y"
                   { yyval.str = "table"; ;
                       break;}
                   case 923:
                  -#line 4742 "gram.y"
                  +#line 4743 "gram.y"
                   { yyval.str = "transaction"; ;
                       break;}
                   case 924:
                  -#line 4743 "gram.y"
                  +#line 4744 "gram.y"
                   { yyval.str = "true"; ;
                       break;}
                   case 925:
                  -#line 4744 "gram.y"
                  +#line 4745 "gram.y"
                   { yyval.str = "vacuum"; ;
                       break;}
                   case 926:
                  -#line 4745 "gram.y"
                  +#line 4746 "gram.y"
                   { yyval.str = "verbose"; ;
                       break;}
                   case 927:
                  -#line 4749 "gram.y"
                  +#line 4750 "gram.y"
                   {
                                      if (QueryIsRule)
                                          yyval.str = "*CURRENT*";
                  @@ -10383,7 +10354,7 @@ case 927:
                                  ;
                       break;}
                   case 928:
                  -#line 4756 "gram.y"
                  +#line 4757 "gram.y"
                   {
                                      if (QueryIsRule)
                                          yyval.str = "*NEW*";
                  @@ -10393,7 +10364,7 @@ case 928:
                       break;}
                   }
                      /* the action file gets copied in in place of this dollarsign */
                  -#line 498 "/usr/lib/bison.simple"
                  +#line 498 "/usr/local/bison/bison.simple"
                   \f
                     yyvsp -= yylen;
                     yyssp -= yylen;
                  @@ -10589,7 +10560,7 @@ yyerrhandle:
                     yystate = yyn;
                     goto yynewstate;
                   }
                  -#line 4764 "gram.y"
                  +#line 4765 "gram.y"
                   
                   
                   static Node *
                  index d9812a52367e309f942e939949f80271ee0ac897..686a2d0e8ca96cedce219d0f007d1b5d9775aec5 100644 (file)
                  @@ -4,7 +4,7 @@
                   #    Makefile for utils/adt
                   #
                   # IDENTIFICATION
                  -#    $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.17 1998/08/24 01:38:04 momjian Exp $
                  +#    $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.18 1998/10/03 05:40:47 momjian Exp $
                   #
                   #-------------------------------------------------------------------------
                   
                  @@ -23,7 +23,8 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o chunk.o \
                      misc.o nabstime.o name.o not_in.o numutils.o \
                      oid.o oracle_compat.o \
                      regexp.o regproc.o ruleutils.o selfuncs.o sets.o \
                  -   tid.o timestamp.o varchar.o varlena.o version.o
                  +   tid.o timestamp.o varchar.o varlena.o version.o \
                  +   ip.o mac.o inet_net_ntop.o inet_net_pton.o
                   
                   all: SUBSYS.o
                   
                  diff --git a/src/backend/utils/adt/inet_net_ntop.c b/src/backend/utils/adt/inet_net_ntop.c
                  new file mode 100644 (file)
                  index 0000000..655f8ba
                  --- /dev/null
                  @@ -0,0 +1,137 @@
                  +/*
                  + * Copyright (c) 1996 by Internet Software Consortium.
                  + *
                  + * Permission to use, copy, modify, and distribute this software for any
                  + * purpose with or without fee is hereby granted, provided that the above
                  + * copyright notice and this permission notice appear in all copies.
                  + *
                  + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
                  + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
                  + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
                  + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
                  + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
                  + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
                  + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
                  + * SOFTWARE.
                  + */
                  +
                  +#if defined(LIBC_SCCS) && !defined(lint)
                  +static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.1 1998/10/03 05:40:48 momjian Exp $";
                  +
                  +#endif
                  +
                  +#include 
                  +#include 
                  +#include 
                  +#include 
                  +
                  +#include 
                  +#include 
                  +#include 
                  +#include 
                  +
                  +#ifdef SPRINTF_CHAR
                  +#define SPRINTF(x) strlen(sprintf/**/x)
                  +#else
                  +#define SPRINTF(x) ((size_t)sprintf x)
                  +#endif
                  +
                  +static char *inet_net_ntop_ipv4(const u_char *src, int bits,
                  +                               char *dst, size_t size);
                  +
                  +/*
                  + * char *
                  + * inet_net_ntop(af, src, bits, dst, size)
                  + * convert network number from network to presentation format.
                  + * generates CIDR style result always.
                  + * return:
                  + * pointer to dst, or NULL if an error occurred (check errno).
                  + * author:
                  + * Paul Vixie (ISC), July 1996
                  + */
                  +char *
                  +inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size)
                  +{
                  +   switch (af)
                  +   {
                  +       case AF_INET:
                  +           return (inet_net_ntop_ipv4(src, bits, dst, size));
                  +       default:
                  +           errno = EAFNOSUPPORT;
                  +           return (NULL);
                  +   }
                  +}
                  +
                  +/*
                  + * static char *
                  + * inet_net_ntop_ipv4(src, bits, dst, size)
                  + * convert IPv4 network number from network to presentation format.
                  + * generates CIDR style result always.
                  + * return:
                  + * pointer to dst, or NULL if an error occurred (check errno).
                  + * note:
                  + * network byte order assumed.  this means 192.5.5.240/28 has
                  + * 0x11110000 in its fourth octet.
                  + * author:
                  + * Paul Vixie (ISC), July 1996
                  + */
                  +static char *
                  +inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size)
                  +{
                  +   char       *odst = dst;
                  +   char       *t;
                  +   u_int       m;
                  +   int         b;
                  +
                  +   if (bits < 0 || bits > 32)
                  +   {
                  +       errno = EINVAL;
                  +       return (NULL);
                  +   }
                  +   if (bits == 0)
                  +   {
                  +       if (size < sizeof "0")
                  +           goto emsgsize;
                  +       *dst++ = '0';
                  +       *dst = '\0';
                  +   }
                  +
                  +   /* Format whole octets. */
                  +   for (b = bits / 8; b > 0; b--)
                  +   {
                  +       if (size < sizeof "255.")
                  +           goto emsgsize;
                  +       t = dst;
                  +       dst += SPRINTF((dst, "%u", *src++));
                  +       if (b > 1)
                  +       {
                  +           *dst++ = '.';
                  +           *dst = '\0';
                  +       }
                  +       size -= (size_t) (dst - t);
                  +   }
                  +
                  +   /* Format partial octet. */
                  +   b = bits % 8;
                  +   if (b > 0)
                  +   {
                  +       if (size < sizeof ".255")
                  +           goto emsgsize;
                  +       t = dst;
                  +       if (dst != odst)
                  +           *dst++ = '.';
                  +       m = ((1 << b) - 1) << (8 - b);
                  +       dst += SPRINTF((dst, "%u", *src & m));
                  +       size -= (size_t) (dst - t);
                  +   }
                  +
                  +   /* Format CIDR /width. */
                  +   if (size < sizeof "/32")
                  +       goto emsgsize;
                  +   dst += SPRINTF((dst, "/%u", bits));
                  +   return (odst);
                  +
                  +emsgsize:
                  +   errno = EMSGSIZE;
                  +   return (NULL);
                  +}
                  diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c
                  new file mode 100644 (file)
                  index 0000000..8b3ae41
                  --- /dev/null
                  @@ -0,0 +1,217 @@
                  +/*
                  + * Copyright (c) 1996 by Internet Software Consortium.
                  + *
                  + * Permission to use, copy, modify, and distribute this software for any
                  + * purpose with or without fee is hereby granted, provided that the above
                  + * copyright notice and this permission notice appear in all copies.
                  + *
                  + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
                  + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
                  + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
                  + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
                  + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
                  + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
                  + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
                  + * SOFTWARE.
                  + */
                  +
                  +#if defined(LIBC_SCCS) && !defined(lint)
                  +static const char rcsid[] = "$Id: inet_net_pton.c,v 1.1 1998/10/03 05:40:49 momjian Exp $";
                  +
                  +#endif
                  +
                  +#include 
                  +#include 
                  +#include 
                  +#include 
                  +
                  +#include 
                  +#include 
                  +#include 
                  +#include 
                  +#include 
                  +#include 
                  +
                  +#ifdef SPRINTF_CHAR
                  +#define SPRINTF(x) strlen(sprintf/**/x)
                  +#else
                  +#define SPRINTF(x) ((size_t)sprintf x)
                  +#endif
                  +
                  +static int inet_net_pton_ipv4(const char *src, u_char *dst, size_t size);
                  +
                  +/*
                  + * static int
                  + * inet_net_pton(af, src, dst, size)
                  + * convert network number from presentation to network format.
                  + * accepts hex octets, hex strings, decimal octets, and /CIDR.
                  + * "size" is in bytes and describes "dst".
                  + * return:
                  + * number of bits, either imputed classfully or specified with /CIDR,
                  + * or -1 if some failure occurred (check errno).  ENOENT means it was
                  + * not a valid network specification.
                  + * author:
                  + * Paul Vixie (ISC), June 1996
                  + */
                  +int
                  +inet_net_pton(int af, const char *src, void *dst, size_t size)
                  +{
                  +   switch (af)
                  +   {
                  +       case AF_INET:
                  +           return (inet_net_pton_ipv4(src, dst, size));
                  +       default:
                  +           errno = EAFNOSUPPORT;
                  +           return (-1);
                  +   }
                  +}
                  +
                  +/*
                  + * static int
                  + * inet_net_pton_ipv4(src, dst, size)
                  + * convert IPv4 network number from presentation to network format.
                  + * accepts hex octets, hex strings, decimal octets, and /CIDR.
                  + * "size" is in bytes and describes "dst".
                  + * return:
                  + * number of bits, either imputed classfully or specified with /CIDR,
                  + * or -1 if some failure occurred (check errno).  ENOENT means it was
                  + * not an IPv4 network specification.
                  + * note:
                  + * network byte order assumed.  this means 192.5.5.240/28 has
                  + * 0x11110000 in its fourth octet.
                  + * author:
                  + * Paul Vixie (ISC), June 1996
                  + */
                  +static int
                  +inet_net_pton_ipv4(const char *src, u_char *dst, size_t size)
                  +{
                  +   static const char
                  +               xdigits[] = "0123456789abcdef",
                  +               digits[] = "0123456789";
                  +   int         n,
                  +               ch,
                  +               tmp,
                  +               dirty,
                  +               bits;
                  +   const u_char *odst = dst;
                  +
                  +   ch = *src++;
                  +   if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
                  +       && isascii(src[1]) && isxdigit(src[1]))
                  +   {
                  +       /* Hexadecimal: Eat nybble string. */
                  +       if (size <= 0)
                  +           goto emsgsize;
                  +       *dst = 0, dirty = 0;
                  +       src++;                  /* skip x or X. */
                  +       while ((ch = *src++) != '\0' &&
                  +              isascii(ch) && isxdigit(ch))
                  +       {
                  +           if (isupper(ch))
                  +               ch = tolower(ch);
                  +           n = strchr(xdigits, ch) - xdigits;
                  +           assert(n >= 0 && n <= 15);
                  +           *dst |= n;
                  +           if (!dirty++)
                  +               *dst <<= 4;
                  +           else if (size-- > 0)
                  +               *++dst = 0, dirty = 0;
                  +           else
                  +               goto emsgsize;
                  +       }
                  +       if (dirty)
                  +           size--;
                  +   }
                  +   else if (isascii(ch) && isdigit(ch))
                  +   {
                  +       /* Decimal: eat dotted digit string. */
                  +       for (;;)
                  +       {
                  +           tmp = 0;
                  +           do
                  +           {
                  +               n = strchr(digits, ch) - digits;
                  +               assert(n >= 0 && n <= 9);
                  +               tmp *= 10;
                  +               tmp += n;
                  +               if (tmp > 255)
                  +                   goto enoent;
                  +           } while ((ch = *src++) != '\0' &&
                  +                    isascii(ch) && isdigit(ch));
                  +           if (size-- <= 0)
                  +               goto emsgsize;
                  +           *dst++ = (u_char) tmp;
                  +           if (ch == '\0' || ch == '/')
                  +               break;
                  +           if (ch != '.')
                  +               goto enoent;
                  +           ch = *src++;
                  +           if (!isascii(ch) || !isdigit(ch))
                  +               goto enoent;
                  +       }
                  +   }
                  +   else
                  +       goto enoent;
                  +
                  +   bits = -1;
                  +   if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst)
                  +   {
                  +       /* CIDR width specifier.  Nothing can follow it. */
                  +       ch = *src++;            /* Skip over the /. */
                  +       bits = 0;
                  +       do
                  +       {
                  +           n = strchr(digits, ch) - digits;
                  +           assert(n >= 0 && n <= 9);
                  +           bits *= 10;
                  +           bits += n;
                  +       } while ((ch = *src++) != '\0' &&
                  +                isascii(ch) && isdigit(ch));
                  +       if (ch != '\0')
                  +           goto enoent;
                  +       if (bits > 32)
                  +           goto emsgsize;
                  +   }
                  +
                  +   /* Firey death and destruction unless we prefetched EOS. */
                  +   if (ch != '\0')
                  +       goto enoent;
                  +
                  +   /* If nothing was written to the destination, we found no address. */
                  +   if (dst == odst)
                  +       goto enoent;
                  +   /* If no CIDR spec was given, infer width from net class. */
                  +   if (bits == -1)
                  +   {
                  +       if (*odst >= 240)       /* Class E */
                  +           bits = 32;
                  +       else if (*odst >= 224)  /* Class D */
                  +           bits = 4;
                  +       else if (*odst >= 192)  /* Class C */
                  +           bits = 24;
                  +       else if (*odst >= 128)  /* Class B */
                  +           bits = 16;
                  +       else
                  +/* Class A */
                  +           bits = 8;
                  +       /* If imputed mask is narrower than specified octets, widen. */
                  +       if (bits >= 8 && bits < ((dst - odst) * 8))
                  +           bits = (dst - odst) * 8;
                  +   }
                  +   /* Extend network to cover the actual mask. */
                  +   while (bits > ((dst - odst) * 8))
                  +   {
                  +       if (size-- <= 0)
                  +           goto emsgsize;
                  +       *dst++ = '\0';
                  +   }
                  +   return (bits);
                  +
                  +enoent:
                  +   errno = ENOENT;
                  +   return (-1);
                  +
                  +emsgsize:
                  +   errno = EMSGSIZE;
                  +   return (-1);
                  +}
                  diff --git a/src/backend/utils/adt/ip.c b/src/backend/utils/adt/ip.c
                  new file mode 100644 (file)
                  index 0000000..b293396
                  --- /dev/null
                  @@ -0,0 +1,283 @@
                  +/*
                  + * PostgreSQL type definitions for IP addresses.  This
                  + * is for IP V4 CIDR notation, but prepared for V6: just
                  + * add the necessary bits where the comments indicate.
                  + *
                  + * $Id: ip.c,v 1.1 1998/10/03 05:40:49 momjian Exp $
                  + */
                  +
                  +#include 
                  +#include 
                  +
                  +#include 
                  +#include 
                  +
                  +#include 
                  +#include 
                  +
                  +#include 
                  +#include 
                  +#include 
                  +
                  +/*
                  + * Access macros.  Add IPV6 support.
                  + */
                  +
                  +#define ip_addrsize(ipaddrptr) \
                  +   (((ipaddr_struct *)VARDATA(ipaddrptr))->family == AF_INET ? 4 : -1)
                  +
                  +#define ip_family(ipaddrptr) \
                  +   (((ipaddr_struct *)VARDATA(ipaddrptr))->family)
                  +
                  +#define ip_bits(ipaddrptr) \
                  +   (((ipaddr_struct *)VARDATA(ipaddrptr))->bits)
                  +
                  +#define ip_v4addr(ipaddrptr) \
                  +   (((ipaddr_struct *)VARDATA(ipaddrptr))->addr.ipv4_addr)
                  +
                  +/*
                  + * IP address reader.
                  + */
                  +
                  +ipaddr *
                  +ipaddr_in(char *src)
                  +{
                  +   int         bits;
                  +   ipaddr     *dst;
                  +
                  +   dst = palloc(VARHDRSZ + sizeof(ipaddr_struct));
                  +   if (dst == NULL)
                  +   {
                  +       elog(ERROR, "unable to allocate memory in ipaddr_in()");
                  +       return (NULL);
                  +   }
                  +   /* First, try for an IP V4 address: */
                  +   ip_family(dst) = AF_INET;
                  +   bits = inet_net_pton(ip_family(dst), src, &ip_v4addr(dst), ip_addrsize(dst));
                  +   if ((bits < 0) || (bits > 32))
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "could not parse \"%s\"", src);
                  +       pfree(dst);
                  +       return (NULL);
                  +   }
                  +   VARSIZE(dst) = VARHDRSZ
                  +       + ((char *) &ip_v4addr(dst) - (char *) VARDATA(dst))
                  +       + ip_addrsize(dst);
                  +   ip_bits(dst) = bits;
                  +   return (dst);
                  +}
                  +
                  +/*
                  + * IP address output function.
                  + */
                  +
                  +char *
                  +ipaddr_out(ipaddr *src)
                  +{
                  +   char       *dst,
                  +               tmp[sizeof("255.255.255.255/32")];
                  +
                  +   if (ip_family(src) == AF_INET)
                  +   {
                  +       /* It's an IP V4 address: */
                  +       if (inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
                  +                         tmp, sizeof(tmp)) < 0)
                  +       {
                  +           elog(ERROR, "unable to print address (%s)", strerror(errno));
                  +           return (NULL);
                  +       }
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "unknown address family (%d)", ip_family(src));
                  +       return (NULL);
                  +   }
                  +   dst = palloc(strlen(tmp) + 1);
                  +   if (dst == NULL)
                  +   {
                  +       elog(ERROR, "unable to allocate memory in ipaddr_out()");
                  +       return (NULL);
                  +   }
                  +   strcpy(dst, tmp);
                  +   return (dst);
                  +}
                  +
                  +/*
                  + * Boolean tests for magnitude.  Add V4/V6 testing!
                  + */
                  +
                  +bool
                  +ipaddr_lt(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       int         order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2));
                  +
                  +       return ((order < 0) || ((order == 0) && (ip_bits(a1) < ip_bits(a2))));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +bool
                  +ipaddr_le(ipaddr *a1, ipaddr *a2)
                  +{
                  +   return (ipaddr_lt(a1, a2) || ipaddr_eq(a1, a2));
                  +}
                  +
                  +bool
                  +ipaddr_eq(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       return ((ip_bits(a1) == ip_bits(a2))
                  +        && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +bool
                  +ipaddr_ge(ipaddr *a1, ipaddr *a2)
                  +{
                  +   return (ipaddr_gt(a1, a2) || ipaddr_eq(a1, a2));
                  +}
                  +
                  +bool
                  +ipaddr_gt(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       int         order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2));
                  +
                  +       return ((order > 0) || ((order == 0) && (ip_bits(a1) > ip_bits(a2))));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +bool
                  +ipaddr_ne(ipaddr *a1, ipaddr *a2)
                  +{
                  +   return (!ipaddr_eq(a1, a2));
                  +}
                  +
                  +bool
                  +ipaddr_sub(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       return ((ip_bits(a1) > ip_bits(a2))
                  +        && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)) == 0));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +bool
                  +ipaddr_subeq(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       return ((ip_bits(a1) >= ip_bits(a2))
                  +        && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)) == 0));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +bool
                  +ipaddr_sup(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       return ((ip_bits(a1) < ip_bits(a2))
                  +        && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +bool
                  +ipaddr_supeq(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
                  +   {
                  +       return ((ip_bits(a1) <= ip_bits(a2))
                  +        && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
                  +   }
                  +   else
                  +   {
                  +       /* Go for an IPV6 address here, before faulting out: */
                  +       elog(ERROR, "cannot compare address families %d and %d",
                  +            ip_family(a1), ip_family(a2));
                  +       return (FALSE);
                  +   }
                  +}
                  +
                  +/*
                  + * Comparison function for sorting.  Add V4/V6 testing!
                  + */
                  +
                  +int4
                  +ipaddr_cmp(ipaddr *a1, ipaddr *a2)
                  +{
                  +   if (ntohl(ip_v4addr(a1)) < ntohl(ip_v4addr(a2)))
                  +       return (-1);
                  +   else if (ntohl(ip_v4addr(a1)) > ntohl(ip_v4addr(a2)))
                  +       return (1);
                  +   return 0;
                  +}
                  +
                  +/*
                  + * Bitwise comparison for V4 addresses.  Add V6 implementation!
                  + */
                  +
                  +int
                  +v4bitncmp(u_int32_t a1, u_int32_t a2, int bits)
                  +{
                  +   unsigned long mask = 0;
                  +   int         i;
                  +
                  +   for (i = 0; i < bits; i++)
                  +       mask = (mask >> 1) | 0x80000000;
                  +   a1 = ntohl(a1);
                  +   a2 = ntohl(a2);
                  +   if ((a1 & mask) < (a2 & mask))
                  +       return (-1);
                  +   else if ((a1 & mask) > (a2 & mask))
                  +       return (1);
                  +   return (0);
                  +}
                  diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c
                  new file mode 100644 (file)
                  index 0000000..8d09ea1
                  --- /dev/null
                  @@ -0,0 +1,323 @@
                  +/*
                  + * PostgreSQL type definitions for MAC addresses.
                  + *
                  + * $Id: mac.c,v 1.1 1998/10/03 05:40:50 momjian Exp $
                  + */
                  +
                  +#include 
                  +
                  +#include 
                  +#include 
                  +
                  +#include 
                  +
                  +manufacturer manufacturers[] = {
                  +  {0x00, 0x00, 0x0C, "Cisco"},
                  +  {0x00, 0x00, 0x0E, "Fujitsu"},
                  +  {0x00, 0x00, 0x0F, "NeXT"},
                  +  {0x00, 0x00, 0x10, "Sytek"},
                  +  {0x00, 0x00, 0x1D, "Cabletron"},
                  +  {0x00, 0x00, 0x20, "DIAB"},
                  +  {0x00, 0x00, 0x22, "Visual Technology"},
                  +  {0x00, 0x00, 0x2A, "TRW"},
                  +  {0x00, 0x00, 0x32, "GPT Limited"},
                  +  {0x00, 0x00, 0x5A, "S & Koch"},
                  +  {0x00, 0x00, 0x5E, "IANA"},
                  +  {0x00, 0x00, 0x65, "Network General"},
                  +  {0x00, 0x00, 0x6B, "MIPS"},
                  +  {0x00, 0x00, 0x77, "MIPS"},
                  +  {0x00, 0x00, 0x7A, "Ardent"},
                  +  {0x00, 0x00, 0x89, "Cayman Systems"},
                  +  {0x00, 0x00, 0x93, "Proteon"},
                  +  {0x00, 0x00, 0x9F, "Ameristar Technology"},
                  +  {0x00, 0x00, 0xA2, "Wellfleet"},
                  +  {0x00, 0x00, 0xA3, "Network Application Technology"},
                  +  {0x00, 0x00, 0xA6, "Network General"},
                  +  {0x00, 0x00, 0xA7, "NCD"},
                  +  {0x00, 0x00, 0xA9, "Network Systems"},
                  +  {0x00, 0x00, 0xAA, "Xerox"},
                  +  {0x00, 0x00, 0xB3, "CIMLinc"},
                  +  {0x00, 0x00, 0xB7, "Dove Fastnet"},
                  +  {0x00, 0x00, 0xBC, "Allen-Bradley"},
                  +  {0x00, 0x00, 0xC0, "Western Digital"},
                  +  {0x00, 0x00, 0xC5, "Farallon"},
                  +  {0x00, 0x00, 0xC6, "Hewlett-Packard"},
                  +  {0x00, 0x00, 0xC8, "Altos"},
                  +  {0x00, 0x00, 0xC9, "Emulex"},
                  +  {0x00, 0x00, 0xD7, "Dartmouth College"},
                  +  {0x00, 0x00, 0xD8, "3Com (?)"},
                  +  {0x00, 0x00, 0xDD, "Gould"},
                  +  {0x00, 0x00, 0xDE, "Unigraph"},
                  +  {0x00, 0x00, 0xE2, "Acer Counterpoint"},
                  +  {0x00, 0x00, 0xEF, "Alantec"},
                  +  {0x00, 0x00, 0xFD, "High Level Hardware"},
                  +  {0x00, 0x01, 0x02, "BBN internal usage"},
                  +  {0x00, 0x20, 0xAF, "3Com"},
                  +  {0x00, 0x17, 0x00, "Kabel"},
                  +  {0x00, 0x80, 0x64, "Wyse Technology"},
                  +  {0x00, 0x80, 0x2B, "IMAC (?)"},
                  +  {0x00, 0x80, 0x2D, "Xylogics, Inc."},
                  +  {0x00, 0x80, 0x8C, "Frontier Software Development"},
                  +  {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"},
                  +  {0x00, 0x80, 0xD3, "Shiva"},
                  +  {0x00, 0xAA, 0x00, "Intel"},
                  +  {0x00, 0xDD, 0x00, "Ungermann-Bass"},
                  +  {0x00, 0xDD, 0x01, "Ungermann-Bass"},
                  +  {0x02, 0x07, 0x01, "Racal InterLan"},
                  +  {0x02, 0x04, 0x06, "BBN internal usage"},
                  +  {0x02, 0x60, 0x86, "Satelcom MegaPac"},
                  +  {0x02, 0x60, 0x8C, "3Com"},
                  +  {0x02, 0xCF, 0x1F, "CMC"},
                  +  {0x08, 0x00, 0x02, "3Com"},
                  +  {0x08, 0x00, 0x03, "ACC"},
                  +  {0x08, 0x00, 0x05, "Symbolics"},
                  +  {0x08, 0x00, 0x08, "BBN"},
                  +  {0x08, 0x00, 0x09, "Hewlett-Packard"},
                  +  {0x08, 0x00, 0x0A, "Nestar Systems"},
                  +  {0x08, 0x00, 0x0B, "Unisys"},
                  +  {0x08, 0x00, 0x11, "Tektronix"},
                  +  {0x08, 0x00, 0x14, "Excelan"},
                  +  {0x08, 0x00, 0x17, "NSC"},
                  +  {0x08, 0x00, 0x1A, "Data General"},
                  +  {0x08, 0x00, 0x1B, "Data General"},
                  +  {0x08, 0x00, 0x1E, "Apollo"},
                  +  {0x08, 0x00, 0x20, "Sun"},
                  +  {0x08, 0x00, 0x22, "NBI"},
                  +  {0x08, 0x00, 0x25, "CDC"},
                  +  {0x08, 0x00, 0x26, "Norsk Data"},
                  +  {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"},
                  +  {0x08, 0x00, 0x28, "Texas Instruments"},
                  +  {0x08, 0x00, 0x2B, "DEC"},
                  +  {0x08, 0x00, 0x2E, "Metaphor"},
                  +  {0x08, 0x00, 0x2F, "Prime Computer"},
                  +  {0x08, 0x00, 0x36, "Intergraph"},
                  +  {0x08, 0x00, 0x37, "Fujitsu-Xerox"},
                  +  {0x08, 0x00, 0x38, "Bull"},
                  +  {0x08, 0x00, 0x39, "Spider Systems"},
                  +  {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."},
                  +  {0x08, 0x00, 0x45, "Xylogics (?)"},
                  +  {0x08, 0x00, 0x46, "Sony"},
                  +  {0x08, 0x00, 0x47, "Sequent"},
                  +  {0x08, 0x00, 0x49, "Univation"},
                  +  {0x08, 0x00, 0x4C, "Encore"},
                  +  {0x08, 0x00, 0x4E, "BICC"},
                  +  {0x08, 0x00, 0x56, "Stanford University"},
                  +  {0x08, 0x00, 0x58, "DECsystem 20 (?)"},
                  +  {0x08, 0x00, 0x5A, "IBM"},
                  +  {0x08, 0x00, 0x67, "Comdesign"},
                  +  {0x08, 0x00, 0x68, "Ridge"},
                  +  {0x08, 0x00, 0x69, "Silicon Graphics"},
                  +  {0x08, 0x00, 0x6E, "Concurrent"},
                  +  {0x08, 0x00, 0x75, "DDE"},
                  +  {0x08, 0x00, 0x7C, "Vitalink"},
                  +  {0x08, 0x00, 0x80, "XIOS"},
                  +  {0x08, 0x00, 0x86, "Imagen/QMS"},
                  +  {0x08, 0x00, 0x87, "Xyplex"},
                  +  {0x08, 0x00, 0x89, "Kinetics"},
                  +  {0x08, 0x00, 0x8B, "Pyramid"},
                  +  {0x08, 0x00, 0x8D, "XyVision"},
                  +  {0x08, 0x00, 0x90, "Retix Inc"},
                  +  {0x48, 0x44, 0x53, "HDS (?)"},
                  +  {0x80, 0x00, 0x10, "AT&T"},
                  +  {0xAA, 0x00, 0x00, "DEC"},
                  +  {0xAA, 0x00, 0x01, "DEC"},
                  +  {0xAA, 0x00, 0x02, "DEC"},
                  +  {0xAA, 0x00, 0x03, "DEC"},
                  +  {0xAA, 0x00, 0x04, "DEC"},
                  +  {0x00, 0x00, 0x00, NULL}
                  +};
                  +
                  +/*
                  + * Utility macros used for sorting and comparing:
                  + */
                  +
                  +#define hibits(addr) \
                  +  ((unsigned long)((addr->a<<16)|(addr->b<<8)|(addr->c)))
                  +
                  +#define lobits(addr) \
                  +  ((unsigned long)((addr->c<<16)|(addr->e<<8)|(addr->f)))
                  +
                  +/*
                  + * MAC address reader.  Accepts several common notations.
                  + */
                  +
                  +macaddr    *
                  +macaddr_in(char *str)
                  +{
                  +   int         a,
                  +               b,
                  +               c,
                  +               d,
                  +               e,
                  +               f;
                  +   macaddr    *result;
                  +   int         count;
                  +
                  +   if (strlen(str) > 0)
                  +   {
                  +
                  +       count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
                  +       if (count != 6)
                  +           count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f);
                  +       if (count != 6)
                  +           count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f);
                  +       if (count != 6)
                  +           count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f);
                  +       if (count != 6)
                  +           count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f);
                  +
                  +       if (count != 6)
                  +       {
                  +           elog(ERROR, "macaddr_in: error in parsing \"%s\"", str);
                  +           return (NULL);
                  +       }
                  +
                  +       if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
                  +           (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
                  +           (e < 0) || (e > 255) || (f < 0) || (f > 255))
                  +       {
                  +           elog(ERROR, "macaddr_in: illegal address \"%s\"", str);
                  +           return (NULL);
                  +       }
                  +   }
                  +   else
                  +   {
                  +       a = b = c = d = e = f = 0;      /* special case for missing
                  +                                        * address */
                  +   }
                  +
                  +   result = (macaddr *) palloc(sizeof(macaddr));
                  +
                  +   result->a = a;
                  +   result->b = b;
                  +   result->c = c;
                  +   result->d = d;
                  +   result->e = e;
                  +   result->f = f;
                  +
                  +   return (result);
                  +}
                  +
                  +/*
                  + * MAC address output function.  Fixed format.
                  + */
                  +
                  +char *
                  +macaddr_out(macaddr *addr)
                  +{
                  +   char       *result;
                  +
                  +   if (addr == NULL)
                  +       return (NULL);
                  +
                  +   result = (char *) palloc(32);
                  +
                  +   if ((hibits(addr) > 0) || (lobits(addr) > 0))
                  +   {
                  +       sprintf(result, "%02x:%02x:%02x:%02x:%02x:%02x",
                  +               addr->a, addr->b, addr->c, addr->d, addr->e, addr->f);
                  +   }
                  +   else
                  +   {
                  +       result[0] = 0;          /* special case for missing address */
                  +   }
                  +   return (result);
                  +}
                  +
                  +/*
                  + * Boolean tests.
                  + */
                  +
                  +bool
                  +macaddr_lt(macaddr *a1, macaddr *a2)
                  +{
                  +   return ((hibits(a1) < hibits(a2)) ||
                  +           ((hibits(a1) == hibits(a2)) && lobits(a1) < lobits(a2)));
                  +};
                  +
                  +bool
                  +macaddr_le(macaddr *a1, macaddr *a2)
                  +{
                  +   return ((hibits(a1) < hibits(a2)) ||
                  +           ((hibits(a1) == hibits(a2)) && lobits(a1) <= lobits(a2)));
                  +};
                  +
                  +bool
                  +macaddr_eq(macaddr *a1, macaddr *a2)
                  +{
                  +   return ((hibits(a1) == hibits(a2)) && (lobits(a1) == lobits(a2)));
                  +};
                  +
                  +bool
                  +macaddr_ge(macaddr *a1, macaddr *a2)
                  +{
                  +   return ((hibits(a1) > hibits(a2)) ||
                  +           ((hibits(a1) == hibits(a2)) && lobits(a1) >= lobits(a2)));
                  +};
                  +
                  +bool
                  +macaddr_gt(macaddr *a1, macaddr *a2)
                  +{
                  +   return ((hibits(a1) > hibits(a2)) ||
                  +           ((hibits(a1) == hibits(a2)) && lobits(a1) > lobits(a2)));
                  +};
                  +
                  +bool
                  +macaddr_ne(macaddr *a1, macaddr *a2)
                  +{
                  +   return ((hibits(a1) != hibits(a2)) || (lobits(a1) != lobits(a2)));
                  +};
                  +
                  +/*
                  + * Comparison function for sorting:
                  + */
                  +
                  +int4
                  +macaddr_cmp(macaddr *a1, macaddr *a2)
                  +{
                  +   if (hibits(a1) < hibits(a2))
                  +       return -1;
                  +   else if (hibits(a1) > hibits(a2))
                  +       return 1;
                  +   else if (lobits(a1) < lobits(a2))
                  +       return -1;
                  +   else if (lobits(a1) > lobits(a2))
                  +       return 1;
                  +   else
                  +       return 0;
                  +}
                  +
                  +/*
                  + * The special manufacturer fetching function.  See "mac.h".
                  + */
                  +
                  +text *
                  +macaddr_manuf(macaddr *addr)
                  +{
                  +   manufacturer *manuf;
                  +   int         length;
                  +   text       *result;
                  +
                  +   for (manuf = manufacturers; manuf->name != NULL; manuf++)
                  +   {
                  +       if ((manuf->a == addr->a) &&
                  +           (manuf->b == addr->b) &&
                  +           (manuf->c == addr->c))
                  +           break;
                  +   }
                  +   if (manuf->name == NULL)
                  +   {
                  +       result = palloc(VARHDRSZ + 1);
                  +       memset(result, 0, VARHDRSZ + 1);
                  +       VARSIZE(result) = VARHDRSZ + 1;
                  +   }
                  +   else
                  +   {
                  +       length = strlen(manuf->name) + 1;
                  +       result = palloc(length + VARHDRSZ);
                  +       memset(result, 0, length + VARHDRSZ);
                  +       VARSIZE(result) = length + VARHDRSZ;
                  +       memcpy(VARDATA(result), manuf->name, length);
                  +   }
                  +   return result;
                  +}
                  index 40a112e642b046b3dd65e2b466535d5636fefd4e..140eaa3b39e9a77e801ae0a074b5025434288bb6 100644 (file)
                  @@ -7,7 +7,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: pg_amop.h,v 1.15 1998/09/01 04:34:48 momjian Exp $
                  + * $Id: pg_amop.h,v 1.16 1998/10/03 05:40:51 momjian Exp $
                    *
                    * NOTES
                    *  the genbki.sh script reads this file and generates .bki
                  @@ -298,6 +298,26 @@ DATA(insert OID = 0 (  403 1313 1330 3 btreesel btreenpage ));
                   DATA(insert OID = 0 (  403 1313 1335 4 btreesel btreenpage ));
                   DATA(insert OID = 0 (  403 1313 1334 5 btreesel btreenpage ));
                   
                  +/*
                  + * nbtree macaddr
                  + */
                  +
                  +DATA(insert OID = 0 (  403 810 1222 1 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 810 1223 2 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 810 1220 3 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 810 1225 4 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 810 1224 5 btreesel btreenpage ));
                  +
                  +/*
                  + * nbtree ip
                  + */
                  +
                  +DATA(insert OID = 0 (  403 935 1203 1 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 935 1204 2 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 935 1201 3 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 935 1206 4 btreesel btreenpage ));
                  +DATA(insert OID = 0 (  403 935 1205 5 btreesel btreenpage ));
                  +
                   /*
                    * hash table _ops
                    */
                  index 4c12668d662e545332c423adb81ea7326151e148..fc9c526379a3f30b64b642a097556be22221afa6 100644 (file)
                  @@ -9,7 +9,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: pg_amproc.h,v 1.10 1998/09/01 04:34:49 momjian Exp $
                  + * $Id: pg_amproc.h,v 1.11 1998/10/03 05:40:52 momjian Exp $
                    *
                    * NOTES
                    *   the genbki.sh script reads this file and generates .bki
                  @@ -99,6 +99,8 @@ DATA(insert OID = 0 (403 1115 1107 1));
                   DATA(insert OID = 0 (403 1181  359 1));
                   DATA(insert OID = 0 (403 1312 1314 1));
                   DATA(insert OID = 0 (403 1313 1315 1));
                  +DATA(insert OID = 0 (403 810 836 1));
                  +DATA(insert OID = 0 (403 935 926 1));
                   
                   
                   /* hash */
                  index 3f7814a11f71b5fc76e5c1f56bc0b964a1ef9b64..388f5986303167dfb954918505961211b9d815d4 100644 (file)
                  @@ -7,7 +7,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: pg_opclass.h,v 1.11 1998/09/01 04:35:06 momjian Exp $
                  + * $Id: pg_opclass.h,v 1.12 1998/10/03 05:40:54 momjian Exp $
                    *
                    * NOTES
                    *   the genbki.sh script reads this file and generates .bki
                  @@ -107,5 +107,9 @@ DATA(insert OID = 1312 (    datetime_ops   1184   ));
                   DESCR("");
                   DATA(insert OID = 1313 (   timespan_ops   1186   ));
                   DESCR("");
                  +DATA(insert OID = 810  (   macaddr_ops   829   ));
                  +DESCR("");
                  +DATA(insert OID = 935  (   ipaddr_ops   869   ));
                  +DESCR("");
                   
                   #endif  /* PG_OPCLASS_H */
                  index 4b223624181182a4674a25895241eb99eb8c64eb..4604ccd7a94596979b6090676ebca04cf3bf200e 100644 (file)
                  @@ -7,7 +7,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: pg_operator.h,v 1.38 1998/09/14 01:14:48 momjian Exp $
                  + * $Id: pg_operator.h,v 1.39 1998/10/03 05:40:55 momjian Exp $
                    *
                    * NOTES
                    *   the genbki.sh script reads this file and generates .bki
                  @@ -466,7 +466,7 @@ DATA(insert OID = 1094 ( "<>"      PGUID 0 b t f  1082  1082   16 1094 1093  0 0 da
                   DATA(insert OID = 1095 ( "<"      PGUID 0 b t f  1082  1082   16 1097 1098  0 0 date_lt intltsel intltjoinsel ));
                   DATA(insert OID = 1096 ( "<="     PGUID 0 b t f  1082  1082   16 1098 1097  0 0 date_le intltsel intltjoinsel ));
                   DATA(insert OID = 1097 ( ">"      PGUID 0 b t f  1082  1082   16 1095 1096  0 0 date_gt intltsel intltjoinsel ));
                  -DATA(insert OID = 1098 ( ">="     PGUID 0 b t f  1082  1082   16 1096 1065  0 0 date_ge intltsel intltjoinsel ));
                  +DATA(insert OID = 1098 ( ">="     PGUID 0 b t f  1082  1082   16 1096 1095  0 0 date_ge intltsel intltjoinsel ));
                   DATA(insert OID = 1099 ( "-"      PGUID 0 b t f  1082  1082   23 0 0 0 0 date_mi - - ));
                   DATA(insert OID = 1100 ( "+"      PGUID 0 b t f  1082    23 1082 0 0 0 0 date_pli - - ));
                   DATA(insert OID = 1101 ( "-"      PGUID 0 b t f  1082    23 1082 0 0 0 0 date_mii - - ));
                  @@ -477,7 +477,7 @@ DATA(insert OID = 1109 ( "<>"      PGUID 0 b t f  1083  1083  16 1109 1108  0 0 time
                   DATA(insert OID = 1110 ( "<"      PGUID 0 b t f  1083  1083  16 1112 1113  0 0 time_lt intltsel intltjoinsel ));
                   DATA(insert OID = 1111 ( "<="     PGUID 0 b t f  1083  1083  16 1113 1112  0 0 time_le intltsel intltjoinsel ));
                   DATA(insert OID = 1112 ( ">"      PGUID 0 b t f  1083  1083  16 1110 1111  0 0 time_gt intltsel intltjoinsel ));
                  -DATA(insert OID = 1113 ( ">="     PGUID 0 b t f  1083  1083  16 1111 1065  0 0 time_ge intltsel intltjoinsel ));
                  +DATA(insert OID = 1113 ( ">="     PGUID 0 b t f  1083  1083  16 1111 1110  0 0 time_ge intltsel intltjoinsel ));
                   
                   /* float48 operators */
                   DATA(insert OID = 1116 (  "+"      PGUID 0 b t f 700 701 701 1116   0   0   0 float48pl - - ));
                  @@ -538,10 +538,10 @@ DATA(insert OID = 1305 (  ">="        PGUID 0 b t f  1296 1296 16 1304 1302 0 0 timest
                   /* name, owner, prec, kind, isleft, canhash, left, right, result, com, negate, lsortop, rsortop, oprcode, operrest, oprjoin */
                   DATA(insert OID = 1320 (  "="     PGUID 0 b t t 1184 1184   16 1320 1321 1322 1322 datetime_eq eqsel eqjoinsel ));
                   DATA(insert OID = 1321 (  "<>"    PGUID 0 b t f 1184 1184   16 1321 1320 0 0 datetime_ne neqsel neqjoinsel ));
                  -DATA(insert OID = 1322 (  "<"     PGUID 0 b t f 1184 1184   16 1325 1325 0 0 datetime_lt intltsel intltjoinsel ));
                  -DATA(insert OID = 1323 (  "<="    PGUID 0 b t f 1184 1184   16 1324 1324 0 0 datetime_le intltsel intltjoinsel ));
                  -DATA(insert OID = 1324 (  ">"     PGUID 0 b t f 1184 1184   16 1323 1323 0 0 datetime_gt intltsel intltjoinsel ));
                  -DATA(insert OID = 1325 (  ">="    PGUID 0 b t f 1184 1184   16 1322 1322 0 0 datetime_ge intltsel intltjoinsel ));
                  +DATA(insert OID = 1322 (  "<"     PGUID 0 b t f 1184 1184   16 1324 1325 0 0 datetime_lt intltsel intltjoinsel ));
                  +DATA(insert OID = 1323 (  "<="    PGUID 0 b t f 1184 1184   16 1325 1324 0 0 datetime_le intltsel intltjoinsel ));
                  +DATA(insert OID = 1324 (  ">"     PGUID 0 b t f 1184 1184   16 1322 1323 0 0 datetime_gt intltsel intltjoinsel ));
                  +DATA(insert OID = 1325 (  ">="    PGUID 0 b t f 1184 1184   16 1323 1322 0 0 datetime_ge intltsel intltjoinsel ));
                   
                   DATA(insert OID = 1327 (  "+"     PGUID 0 b t f 1184 1186 1184 1327    0 0 0 datetime_pl_span - - ));
                   DATA(insert OID = 1328 (  "-"     PGUID 0 b t f 1184 1184 1186    0    0 0 0 datetime_mi - - ));
                  @@ -550,10 +550,10 @@ DATA(insert OID = 1329 (  "-"    PGUID 0 b t f 1184 1186 1184    0    0 0 0 datetim
                   /* timespan operators */
                   DATA(insert OID = 1330 (  "="     PGUID 0 b t t 1186 1186   16 1330 1331 1332 1332 timespan_eq eqsel eqjoinsel ));
                   DATA(insert OID = 1331 (  "<>"    PGUID 0 b t f 1186 1186   16 1331 1330 0 0 timespan_ne neqsel neqjoinsel ));
                  -DATA(insert OID = 1332 (  "<"     PGUID 0 b t f 1186 1186   16 1335 1335 0 0 timespan_lt intltsel intltjoinsel ));
                  -DATA(insert OID = 1333 (  "<="    PGUID 0 b t f 1186 1186   16 1334 1334 0 0 timespan_le intltsel intltjoinsel ));
                  -DATA(insert OID = 1334 (  ">"     PGUID 0 b t f 1186 1186   16 1333 1333 0 0 timespan_gt intltsel intltjoinsel ));
                  -DATA(insert OID = 1335 (  ">="    PGUID 0 b t f 1186 1186   16 1332 1332 0 0 timespan_ge intltsel intltjoinsel ));
                  +DATA(insert OID = 1332 (  "<"     PGUID 0 b t f 1186 1186   16 1334 1335 0 0 timespan_lt intltsel intltjoinsel ));
                  +DATA(insert OID = 1333 (  "<="    PGUID 0 b t f 1186 1186   16 1335 1334 0 0 timespan_le intltsel intltjoinsel ));
                  +DATA(insert OID = 1334 (  ">"     PGUID 0 b t f 1186 1186   16 1332 1333 0 0 timespan_gt intltsel intltjoinsel ));
                  +DATA(insert OID = 1335 (  ">="    PGUID 0 b t f 1186 1186   16 1333 1332 0 0 timespan_ge intltsel intltjoinsel ));
                   
                   DATA(insert OID = 1336 (  "-"     PGUID 0 l t f    0 1186 1186    0    0 0 0 timespan_um 0 0 ));
                   DATA(insert OID = 1337 (  "+"     PGUID 0 b t f 1186 1186 1186 1337    0 0 0 timespan_pl - - ));
                  @@ -563,10 +563,10 @@ DATA(insert OID = 1338 (  "-"    PGUID 0 b t f 1186 1186 1186    0    0 0 0 timespa
                   DATA(insert OID = 1420 (  "@@"   PGUID 0 l t f    0  718  600    0    0    0    0 circle_center - - ));
                   DATA(insert OID = 1500 (  "="    PGUID 0 b t t  718  718   16 1500 1501 1502 1502 circle_eq eqsel eqjoinsel ));
                   DATA(insert OID = 1501 (  "<>"   PGUID 0 b t f  718  718   16 1501 1500    0    0 circle_ne neqsel neqjoinsel ));
                  -DATA(insert OID = 1502 (  "<"    PGUID 0 b t f  718  718   16    0    0    0    0 circle_lt areasel areajoinsel ));
                  -DATA(insert OID = 1503 (  ">"    PGUID 0 b t f  718  718   16    0    0    0    0 circle_gt areasel areajoinsel ));
                  -DATA(insert OID = 1504 (  "<="   PGUID 0 b t f  718  718   16    0    0    0    0 circle_le areasel areajoinsel ));
                  -DATA(insert OID = 1505 (  ">="   PGUID 0 b t f  718  718   16    0    0    0    0 circle_ge areasel areajoinsel ));
                  +DATA(insert OID = 1502 (  "<"    PGUID 0 b t f  718  718   16 1503 1505    0    0 circle_lt areasel areajoinsel ));
                  +DATA(insert OID = 1503 (  ">"    PGUID 0 b t f  718  718   16 1502 1504    0    0 circle_gt areasel areajoinsel ));
                  +DATA(insert OID = 1504 (  "<="   PGUID 0 b t f  718  718   16 1505 1503    0    0 circle_le areasel areajoinsel ));
                  +DATA(insert OID = 1505 (  ">="   PGUID 0 b t f  718  718   16 1504 1502    0    0 circle_ge areasel areajoinsel ));
                   
                   DATA(insert OID = 1506 (  "<<"   PGUID 0 b t f  718  718   16    0    0    0    0 circle_left intltsel intltjoinsel ));
                   DATA(insert OID = 1507 (  "&<"   PGUID 0 b t f  718  718   16    0    0    0    0 circle_overleft intltsel intltjoinsel ));
                  @@ -635,6 +635,27 @@ DATA(insert OID = 1615 (  "?|"   PGUID 0 l t f    0  628   16 1615  0 0 0 line_ver
                   DATA(insert OID = 1616 (  "="    PGUID 0 b t f  628  628   16 1616  0 0 0 line_eq intltsel - ));
                   DATA(insert OID = 1617 (  "#"    PGUID 0 b t f  628  628  600 1617  0 0 0 line_interpt - - ));
                   
                  +/* MAC type */
                  +DATA(insert OID = 1220 (  "="     PGUID 0 b t t 829 829     16 1220 1221 0 0 macaddr_eq eqsel eqjoinsel ));
                  +DATA(insert OID = 1221 (  "<>"    PGUID 0 b t f 829 829     16 1221 1220 0 0 macaddr_ne neqsel neqjoinsel ));
                  +DATA(insert OID = 1222 (  "<"     PGUID 0 b t f 829 829     16 1224 1225 0 0 macaddr_lt intltsel intltjoinsel ));
                  +DATA(insert OID = 1223 (  "<="    PGUID 0 b t f 829 829     16 1225 1224 0 0 macaddr_le intltsel intltjoinsel ));
                  +DATA(insert OID = 1224 (  ">"     PGUID 0 b t f 829 829     16 1222 1223 0 0 macaddr_gt intltsel intltjoinsel ));
                  +DATA(insert OID = 1225 (  ">="    PGUID 0 b t f 829 829     16 1223 1222 0 0 macaddr_ge intltsel intltjoinsel ));
                  +
                  +/* IP type */
                  +DATA(insert OID = 1201 (  "="     PGUID 0 b t t 869 869     16 1201 1202 0 0 ipaddr_eq eqsel eqjoinsel ));
                  +DATA(insert OID = 1202 (  "<>"    PGUID 0 b t f 869 869     16 1202 1201 0 0 ipaddr_ne neqsel neqjoinsel ));
                  +DATA(insert OID = 1203 (  "<"     PGUID 0 b t f 869 869     16 1205 1206 0 0 ipaddr_lt intltsel intltjoinsel ));
                  +DATA(insert OID = 1204 (  "<="    PGUID 0 b t f 869 869     16 1206 1205 0 0 ipaddr_le intltsel intltjoinsel ));
                  +DATA(insert OID = 1205 (  ">"     PGUID 0 b t f 869 869     16 1203 1204 0 0 ipaddr_gt intltsel intltjoinsel ));
                  +DATA(insert OID = 1206 (  ">="    PGUID 0 b t f 869 869     16 1204 1203 0 0 ipaddr_ge intltsel intltjoinsel ));
                  +DATA(insert OID = 931  (  "<<"    PGUID 0 b t f 869 869     16 933  934  0 0 ipaddr_sub intltsel intltjoinsel ));
                  +DATA(insert OID = 932  (  "<<="       PGUID 0 b t f 869 869     16 934  933  0 0 ipaddr_subeq intltsel intltjoinsel ));
                  +DATA(insert OID = 933  (  ">>"    PGUID 0 b t f 869 869     16 931  932  0 0 ipaddr_sup intltsel intltjoinsel ));
                  +DATA(insert OID = 934  (  ">>="       PGUID 0 b t f 869 869     16 932  931  0 0 ipaddr_supeq intltsel intltjoinsel ));
                  +
                  +
                   /*
                    * function prototypes
                    */
                  index 1f8ca515837227b5444a887f7f165ec2bba085f1..76f92f0e61282f01711e492cd1a8751b13f0fbbc 100644 (file)
                  @@ -6,7 +6,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: pg_proc.h,v 1.70 1998/10/02 16:27:55 momjian Exp $
                  + * $Id: pg_proc.h,v 1.71 1998/10/03 05:40:56 momjian Exp $
                    *
                    * NOTES
                    *   The script catalog/genbki.sh reads this file and generates .bki
                  @@ -2045,6 +2045,59 @@ DESCR("user name by UID (with fallback)");
                   DATA(insert OID = 1643 (  pg_get_indexdef     PGUID 11 f t f 1 f 25 "26" 100 0 0 100  foo bar ));
                   DESCR("index description");
                   
                  +/* for mac type support */
                  +DATA(insert OID = 436 (  macaddr_in            PGUID 11 f t f 1 f 829 "0" 100 0 0 100  foo bar ));
                  +DESCR("(internal)");
                  +DATA(insert OID = 437 (  macaddr_out       PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
                  +DESCR("(internal)");
                  +
                  +DATA(insert OID = 830 (  macaddr_eq           PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("equal");
                  +DATA(insert OID = 831 (  macaddr_lt           PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("less-than");
                  +DATA(insert OID = 832 (  macaddr_le           PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("less-than-or-equal");
                  +DATA(insert OID = 833 (  macaddr_gt           PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("greater-than");
                  +DATA(insert OID = 834 (  macaddr_ge           PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("greater-than-or-equal");
                  +DATA(insert OID = 835 (  macaddr_ne           PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("not equal");
                  +DATA(insert OID = 836 (  macaddr_cmp      PGUID 11 f t f 2 f 23 "829 829" 100 0 0 100  foo bar ));
                  +DESCR("less-equal-greater");
                  +DATA(insert OID = 837 (  macaddr_manuf    PGUID 11 f t f 1 f 25 "829" 100 0 0 100  foo bar ));
                  +DESCR("MAC manufacturer");
                  +
                  +/* for ip type support */
                  +DATA(insert OID = 910 (  ipaddr_in         PGUID 11 f t f 1 f 869 "0" 100 0 0 100  foo bar ));
                  +DESCR("(internal)");
                  +DATA(insert OID = 911 (  ipaddr_out            PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
                  +DESCR("(internal)");
                  +
                  +DATA(insert OID = 920 (  ipaddr_eq        PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("equal");
                  +DATA(insert OID = 921 (  ipaddr_lt        PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("less-than");
                  +DATA(insert OID = 922 (  ipaddr_le        PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("less-than-or-equal");
                  +DATA(insert OID = 923 (  ipaddr_gt        PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("greater-than");
                  +DATA(insert OID = 924 (  ipaddr_ge        PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("greater-than-or-equal");
                  +DATA(insert OID = 925 (  ipaddr_ne        PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("not equal");
                  +DATA(insert OID = 926 (  ipaddr_cmp           PGUID 11 f t f 2 f 23 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("less-equal-greater");
                  +DATA(insert OID = 927 (  ipaddr_sub           PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("is-subnet");
                  +DATA(insert OID = 928 (  ipaddr_subeq         PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("is-subnet-or-equal");
                  +DATA(insert OID = 929 (  ipaddr_sup           PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("is-supernet");
                  +DATA(insert OID = 930 (  ipaddr_supeq         PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
                  +DESCR("is-supernet-or-equal");
                  +
                  +
                   /*
                    * prototypes for functions pg_proc.c
                    */
                  index 99d0de22dce1748dffed759f5438d2f0a68dc54c..3a675c1c337daceecd92cf736cb3a36bd26b6f89 100644 (file)
                  @@ -7,7 +7,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: pg_type.h,v 1.47 1998/09/01 04:35:18 momjian Exp $
                  + * $Id: pg_type.h,v 1.48 1998/10/03 05:40:58 momjian Exp $
                    *
                    * NOTES
                    *   the genbki.sh script reads this file and generates .bki
                  @@ -298,6 +298,10 @@ DESCR("money '$d,ddd.cc'");
                   DATA(insert OID = 791 (  _money    PGUID  -1 -1 f b t \054 0  790 array_in array_out array_in array_out i _null_ ));
                   
                   /* OIDS 800 - 899 */
                  +DATA(insert OID = 829 ( macaddr       PGUID  6 -1 f b t \054 0 0 macaddr_in macaddr_out macaddr_in macaddr_out i _null_ ));
                  +DESCR("MAC address");
                  +DATA(insert OID = 869 ( ipaddr    PGUID  -1 -1 f b t \054 0 0 ipaddr_in ipaddr_out ipaddr_in ipaddr_out i _null_ ));
                  +DESCR("IP address");
                   
                   /* OIDS 900 - 999 */
                   
                  @@ -333,8 +337,9 @@ DATA(insert OID = 1027 (  _polygon   PGUID -1  -1 f b t \054 0 604 array_in array
                   /* Note: the size of an aclitem needs to match sizeof(AclItem) in acl.h */
                   DATA(insert OID = 1033 (  aclitem   PGUID 8   -1 f b t \054 0 0 aclitemin aclitemout aclitemin aclitemout i _null_ ));
                   DESCR("access control list");
                  -DATA(insert OID = 1034 (  _aclitem  PGUID -1  -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ ));
                  -
                  +DATA(insert OID = 1034 (  _aclitem  PGUID -1 -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ ));
                  +DATA(insert OID = 1040 (  _macaddr   PGUID -1 -1 f b t \054 0  829 array_in array_out array_in array_out i _null_ ));
                  +DATA(insert OID = 1041 (  _ipaddr    PGUID -1 -1 f b t \054 0  869 array_in array_out array_in array_out i _null_ ));
                   DATA(insert OID = 1042 ( bpchar         PGUID -1  -1 f b t \054 0  18 bpcharin bpcharout bpcharin bpcharout i _null_ ));
                   DESCR("blank-padded characters, length specifed when created");
                   #define BPCHAROID      1042
                  index f0cfd5b988f058153b9f7abdf17474531901dfdb..fd6f50e944459e7fa312e987cc68628e27780aee 100644 (file)
                  @@ -6,7 +6,7 @@
                    *
                    * Copyright (c) 1994, Regents of the University of California
                    *
                  - * $Id: builtins.h,v 1.55 1998/09/22 20:28:13 momjian Exp $
                  + * $Id: builtins.h,v 1.56 1998/10/03 05:40:59 momjian Exp $
                    *
                    * NOTES
                    *   This should normally only be included by fmgr.h.
                  @@ -28,6 +28,7 @@
                   #include 
                   #include 
                   #include 
                  +#include 
                   #include 
                   
                   /*
                  @@ -511,4 +512,40 @@ extern text *translate(text *string, char from, char to);
                   
                   /* acl.c */
                   
                  +/* inet_net_ntop.c */
                  +char *inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size);
                  +
                  +/* inet_net_pton.c */
                  +int inet_net_pton(int af, const char *src, void *dst, size_t size);
                  +
                  +/* ip.c */
                  +ipaddr    *ipaddr_in(char *str);
                  +char      *ipaddr_out(ipaddr * addr);
                  +bool       ipaddr_lt(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_le(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_eq(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_ge(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_gt(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_ne(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_sub(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_subeq(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_sup(ipaddr * a1, ipaddr * a2);
                  +bool       ipaddr_supeq(ipaddr * a1, ipaddr * a2);
                  +int4       ipaddr_cmp(ipaddr * a1, ipaddr * a2);
                  +int            v4bitncmp(u_int32_t a1, u_int32_t a2, int bits);
                  +
                  +
                  +/* mac.c */
                  +macaddr    *macaddr_in(char *str);
                  +char      *macaddr_out(macaddr * addr);
                  +bool       macaddr_lt(macaddr * a1, macaddr * a2);
                  +bool       macaddr_le(macaddr * a1, macaddr * a2);
                  +bool       macaddr_eq(macaddr * a1, macaddr * a2);
                  +bool       macaddr_ge(macaddr * a1, macaddr * a2);
                  +bool       macaddr_gt(macaddr * a1, macaddr * a2);
                  +bool       macaddr_ne(macaddr * a1, macaddr * a2);
                  +int4       macaddr_cmp(macaddr * a1, macaddr * a2);
                  +text      *macaddr_manuf(macaddr * addr);
                  +
                  +
                   #endif  /* BUILTINS_H */
                  diff --git a/src/include/utils/mac.h b/src/include/utils/mac.h
                  new file mode 100644 (file)
                  index 0000000..3ecb61c
                  --- /dev/null
                  @@ -0,0 +1,58 @@
                  +/*-------------------------------------------------------------------------
                  + *
                  + * builtins.h--
                  + *   Declarations for operations on built-in types.
                  + *
                  + *
                  + * Copyright (c) 1994, Regents of the University of California
                  + *
                  + * $Id: mac.h,v 1.1 1998/10/03 05:41:01 momjian Exp $
                  + *
                  + *-------------------------------------------------------------------------
                  + */
                  +#ifndef MAC_H
                  +#define MAC_H
                  +
                  +/*
                  + * This is the internal storage format for IP addresses:
                  + */
                  +
                  +typedef struct
                  +{
                  +   unsigned char family;
                  +   unsigned char bits;
                  +   union
                  +   {
                  +       u_int32_t   ipv4_addr;  /* network byte order */
                  +       /* add IPV6 address type here */
                  +   }           addr;
                  +}          ipaddr_struct;
                  +
                  +typedef struct varlena ipaddr;
                  +
                  +/*
                  + * This is the internal storage format for MAC addresses:
                  + */
                  +typedef struct macaddr
                  +{
                  +   unsigned char a;
                  +   unsigned char b;
                  +   unsigned char c;
                  +   unsigned char d;
                  +   unsigned char e;
                  +   unsigned char f;
                  +}          macaddr;
                  +
                  +
                  +typedef struct manufacturer
                  +{
                  +   unsigned char a;
                  +   unsigned char b;
                  +   unsigned char c;
                  +   char       *name;
                  +} manufacturer;
                  +
                  +extern manufacturer manufacturers[];
                  +
                  +#endif  /* MAC_H */
                  +
                  index 40a9122a7657c1243c3f27f016951979fdb6f60a..5873ae27021a9256981526795d5d0dc8a36252a2 100755 (executable)
                  @@ -786,6 +786,8 @@ do
                   -Tword8 \
                   -Tyy_size_t \
                   -Tyy_state_type \
                  +-Tipaddr \
                  +-Tmacaddr \
                   /tmp/$$a >/tmp/$$ 2>&1
                      if [ "$?" -ne 0 -o -s /tmp/$$ ]
                      then    echo "$FILE"