]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* cplus-dem.c (work_stuff): Replace const_type and volatile_type
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Oct 1998 14:53:28 +0000 (14:53 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Oct 1998 14:53:28 +0000 (14:53 +0000)
with type_quals.
(TYPE_UNQUALIFIED): New macro.
(TYPE_QUAL_CONST): Likewise.
(TYPE_QUAL_VOLATILE): Likewise.
(TYPE_QUAL_RESTRICT): Likewise.
(code_for_qualifier): New function.
(qualifier_string): Likewise.
(demangle_qualifier): Likewise.
(internal_cplus_demangle): Use them.
(demangle_signature): Likewise.
(demangle_template_value_parm): Likewise.
(do_type): Likewise.
(demangle_fund_type)): Likewise.
* Makefile.in (hash.h): Run gperf when necessary.
* cp-tree.h (CP_TYPE_READONLY): Remove.
(CP_TYPE_VOLATILE): Likewise.
(CP_TYPE_QUALS): New macro.
(CP_TYPE_CONST_P): Likewise.
(CP_TYPE_VOLATILE_P): Likewise.
(CP_TYPE_RESTRICT_P): Likewise.
(CP_TYPE_CONST_NON_VOLATILE_P): Likewise.
(cp_build_type_variant): Rename to ...
(cp_build_qualified_type): New function.
(c_apply_type_quals_to_decl): Declare.
(SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'.
(SIGNATURE_REFERENCE_NAME_FORMAT): Likewise.
(cp_type_qual_from_rid): New function.
(compparms): Remove unused parameter.  All callers changed.
(cp_type_quals): New function.
(at_least_as_qualified_p): Likewise.
(more_qualified_p): Likewise.
* call.c (standard_conversion): Replace calls to
cp_build_type_variant with cp_build_qualified_type.  Use
CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to
compare them.  Use CP_TYPE_* macros to check qualifiers.
(reference_binding): Likewise.
(implicit_conversion): Likewise.
(add_builtin_candidates): Likewise.
(build_over_call): Likewise.
* class.c (overrides): Compare all qualifiers, not just `const',
on method declarations.
* cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc.
(convert_pointer_to_real): Likewise.
(type_promotes_to): Likewise.
* decl.c (check_for_uninitialized_const_var): New function.
(init_decl_processing): More CP_TYPE_QUALS conversion, etc.
(cp_finish_decl): Use check_for_uninitialized_const_var.
(grokdeclarator): More CP_TYPE_QUALS conversion, etc.  Update to
handle `restrict'.
(grok_ctor_properties): Likewise.
(grok_op_properties): Likewise.
(start_function): Likewise.
(rever_static_member_fn): Likewise.
* decl2.c (grok_method_quals): Likewise.
(grokfield): Likewise.
* error.c (dump_readonly_or_volatile): Rename to ...
(dump_qualifiers): New function.  Handle `restrict'.
(dump_type_real): Use it.
(dump_aggr_type): Likewise.
(dump_type_prefix): Likewise.
(dump_type_suffix): Likewise.
(dump_function_decl): Likewise.
(cv_as_string): Likewise.
* gxx.gperf: Add __restrict and __restrict__.
* gxxint.texi: Document `u' as used for `__restrict', and a few
other previously undocumented codes.
* hash.h: Regenerated.
* init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc.
(build_member_call): Likewise.
(build_new_1): Likewise.
* lex.c (init_parse): Add entry for RID_RESTRICT.
(cons_up_default_function): More CP_TYPE_QUALS conversion, etc.
(cp_type_qual_from_rid): Define.
* lex.h (enum rid): Add RID_RESTRICT.
* method.c (process_modifiers): Deal with `restrict'.
* parse.y (primary): More CP_TYPE_QUALS conversion, etc.
* parse.c: Regenerated.
* pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc.
(tsubst_aggr_type): Likewise.
(tsubst): Likewise.
(check_cv_quals_for_unify): Likewise.
(unify): Likewise.
* rtti.c (init_rtti_processing): Likewise.
(build_headof): Likewise.
(get_tinfo_var): Likewise.
(buidl_dynamic_cast_1): Likewise.  Fix `volatile' handling.
(expand_class_desc): Likewise.
(expand_attr_desc): Likewise.
(synthesize_tinfo_fn): Likewise.
* search.c (covariant_return_p): Likewise.  Fix `volatile' handling.
(get_matching_virtual): Likewise.
(expand_upcast_fixups): Likewise.
* sig.c (build_signature_pointer_or_reference_name): Take
type_quals, not constp and volatilep.
(build_signature_pointer_or_reference_type): Likewise.
(match_method_types): More CP_TYPE_QUALS conversion, etc.
(build_signature_pointer_constructor): Likewise.
(build_signature_method_call): Likewise.
* tree.c (build_cplus_array_type): Likewise.
(cp_build_type_variant): Rename to ...
(cp_build_qualified_type): New function.  Deal with `__restrict'.
(canonical_type_variant): More CP_TYPE_QUALS conversion, etc.
(build_exception_variant): Likewise.
(mapcar): Likewise.
* typeck.c (qualif_type): Likewise.
(common_type): Likewise.
(comptypes): Likewise.
(comp_cv_target_types): Likewise.
(at_least_as_qualified_p): Define.
(more_qualified_p): Likewise.
(comp_cv_qualification): More CP_TYPE_QUALS conversion, etc.
(compparms): Likewise.
(inline_conversion): Likewise.
(string_conv_p): Likewise.
(build_component_ref): Likewise.
(build_indirect_ref): Likewise.
(build_array_ref): Likewise.
(build_unary_op): Likewise.
(build_conditional_expr): Likewise.
(build_static_cast): Likewise.
(build_c_cast): Likewise.
(build_modify_expr): Likewise.
(convert_For_assignment): Likewise.
(comp_ptr_ttypes_real): Likewise.
(cp_type_quals): New function.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23258 138bc75d-0d04-0410-961f-82ee72b054a4

30 files changed:
gcc/cp/ChangeLog
gcc/cp/Makefile.in
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/cvt.c
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/error.c
gcc/cp/gxx.gperf
gcc/cp/gxxint.texi
gcc/cp/hash.h
gcc/cp/init.c
gcc/cp/lex.c
gcc/cp/lex.h
gcc/cp/method.c
gcc/cp/parse.c
gcc/cp/parse.y
gcc/cp/pt.c
gcc/cp/rtti.c
gcc/cp/search.c
gcc/cp/sig.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/testsuite/g++.old-deja/g++.other/const1.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/dcast1.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/init8.C
gcc/testsuite/g++.old-deja/g++.other/virtual2.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/virtual3.C [new file with mode: 0644]
libiberty/cplus-dem.c

index da9cad2437053ed01993be5fe6367e106c8d2854..e5e8def2c4fa1b0b260238d194a57d26c59568c5 100644 (file)
@@ -1,3 +1,120 @@
+1998-10-23  Mark Mitchell  <mark@markmitchell.com>
+
+       * Makefile.in (hash.h): Run gperf when necessary.
+
+       * cp-tree.h (CP_TYPE_READONLY): Remove.
+       (CP_TYPE_VOLATILE): Likewise.
+       (CP_TYPE_QUALS): New macro.
+       (CP_TYPE_CONST_P): Likewise.
+       (CP_TYPE_VOLATILE_P): Likewise.
+       (CP_TYPE_RESTRICT_P): Likewise.
+       (CP_TYPE_CONST_NON_VOLATILE_P): Likewise.
+       (cp_build_type_variant): Rename to ...
+       (cp_build_qualified_type): New function.
+       (c_apply_type_quals_to_decl): Declare.
+       (SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'.
+       (SIGNATURE_REFERENCE_NAME_FORMAT): Likewise.
+       (cp_type_qual_from_rid): New function.
+       (compparms): Remove unused parameter.  All callers changed.
+       (cp_type_quals): New function.
+       (at_least_as_qualified_p): Likewise.
+       (more_qualified_p): Likewise.
+       
+       * call.c (standard_conversion): Replace calls to
+       cp_build_type_variant with cp_build_qualified_type.  Use
+       CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to
+       compare them.  Use CP_TYPE_* macros to check qualifiers.
+       (reference_binding): Likewise.
+       (implicit_conversion): Likewise.
+       (add_builtin_candidates): Likewise.
+       (build_over_call): Likewise.
+       * class.c (overrides): Compare all qualifiers, not just `const',
+       on method declarations.
+       * cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc.
+       (convert_pointer_to_real): Likewise.
+       (type_promotes_to): Likewise.
+       * decl.c (check_for_uninitialized_const_var): New function.
+       (init_decl_processing): More CP_TYPE_QUALS conversion, etc.
+       (cp_finish_decl): Use check_for_uninitialized_const_var.
+       (grokdeclarator): More CP_TYPE_QUALS conversion, etc.  Update to
+       handle `restrict'.
+       (grok_ctor_properties): Likewise.
+       (grok_op_properties): Likewise.
+       (start_function): Likewise.
+       (rever_static_member_fn): Likewise.
+       * decl2.c (grok_method_quals): Likewise.
+       (grokfield): Likewise.
+       * error.c (dump_readonly_or_volatile): Rename to ...
+       (dump_qualifiers): New function.  Handle `restrict'.
+       (dump_type_real): Use it.
+       (dump_aggr_type): Likewise.
+       (dump_type_prefix): Likewise.
+       (dump_type_suffix): Likewise.
+       (dump_function_decl): Likewise.
+       (cv_as_string): Likewise.
+       * gxx.gperf: Add __restrict and __restrict__.
+       * gxxint.texi: Document `u' as used for `__restrict', and a few
+       other previously undocumented codes.
+       * hash.h: Regenerated.
+       * init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc.
+       (build_member_call): Likewise.
+       (build_new_1): Likewise.
+       * lex.c (init_parse): Add entry for RID_RESTRICT.
+       (cons_up_default_function): More CP_TYPE_QUALS conversion, etc.
+       (cp_type_qual_from_rid): Define.
+       * lex.h (enum rid): Add RID_RESTRICT.
+       * method.c (process_modifiers): Deal with `restrict'.
+       * parse.y (primary): More CP_TYPE_QUALS conversion, etc.
+       * parse.c: Regenerated.
+       * pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc.
+       (tsubst_aggr_type): Likewise.
+       (tsubst): Likewise.
+       (check_cv_quals_for_unify): Likewise.
+       (unify): Likewise.
+       * rtti.c (init_rtti_processing): Likewise.
+       (build_headof): Likewise.
+       (get_tinfo_var): Likewise.
+       (buidl_dynamic_cast_1): Likewise.  Fix `volatile' handling.
+       (expand_class_desc): Likewise.
+       (expand_attr_desc): Likewise.
+       (synthesize_tinfo_fn): Likewise.
+       * search.c (covariant_return_p): Likewise.  Fix `volatile' handling. 
+       (get_matching_virtual): Likewise.
+       (expand_upcast_fixups): Likewise.
+       * sig.c (build_signature_pointer_or_reference_name): Take
+       type_quals, not constp and volatilep.
+       (build_signature_pointer_or_reference_type): Likewise.
+       (match_method_types): More CP_TYPE_QUALS conversion, etc.
+       (build_signature_pointer_constructor): Likewise.
+       (build_signature_method_call): Likewise.
+       * tree.c (build_cplus_array_type): Likewise.
+       (cp_build_type_variant): Rename to ...
+       (cp_build_qualified_type): New function.  Deal with `__restrict'.
+       (canonical_type_variant): More CP_TYPE_QUALS conversion, etc.
+       (build_exception_variant): Likewise.
+       (mapcar): Likewise.
+       * typeck.c (qualif_type): Likewise.
+       (common_type): Likewise.
+       (comptypes): Likewise.
+       (comp_cv_target_types): Likewise.
+       (at_least_as_qualified_p): Define.
+       (more_qualified_p): Likewise.
+       (comp_cv_qualification): More CP_TYPE_QUALS conversion, etc.
+       (compparms): Likewise.
+       (inline_conversion): Likewise.
+       (string_conv_p): Likewise.
+       (build_component_ref): Likewise.
+       (build_indirect_ref): Likewise.
+       (build_array_ref): Likewise.
+       (build_unary_op): Likewise.
+       (build_conditional_expr): Likewise.
+       (build_static_cast): Likewise.
+       (build_c_cast): Likewise.
+       (build_modify_expr): Likewise.
+       (convert_For_assignment): Likewise.
+       (comp_ptr_ttypes_real): Likewise.
+       (cp_type_quals): New function.
+       
 1998-10-23  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cp-tree.h (CP_TYPE_READONLY): New macro to handle arrays.
index 96e8f654c46d257c9361e427326c97c10686e1a3..425bedd3dd2261b1eb975e37dc31503ae45c0a46 100644 (file)
@@ -235,11 +235,10 @@ $(PARSE_C) : $(srcdir)/parse.y
 #      cp $(PARSE_C) y.tab.c
 #      touch stamp-parse
 
-# hash.h really depends on $(srcdir)/gxx.gperf.
-# But this would screw things for people that don't have gperf,
-# if gxx.gpref got touched, say.
-# Thus you have to remove hash.h to force it to be re-made.
-$(srcdir)/hash.h:
+# We used to try to protect people from having to rerun gperf.  But,
+# the C front-end already requires this if c-parse.gperf is changed,
+# so we should be consistent.
+$(srcdir)/hash.h: $(srcdir)/gxx.gperf
        gperf -L KR-C -F ', 0, 0' -p -j1 -g -o -t -N is_reserved_word \
                '-k1,4,7,$$' $(srcdir)/gxx.gperf >$(srcdir)/hash.h
 
index dc05d19b81ba8df5d80c7ab3fcbd24d447d2b9c8..94f62985b74a636ad7afb0f6af33e27c2012b855 100644 (file)
@@ -843,9 +843,8 @@ standard_conversion (to, from, expr)
               && ufcode != FUNCTION_TYPE)
        {
          from = build_pointer_type
-           (cp_build_type_variant (void_type_node,
-                                   TYPE_READONLY (TREE_TYPE (from)),
-                                   TYPE_VOLATILE (TREE_TYPE (from))));
+           (cp_build_qualified_type (void_type_node, 
+                                     CP_TYPE_QUALS (TREE_TYPE (from))));
          conv = build_conv (PTR_CONV, from, conv);
        }
       else if (ufcode == OFFSET_TYPE && utcode == OFFSET_TYPE)
@@ -868,9 +867,9 @@ standard_conversion (to, from, expr)
        {
          if (DERIVED_FROM_P (TREE_TYPE (to), TREE_TYPE (from)))
            {
-             from = cp_build_type_variant (TREE_TYPE (to),
-                                           TYPE_READONLY (TREE_TYPE (from)),
-                                           TYPE_VOLATILE (TREE_TYPE (from)));
+             from = 
+               cp_build_qualified_type (TREE_TYPE (to),
+                                        CP_TYPE_QUALS (TREE_TYPE (from)));
              from = build_pointer_type (from);
              conv = build_conv (PTR_CONV, from, conv);
            }
@@ -903,13 +902,11 @@ standard_conversion (to, from, expr)
       if (! DERIVED_FROM_P (fbase, tbase)
          || ! comptypes (TREE_TYPE (fromfn), TREE_TYPE (tofn), 1)
          || ! compparms (TREE_CHAIN (TYPE_ARG_TYPES (fromfn)),
-                         TREE_CHAIN (TYPE_ARG_TYPES (tofn)), 1)
-         || TYPE_READONLY (fbase) != TYPE_READONLY (tbase)
-         || TYPE_VOLATILE (fbase) != TYPE_VOLATILE (tbase))
+                         TREE_CHAIN (TYPE_ARG_TYPES (tofn)))
+         || CP_TYPE_QUALS (fbase) != CP_TYPE_QUALS (tbase))
        return 0;
 
-      from = cp_build_type_variant (tbase, TYPE_READONLY (fbase),
-                                   TYPE_VOLATILE (fbase));
+      from = cp_build_qualified_type (tbase, CP_TYPE_QUALS (fbase));
       from = build_cplus_method_type (from, TREE_TYPE (fromfn),
                                      TREE_CHAIN (TYPE_ARG_TYPES (fromfn)));
       from = build_ptrmemfunc_type (build_pointer_type (from));
@@ -981,9 +978,7 @@ reference_binding (rto, rfrom, expr, flags)
             || (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
                 && DERIVED_FROM_P (to, from)));
 
-  if (lvalue && related
-      && TYPE_READONLY (to) >= TYPE_READONLY (from)
-      && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
+  if (lvalue && related && at_least_as_qualified_p (to, from))
     {
       conv = build1 (IDENTITY_CONV, from, expr);
 
@@ -1012,14 +1007,12 @@ reference_binding (rto, rfrom, expr, flags)
            TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
        }
       if (conv
-         && ((! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
+         && ((! (CP_TYPE_CONST_NON_VOLATILE_P (to)
                  && (flags & LOOKUP_NO_TEMP_BIND) == 0))
              /* If T1 is reference-related to T2, cv1 must be the same
                 cv-qualification as, or greater cv-qualification than,
                 cv2; otherwise, the program is ill-formed.  */
-             || (related
-                 && (TYPE_READONLY (to) < TYPE_READONLY (from)
-                     || TYPE_VOLATILE (to) < TYPE_VOLATILE (from)))))
+             || (related && !at_least_as_qualified_p (to, from))))
        ICS_BAD_FLAG (conv) = 1;
     }
 
@@ -1071,8 +1064,7 @@ implicit_conversion (to, from, expr, flags)
            (TYPE_MAIN_VARIANT (TREE_TYPE (to)), expr, LOOKUP_ONLYCONVERTING);
          if (cand)
            {
-             if (! TYPE_READONLY (TREE_TYPE (to))
-                 || TYPE_VOLATILE (TREE_TYPE (to)))
+             if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (to)))
                ICS_BAD_FLAG (cand->second_conv) = 1;
              if (!conv || (ICS_BAD_FLAG (conv)
                            > ICS_BAD_FLAG (cand->second_conv)))
@@ -1823,7 +1815,7 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags)
 
              if (i == 0 && ref1
                  && (TREE_CODE (type) != REFERENCE_TYPE
-                     || TYPE_READONLY (TREE_TYPE (type))))
+                     || CP_TYPE_CONST_P (TREE_TYPE (type))))
                continue;
 
              if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE)
@@ -3223,17 +3215,9 @@ build_over_call (cand, args, flags)
       tree argtype = TREE_TYPE (TREE_VALUE (arg));
       tree t;
       if (ICS_BAD_FLAG (TREE_VEC_ELT (convs, i)))
-       {
-         int dv = (TYPE_VOLATILE (TREE_TYPE (parmtype))
-                   < TYPE_VOLATILE (TREE_TYPE (argtype)));
-         int dc = (TYPE_READONLY (TREE_TYPE (parmtype))
-                   < TYPE_READONLY (TREE_TYPE (argtype)));
-         char *p = (dv && dc ? "const and volatile"
-                             : dc ? "const" : dv ? "volatile" : "");
-
-         cp_error ("passing `%T' as `this' argument of `%#D' discards %s",
-                   TREE_TYPE (argtype), fn, p);
-       }
+       cp_error ("passing `%T' as `this' argument of `%#D' discards qualifiers",
+                 TREE_TYPE (argtype), fn);
+
       /* [class.mfct.nonstatic]: If a nonstatic member function of a class
         X is called for an object that is not of type X, or of a type
         derived from X, the behavior is undefined.
index 70a905f40865fa6601a6aed0dffe6857bf84a986..8141db183419375ff721cf4b573c261998f3919a 100644 (file)
@@ -2387,9 +2387,9 @@ overrides (fndecl, base_fndecl)
 #endif
       types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
       base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
-      if ((TYPE_READONLY (TREE_TYPE (TREE_VALUE (base_types)))
-          == TYPE_READONLY (TREE_TYPE (TREE_VALUE (types))))
-         && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types), 3))
+      if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
+          == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
+         && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
        return 1;
     }
   return 0;
index ad874a12b1880586c04f9e624a208f255d18035a..7ef0477f5b84640b188924cb3540c3fdf42d8940 100644 (file)
@@ -514,15 +514,6 @@ enum languages { lang_c, lang_cplusplus, lang_java };
 /* The _DECL for this _TYPE.  */
 #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
 
-#define CP_TYPE_READONLY(NODE)                 \
-  (TREE_CODE (NODE) == ARRAY_TYPE              \
-   ? TYPE_READONLY (TREE_TYPE (NODE))          \
-   : TYPE_READONLY (NODE))
-#define CP_TYPE_VOLATILE(NODE)                 \
-  (TREE_CODE (NODE) == ARRAY_TYPE              \
-   ? TYPE_VOLATILE (TREE_TYPE (NODE))          \
-   : TYPE_VOLATILE (NODE))
-
 /* Nonzero if T is a class (or struct or union) type.  Also nonzero
    for template type parameters and typename types.  Despite its name,
    this macro has nothing to do with the definition of aggregate given
@@ -547,6 +538,33 @@ enum languages { lang_c, lang_cplusplus, lang_java };
 /* True if this a "Java" type, defined in 'extern "Java"'. */
 #define TYPE_FOR_JAVA(NODE) TYPE_LANG_FLAG_3(NODE)
 
+/* The type qualifiers for this type, including the qualifiers on the
+   elements for an array type.  */
+#define CP_TYPE_QUALS(NODE)                    \
+  ((TREE_CODE (NODE) != ARRAY_TYPE)            \
+   ? TYPE_QUALS (NODE) : cp_type_quals (NODE))
+
+/* Nonzero if this type is const-qualified.  */
+#define CP_TYPE_CONST_P(NODE)                          \
+  (CP_TYPE_QUALS (NODE) & TYPE_QUAL_CONST)
+
+/* Nonzero if this type is volatile-qualified.  */
+#define CP_TYPE_VOLATILE_P(NODE)                       \
+  (CP_TYPE_QUALS (NODE) & TYPE_QUAL_VOLATILE)
+
+/* Nonzero if this type is restrict-qualified.  
+   FIXME: Does this make sense?  */
+#define CP_TYPE_RESTRICT_P(NODE)                       \
+  (CP_TYPE_QUALS (NODE) & TYPE_QUAL_RESTRICT)
+
+/* Nonzero if this type is const-qualified, but not
+   volatile-qualified.  Other qualifiers are ignored.  This macro is
+   used to test whether or not it is OK to bind an rvalue to a
+   reference.  */
+#define CP_TYPE_CONST_NON_VOLATILE_P(NODE)                             \
+  ((CP_TYPE_QUALS (NODE) & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE))     \
+   == TYPE_QUAL_CONST)
+
 #define DELTA_FROM_VTABLE_ENTRY(ENTRY) \
   (!flag_vtable_thunks ? \
      TREE_VALUE (CONSTRUCTOR_ELTS (ENTRY)) \
@@ -1882,7 +1900,7 @@ extern void check_function_format         PROTO((tree, tree, tree));
 /* Print an error message for invalid operands to arith operation CODE.
    NOP_EXPR is used as a special case (see truthvalue_conversion).  */
 extern void binary_op_error                     PROTO((enum tree_code));
-extern tree cp_build_type_variant                PROTO((tree, int, int));
+extern tree cp_build_qualified_type             PROTO((tree, int));
 extern tree canonical_type_variant              PROTO((tree));
 extern void c_expand_expr_stmt                  PROTO((tree));
 /* Validate the expression after `case' and apply default promotions.  */
@@ -1893,6 +1911,7 @@ extern void constant_expression_warning         PROTO((tree));
 extern tree convert_and_check                  PROTO((tree, tree));
 extern void overflow_warning                   PROTO((tree));
 extern void unsigned_conversion_warning                PROTO((tree, tree));
+extern void c_apply_type_quals_to_decl          PROTO((int, tree));
 
 /* Read the rest of the current #-directive line.  */
 #if USE_CPPLIB
@@ -2161,9 +2180,9 @@ extern int current_function_parms_stored;
 #define SIGNATURE_OPTR_NAME    "__optr"
 #define SIGNATURE_SPTR_NAME    "__sptr"
 #define SIGNATURE_POINTER_NAME "__sp_"
-#define SIGNATURE_POINTER_NAME_FORMAT "__%s%ssp_%s"
+#define SIGNATURE_POINTER_NAME_FORMAT "__%s%s%ssp_%s"
 #define SIGNATURE_REFERENCE_NAME "__sr_"
-#define SIGNATURE_REFERENCE_NAME_FORMAT "__%s%ssr_%s"
+#define SIGNATURE_REFERENCE_NAME_FORMAT "__%s%s%ssr_%s"
 
 #define SIGTABLE_PTR_TYPE      "__sigtbl_ptr_type"
 #define SIGTABLE_NAME_FORMAT   "__st_%s_%s"
@@ -2815,6 +2834,7 @@ extern void add_defarg_fn                 PROTO((tree));
 extern void do_pending_defargs                 PROTO((void));
 extern int identifier_type                     PROTO((tree));
 extern void yyhook                             PROTO((int));
+extern int cp_type_qual_from_rid                PROTO((tree));
 
 /* in method.c */
 extern void init_method                                PROTO((void));
@@ -3122,7 +3142,7 @@ extern tree common_type                           PROTO((tree, tree));
 extern int compexcepttypes                     PROTO((tree, tree));
 extern int comptypes                           PROTO((tree, tree, int));
 extern int comp_target_types                   PROTO((tree, tree, int));
-extern int compparms                           PROTO((tree, tree, int));
+extern int compparms                           PROTO((tree, tree));
 extern int comp_target_types                   PROTO((tree, tree, int));
 extern int comp_cv_qualification                PROTO((tree, tree));
 extern int comp_cv_qual_signature               PROTO((tree, tree));
@@ -3176,6 +3196,9 @@ extern tree c_expand_start_case                   PROTO((tree));
 extern int comp_ptr_ttypes                     PROTO((tree, tree));
 extern int ptr_reasonably_similar              PROTO((tree, tree));
 extern tree build_ptrmemfunc                   PROTO((tree, tree, int));
+extern int cp_type_quals                        PROTO((tree));
+extern int at_least_as_qualified_p              PROTO((tree, tree));
+extern int more_qualified_p                     PROTO((tree, tree));
 
 /* in typeck2.c */
 extern tree error_not_base_type                        PROTO((tree, tree));
index 3058641fc106cb4dfe788701f5526ed4efd9ece1..105c4e7ac4b611ba7083d420ff257c6b2900d3c6 100644 (file)
@@ -444,13 +444,13 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
             initialize a reference, then the reference must be to a
             non-volatile const type.  */
          if (! real_lvalue_p (expr)
-             && (!TYPE_READONLY (ttl) || TYPE_VOLATILE (ttl)))
+             && !CP_TYPE_CONST_NON_VOLATILE_P (ttl))
            {
              char* msg;
 
-             if (TYPE_VOLATILE (ttl) && decl)
+             if (CP_TYPE_VOLATILE_P (ttl) && decl)
                msg = "initialization of volatile reference type `%#T'";
-             else if (TYPE_VOLATILE (ttl))
+             else if (CP_TYPE_VOLATILE_P (ttl))
                msg = "conversion to volatile reference type `%#T'";
              else if (decl)
                msg = "initialization of non-const reference type `%#T'";
@@ -460,15 +460,10 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
              cp_error (msg, reftype);
              cp_error ("from rvalue of type `%T'", intype);
            }
-         else if (! (convtype & CONV_CONST))
-           {
-             if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
-               cp_error ("conversion from `%T' to `%T' discards const",
-                         ttr, reftype);
-             else if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
-               cp_error ("conversion from `%T' to `%T' discards volatile",
-                         ttr, reftype);
-           }
+         else if (! (convtype & CONV_CONST)
+                  && !at_least_as_qualified_p (ttl, ttr))
+           cp_error ("conversion from `%T' to `%T' discards qualifiers",
+                     ttr, reftype);
        }
 
       return build_up_reference (reftype, expr, flags);
@@ -502,7 +497,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl)
        return error_mark_node;
       rval = build_up_reference (reftype, rval, flags);
 
-      if (rval && ! TYPE_READONLY (TREE_TYPE (reftype)))
+      if (rval && ! CP_TYPE_CONST_P (TREE_TYPE (reftype)))
        cp_pedwarn ("initializing non-const `%T' with `%T' will use a temporary",
                    reftype, intype);
     }
@@ -570,8 +565,8 @@ convert_pointer_to_real (binfo, expr)
       binfo = NULL_TREE;
     }
 
-  ptr_type = cp_build_type_variant (type, TYPE_READONLY (TREE_TYPE (intype)),
-                                   TYPE_VOLATILE (TREE_TYPE (intype)));
+  ptr_type = cp_build_qualified_type (type,
+                                     CP_TYPE_QUALS (TREE_TYPE (intype)));
   ptr_type = build_pointer_type (ptr_type);
   if (ptr_type == TYPE_MAIN_VARIANT (intype))
     return expr;
@@ -1059,13 +1054,12 @@ tree
 type_promotes_to (type)
      tree type;
 {
-  int constp, volatilep;
+  int type_quals;
 
   if (type == error_mark_node)
     return error_mark_node;
 
-  constp = TYPE_READONLY (type);
-  volatilep = TYPE_VOLATILE (type);
+  type_quals = CP_TYPE_QUALS (type);
   type = TYPE_MAIN_VARIANT (type);
 
   /* bool always promotes to int (not unsigned), even if it's the same
@@ -1099,7 +1093,7 @@ type_promotes_to (type)
   else if (type == float_type_node)
     type = double_type_node;
 
-  return cp_build_type_variant (type, constp, volatilep);
+  return cp_build_qualified_type (type, type_quals);
 }
 
 /* The routines below this point are carefully written to conform to
index c98db982014d0f6fb002855df13907bdbf36d36a..448290bc707c12825084f88768bdb1f1a4069da4 100644 (file)
@@ -177,6 +177,7 @@ static void bad_specifiers PROTO((tree, char *, int, int, int, int,
                                  int));
 static void lang_print_error_function PROTO((char *));
 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
+static void check_for_uninitialized_const_var PROTO((tree));
 
 #if defined (DEBUG_CP_BINDING_LEVELS)
 static void indent PROTO((void));
@@ -2567,7 +2568,7 @@ decls_match (newdecl, olddecl)
              TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
            }
          else
-           types_match = compparms (p1, p2, 3);
+           types_match = compparms (p1, p2);
        }
       else
        types_match = 0;
@@ -2769,7 +2770,7 @@ duplicate_decls (newdecl, olddecl)
          else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
                   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
-                                TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))), 3)
+                                TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
                   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
                                           DECL_TEMPLATE_PARMS (olddecl)))
            {
@@ -2788,7 +2789,7 @@ duplicate_decls (newdecl, olddecl)
              cp_error_at ("previous declaration `%#D' here", olddecl);
            }
          else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
-                             TYPE_ARG_TYPES (TREE_TYPE (olddecl)), 3))
+                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
            {
              cp_error ("new declaration `%#D'", newdecl);
              cp_error_at ("ambiguates old declaration `%#D'", olddecl);
@@ -5840,7 +5841,8 @@ init_decl_processing ()
 
   string_type_node = build_pointer_type (char_type_node);
   const_string_type_node
-    = build_pointer_type (build_type_variant (char_type_node, 1, 0));
+    = build_pointer_type (build_qualified_type (char_type_node, 
+                                               TYPE_QUAL_CONST));
 #if 0
   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
 #endif
@@ -5870,7 +5872,8 @@ init_decl_processing ()
 
   ptr_type_node = build_pointer_type (void_type_node);
   const_ptr_type_node
-    = build_pointer_type (build_type_variant (void_type_node, 1, 0));
+    = build_pointer_type (build_qualified_type (void_type_node,
+                                               TYPE_QUAL_CONST)); 
 #if 0
   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
 #endif
@@ -6199,14 +6202,15 @@ init_decl_processing ()
       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
       TREE_UNSIGNED (fields[3]) = 0;
       TREE_CHAIN (fields[2]) = fields[3];
-      vtable_entry_type = build_type_variant (vtable_entry_type, 1, 0);
+      vtable_entry_type = build_qualified_type (vtable_entry_type,
+                                               TYPE_QUAL_CONST);
     }
   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
 
   vtbl_type_node
     = build_array_type (vtable_entry_type, NULL_TREE);
   layout_type (vtbl_type_node);
-  vtbl_type_node = cp_build_type_variant (vtbl_type_node, 1, 0);
+  vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
   layout_type (vtbl_ptr_type_node);
@@ -6245,7 +6249,8 @@ init_decl_processing ()
       TREE_UNSIGNED (fields[5]) = 0;
       TREE_CHAIN (fields[4]) = fields[5];
 
-      sigtable_entry_type = build_type_variant (sigtable_entry_type, 1, 0);
+      sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
+                                                 TYPE_QUAL_CONST);
       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
     }
 
@@ -7000,6 +7005,25 @@ obscure_complex_init (decl, init)
   return init;
 }
 
+/* Issue an error message if DECL is an uninitialized const variable.  */
+
+static void
+check_for_uninitialized_const_var (decl)
+     tree decl;
+{
+  tree type = TREE_TYPE (decl);
+
+  /* ``Unless explicitly declared extern, a const object does not have
+     external linkage and must be initialized. ($8.4; $12.1)'' ARM
+     7.1.6 */
+  if (TREE_CODE (decl) == VAR_DECL
+      && TREE_CODE (type) != REFERENCE_TYPE
+      && CP_TYPE_CONST_P (type)
+      && !TYPE_NEEDS_CONSTRUCTING (type)
+      && !DECL_INITIAL (decl))
+    cp_error ("uninitialized const `%D'", decl);
+}
+
 /* Finish processing of a declaration;
    install its line number and initial value.
    If the length of an array type is not known before,
@@ -7241,32 +7265,16 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
                      decl);
        }
 
-      if (TREE_CODE (decl) == VAR_DECL
-         && !DECL_INITIAL (decl)
-         && !TYPE_NEEDS_CONSTRUCTING (type)
-         && (TYPE_READONLY (type) || TREE_READONLY (decl)))
-       cp_error ("uninitialized const `%D'", decl);
+      check_for_uninitialized_const_var (decl);
 
       if (TYPE_SIZE (type) != NULL_TREE
          && TYPE_NEEDS_CONSTRUCTING (type))
        init = obscure_complex_init (decl, NULL_TREE);
-    }
-  else if (TREE_CODE (decl) == VAR_DECL
-          && TREE_CODE (type) != REFERENCE_TYPE
-          && (TYPE_READONLY (type) || TREE_READONLY (decl)))
-    {
-      /* ``Unless explicitly declared extern, a const object does not have
-        external linkage and must be initialized. ($8.4; $12.1)'' ARM 7.1.6
-        However, if it's `const int foo = 1; const int foo;', don't complain
-        about the second decl, since it does have an initializer before.
-        We deliberately don't complain about arrays, because they're
-        supposed to be initialized by a constructor.  */
-      if (! DECL_INITIAL (decl)
-         && TREE_CODE (type) != ARRAY_TYPE
-         && (!pedantic || !current_class_type))
-       cp_error ("uninitialized const `%#D'", decl);
-    }
 
+    }
+  else
+    check_for_uninitialized_const_var (decl);
+  
   /* For top-level declaration, the initial value was read in
      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
      must go in the permanent obstack; but don't discard the
@@ -8503,7 +8511,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
   tree type = NULL_TREE;
   int longlong = 0;
   int constp;
+  int restrictp;
   int volatilep;
+  int type_quals;
   int virtualp, explicitp, friendp, inlinep, staticp;
   int explicit_int = 0;
   int explicit_char = 0;
@@ -9065,8 +9075,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
       && TYPE_MAIN_VARIANT (type) == double_type_node)
     {
       RIDBIT_RESET (RID_LONG, specbits);
-      type = build_type_variant (long_double_type_node, TYPE_READONLY (type),
-                                TYPE_VOLATILE (type));
+      type = build_qualified_type (long_double_type_node, 
+                                  CP_TYPE_QUALS (type));
     }
 
   /* Check all other uses of type modifiers.  */
@@ -9188,17 +9198,24 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
 
   if (return_type == return_conversion 
       && (RIDBIT_SETP (RID_CONST, specbits)
-         || RIDBIT_SETP (RID_VOLATILE, specbits)))
-    cp_error ("`operator %T' cannot be cv-qualified",
+         || RIDBIT_SETP (RID_VOLATILE, specbits)
+         || RIDBIT_SETP (RID_RESTRICT, specbits)))
+    cp_error ("qualifiers are not allowed on declaration of `operator %T'",
              ctor_return_type);
 
   /* Set CONSTP if this declaration is `const', whether by
      explicit specification or via a typedef.
      Likewise for VOLATILEP.  */
 
-  constp = !!RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_READONLY (type);
-  volatilep = !!RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE (type);
-  type = cp_build_type_variant (type, constp, volatilep);
+  constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
+  restrictp = 
+    !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
+  volatilep = 
+    !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
+  type_quals = ((constp ? TYPE_QUAL_CONST : 0)
+               | (restrictp ? TYPE_QUAL_RESTRICT : 0)
+               | (volatilep ? TYPE_QUAL_VOLATILE : 0));
+  type = cp_build_qualified_type (type, type_quals);
   staticp = 0;
   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
@@ -9275,16 +9292,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
       && IS_SIGNATURE (current_class_type)
       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
     {
-      if (constp)
+      if (type_quals != TYPE_UNQUALIFIED)
        {
-         error ("`const' specified for signature member function `%s'", name);
-         constp = 0;
-       }
-      if (volatilep)
-       {
-         error ("`volatile' specified for signature member function `%s'",
-                name);
-         volatilep = 0;
+         error ("type qualifiers specified for signature member function `%s'", name);
+         type_quals = TYPE_UNQUALIFIED;
        }
       if (inlinep)
        {
@@ -9634,9 +9645,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
            /* Declaring a function type.
               Make sure we have a valid type for the function to return.  */
 
-           /* We now know that constp and volatilep don't apply to the
+           /* We now know that the TYPE_QUALS don't apply to the
                decl, but to its return type.  */
-           constp = volatilep = 0;
+           type_quals = TYPE_UNQUALIFIED;
 
            /* Warn about some types functions can't return.  */
 
@@ -9844,9 +9855,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
          /* Merge any constancy or volatility into the target type
             for the pointer.  */
 
-         /* We now know that constp and volatilep don't apply to the
-            decl, but to the target of the pointer.  */
-         constp = volatilep = 0;
+         /* We now know that the TYPE_QUALS don't apply to the decl,
+            but to the target of the pointer.  */
+         type_quals = TYPE_UNQUALIFIED;
 
          if (IS_SIGNATURE (type))
            {
@@ -9871,8 +9882,6 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
                                type);
                  type = build_signature_pointer_type (type);
                }
-             constp = 0;
-             volatilep = 0;
            }
          else if (TREE_CODE (declarator) == ADDR_EXPR)
            {
@@ -9895,25 +9904,37 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
            {
              register tree typemodlist;
              int erred = 0;
+
+             constp = 0;
+             volatilep = 0;
+             restrictp = 0;
              for (typemodlist = TREE_TYPE (declarator); typemodlist;
                   typemodlist = TREE_CHAIN (typemodlist))
                {
-                 if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
+                 tree qualifier = TREE_VALUE (typemodlist);
+
+                 if (qualifier == ridpointers[(int) RID_CONST])
                    constp++;
-                 else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
+                 else if (qualifier == ridpointers[(int) RID_VOLATILE])
                    volatilep++;
+                 else if (qualifier == ridpointers[(int) RID_RESTRICT])
+                   restrictp++;
                  else if (!erred)
                    {
                      erred = 1;
-                     error ("invalid type modifier within %s declarator",
-                            TREE_CODE (declarator) == ADDR_EXPR
-                            ? "reference" : "pointer");
+                     error ("invalid type modifier within pointer declarator");
                    }
                }
              if (constp > 1)
                pedwarn ("duplicate `const'");
              if (volatilep > 1)
                pedwarn ("duplicate `volatile'");
+             if (restrictp > 1)
+               pedwarn ("duplicate `restrict'");
+
+             type_quals = ((constp ? TYPE_QUAL_CONST : 0)
+                           | (restrictp ? TYPE_QUAL_RESTRICT : 0)
+                           | (volatilep ? TYPE_QUAL_VOLATILE : 0));
              if (TREE_CODE (declarator) == ADDR_EXPR
                  && (constp || volatilep))
                {
@@ -9921,9 +9942,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
                    pedwarn ("discarding `const' applied to a reference");
                  if (volatilep)
                    pedwarn ("discarding `volatile' applied to a reference");
-                 constp = volatilep = 0;
+                 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
                }
-             type = cp_build_type_variant (type, constp, volatilep);
+             type = cp_build_qualified_type (type, type_quals);
            }
          declarator = TREE_OPERAND (declarator, 0);
          ctype = NULL_TREE;
@@ -10131,7 +10152,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
 
   if (RIDBIT_SETP (RID_MUTABLE, specbits))
     {
-      if (constp)
+      if (type_quals & TYPE_QUAL_CONST)
        {
          error ("const `%s' cannot be declared `mutable'", name);
          RIDBIT_RESET (RID_MUTABLE, specbits);
@@ -10268,19 +10289,20 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
     {
       /* Note that the grammar rejects storage classes
         in typenames, fields or parameters.  */
-      if (constp || volatilep)
+      if (type_quals != TYPE_UNQUALIFIED)
        {
          if (IS_SIGNATURE (type))
-           error ("`const' or `volatile' specified with signature type");
+           error ("type qualifiers specified for signature type");
+         type_quals = TYPE_UNQUALIFIED;
        }
 
       /* Special case: "friend class foo" looks like a TYPENAME context.  */
       if (friendp)
        {
-         if (volatilep)
+         if (type_quals != TYPE_UNQUALIFIED)
            {
-             cp_error ("`volatile' specified for friend class declaration");
-             volatilep = 0;
+             cp_error ("type qualifiers specified for friend class declaration");
+             type_quals = TYPE_UNQUALIFIED;
            }
          if (inlinep)
            {
@@ -10360,7 +10382,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
        {
          /* Transfer const-ness of array into that of type pointed to.  */
          type = build_pointer_type (TREE_TYPE (type));
-         volatilep = constp = 0;
+         type_quals = TYPE_UNQUALIFIED;
        }
       else if (TREE_CODE (type) == FUNCTION_TYPE)
        type = build_pointer_type (type);
@@ -10788,14 +10810,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
       DECL_THIS_STATIC (decl) = 1;
 
     /* Record constancy and volatility.  */
-
-    if (constp)
-      TREE_READONLY (decl) = TREE_CODE (type) != REFERENCE_TYPE;
-    if (volatilep)
-      {
-       TREE_SIDE_EFFECTS (decl) = 1;
-       TREE_THIS_VOLATILE (decl) = 1;
-      }
+    /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
+    c_apply_type_quals_to_decl (type_quals, decl);
 
     return decl;
   }
@@ -11214,7 +11230,7 @@ grok_ctor_properties (ctype, decl)
          || TREE_PURPOSE (TREE_CHAIN (parmtypes))))
     {
       TYPE_HAS_INIT_REF (ctype) = 1;
-      if (TYPE_READONLY (TREE_TYPE (parmtype)))
+      if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
        TYPE_HAS_CONST_INIT_REF (ctype) = 1;
     }
   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
@@ -11419,7 +11435,7 @@ grok_op_properties (decl, virtualp, friendp)
            {
              TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
              if (TREE_CODE (parmtype) != REFERENCE_TYPE
-                 || TYPE_READONLY (TREE_TYPE (parmtype)))
+                 || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
                TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
            }
        }
@@ -12436,8 +12452,10 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
                                     TYPE_ARG_TYPES (TREE_TYPE (decl1)));
          DECL_RESULT (decl1)
            = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
-         TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (TREE_TYPE (fntype));
-         TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (TREE_TYPE (fntype));
+         TREE_READONLY (DECL_RESULT (decl1))
+           = CP_TYPE_CONST_P (TREE_TYPE (fntype));
+         TREE_THIS_VOLATILE (DECL_RESULT (decl1))
+           = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
        }
 
       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
@@ -12621,8 +12639,8 @@ start_function (declspecs, declarator, attrs, pre_parsed_p)
     {
       DECL_RESULT (decl1)
        = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
-      TREE_READONLY (DECL_RESULT (decl1)) = TYPE_READONLY (restype);
-      TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = TYPE_VOLATILE (restype);
+      TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
+      TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
     }
 
   /* Allocate further tree nodes temporarily during compilation
@@ -13864,15 +13882,14 @@ revert_static_member_fn (decl, fn, argtypes)
   tree function = fn ? *fn : TREE_TYPE (*decl);
   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
 
-  if (TYPE_READONLY (TREE_TYPE (TREE_VALUE (args))))
-    cp_error ("static member function `%#D' declared const", *decl);
-  if (TYPE_VOLATILE (TREE_TYPE (TREE_VALUE (args))))
-    cp_error ("static member function `%#D' declared volatile", *decl);
+  if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
+      != TYPE_UNQUALIFIED)
+    cp_error ("static member function `%#D' declared with type qualifiers", 
+             *decl);
 
   args = TREE_CHAIN (args);
   tmp = build_function_type (TREE_TYPE (function), args);
-  tmp = build_type_variant (tmp, TYPE_READONLY (function),
-                           TYPE_VOLATILE (function));
+  tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
   tmp = build_exception_variant (tmp,
                                 TYPE_RAISES_EXCEPTIONS (function));
   TREE_TYPE (*decl) = tmp;
index 302138ab2d24df391f6dea9c294078c8cfdad351..6ef3099332db25f0dbc7ccd168413623b204f0d2 100644 (file)
@@ -784,36 +784,27 @@ grok_method_quals (ctype, function, quals)
 {
   tree fntype = TREE_TYPE (function);
   tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
+  int type_quals = TYPE_UNQUALIFIED;
+  int dup_quals = TYPE_UNQUALIFIED;
 
   do
     {
-      extern tree ridpointers[];
-
-      if (TREE_VALUE (quals) == ridpointers[(int)RID_CONST])
-       {
-         if (TYPE_READONLY (ctype))
-           error ("duplicate `%s' %s",
-                  IDENTIFIER_POINTER (TREE_VALUE (quals)),
-                  (TREE_CODE (function) == FUNCTION_DECL
-                   ? "for member function" : "in type declaration"));
-         ctype = build_type_variant (ctype, 1, TYPE_VOLATILE (ctype));
-         build_pointer_type (ctype);
-       }
-      else if (TREE_VALUE (quals) == ridpointers[(int)RID_VOLATILE])
-       {
-         if (TYPE_VOLATILE (ctype))
-           error ("duplicate `%s' %s",
-                  IDENTIFIER_POINTER (TREE_VALUE (quals)),
-                  (TREE_CODE (function) == FUNCTION_DECL
-                   ? "for member function" : "in type declaration"));
-         ctype = build_type_variant (ctype, TYPE_READONLY (ctype), 1);
-         build_pointer_type (ctype);
-       }
+      int tq = cp_type_qual_from_rid (TREE_VALUE (quals));
+      
+      if (type_quals & tq)
+       dup_quals |= tq;
       else
-       my_friendly_abort (20);
+       type_quals |= tq;
       quals = TREE_CHAIN (quals);
-    }
+    } 
   while (quals);
+
+  if (dup_quals != TYPE_UNQUALIFIED)
+    cp_error ("duplicate type qualifiers in %s declaration",
+             TREE_CODE (function) == FUNCTION_DECL 
+             ? "member function" : "type");
+
+  ctype = cp_build_qualified_type (ctype, type_quals);
   fntype = build_cplus_method_type (ctype, TREE_TYPE (fntype),
                                    (TREE_CODE (fntype) == METHOD_TYPE
                                     ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
@@ -1417,7 +1408,7 @@ check_classfn (ctype, function)
 
                      if (comptypes (TREE_TYPE (TREE_TYPE (function)),
                                     TREE_TYPE (TREE_TYPE (fndecl)), 1)
-                         && compparms (p1, p2, 3)
+                         && compparms (p1, p2)
                          && (DECL_TEMPLATE_SPECIALIZATION (function)
                              == DECL_TEMPLATE_SPECIALIZATION (fndecl))
                          && (!DECL_TEMPLATE_SPECIALIZATION (function)
@@ -1702,7 +1693,7 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
        }
       /* Force the compiler to know when an uninitialized static
         const member is being used.  */
-      if (TYPE_READONLY (value) && init == 0)
+      if (CP_TYPE_CONST_P (TREE_TYPE (value)) && init == 0)
        TREE_USED (value) = 1;
       DECL_INITIAL (value) = init;
       DECL_IN_AGGR_P (value) = 1;
index ba5243aefc2db204f08e4fe050bd44c86883aebe..ba3517ef6f32121b8dc7735a95f394964200a17a 100644 (file)
@@ -102,7 +102,7 @@ static void dump_type_suffix PROTO((tree, int, int));
 static void dump_function_name PROTO((tree));
 static void dump_expr_list PROTO((tree));
 static void dump_global_iord PROTO((tree));
-static void dump_readonly_or_volatile PROTO((tree, enum pad));
+static void dump_qualifiers PROTO((tree, enum pad));
 static void dump_char PROTO((int));
 static char *aggr_variety PROTO((tree));
 static tree ident_fndecl PROTO((tree));
@@ -115,19 +115,46 @@ init_error ()
 }
 
 static void
-dump_readonly_or_volatile (t, p)
+dump_qualifiers (t, p)
      tree t;
      enum pad p;
 {
-  if (TYPE_READONLY (t) || TYPE_VOLATILE (t))
+  if (TYPE_QUALS (t))
     {
       if (p == before) OB_PUTC (' ');
-      if (TYPE_READONLY (t))
-       OB_PUTS ("const");
-      if (TYPE_READONLY (t) && TYPE_VOLATILE (t))
-       OB_PUTC (' ');
-      if (TYPE_VOLATILE (t))
-       OB_PUTS ("volatile");
+      switch (TYPE_QUALS (t))
+       {
+       case TYPE_QUAL_CONST:
+         OB_PUTS ("const");
+         break;
+
+       case TYPE_QUAL_VOLATILE:
+         OB_PUTS ("volatile");
+         break;
+
+       case TYPE_QUAL_RESTRICT:
+         OB_PUTS ("__restrict");
+         break;
+
+       case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE:
+         OB_PUTS ("const volatile");
+         break;
+
+       case TYPE_QUAL_CONST | TYPE_QUAL_RESTRICT:
+         OB_PUTS ("const __restrict");
+         break;
+
+       case TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
+         OB_PUTS ("volatile __restrict");
+         break;
+
+       case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
+         OB_PUTS ("const volatile __restrict");
+         break;
+
+       default:
+         my_friendly_abort (0);
+       }
       if (p == after) OB_PUTC (' ');
     }
 }
@@ -197,8 +224,7 @@ dump_type_real (t, v, canonical_name)
       if (TYPE_LANG_SPECIFIC (t)
          && (IS_SIGNATURE_POINTER (t) || IS_SIGNATURE_REFERENCE (t)))
        {
-         if (TYPE_READONLY (t) | TYPE_VOLATILE (t))
-           dump_readonly_or_volatile (t, after);
+         dump_qualifiers (t, after);
          dump_type_real (SIGNATURE_TYPE (t), v, canonical_name);
          if (IS_SIGNATURE_POINTER (t))
            OB_PUTC ('*');
@@ -232,7 +258,7 @@ dump_type_real (t, v, canonical_name)
     case BOOLEAN_TYPE:
       {
        tree type;
-       dump_readonly_or_volatile (t, after);
+       dump_qualifiers (t, after);
        type = canonical_name ? TYPE_MAIN_VARIANT (t) : t;
        if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
          OB_PUTID (TYPE_IDENTIFIER (type));
@@ -275,7 +301,7 @@ dump_type_real (t, v, canonical_name)
       break;
 
     case TEMPLATE_TYPE_PARM:
-      dump_readonly_or_volatile (t, after);
+      dump_qualifiers (t, after);
       if (TYPE_IDENTIFIER (t))
        OB_PUTID (TYPE_IDENTIFIER (t));
       else
@@ -343,7 +369,7 @@ dump_aggr_type (t, v, canonical_name)
   tree name;
   char *variety = aggr_variety (t);
 
-  dump_readonly_or_volatile (t, after);
+  dump_qualifiers (t, after);
 
   if (v > 0)
     {
@@ -404,13 +430,14 @@ dump_type_prefix (t, v, canonical_name)
   switch (TREE_CODE (t))
     {
     case POINTER_TYPE:
+    case REFERENCE_TYPE:
       {
        tree sub = TREE_TYPE (t);
        
        dump_type_prefix (sub, v, canonical_name);
        /* A tree for a member pointer looks like pointer to offset,
           so let the OFFSET_TYPE case handle it.  */
-       if (TREE_CODE (sub) != OFFSET_TYPE)
+       if (!TYPE_PTRMEM_P (t))
          {
            switch (TREE_CODE (sub))
              {
@@ -425,42 +452,20 @@ dump_type_prefix (t, v, canonical_name)
 
              case POINTER_TYPE:
                /* We don't want "char * *" */
-               if (! (TYPE_READONLY (sub) || TYPE_VOLATILE (sub)))
+               if (TYPE_QUALS (sub) == TYPE_UNQUALIFIED)
                  break;
                /* But we do want "char *const *" */
                
              default:
                OB_PUTC (' ');
              }
-           OB_PUTC ('*');
-           dump_readonly_or_volatile (t, none);
-         }
-      }
-      break;
-
-    case REFERENCE_TYPE:
-      {
-       tree sub = TREE_TYPE (t);
-       dump_type_prefix (sub, v, canonical_name);
-
-       switch (TREE_CODE (sub))
-         {
-         case ARRAY_TYPE:
-           OB_PUTC2 (' ', '(');
-           break;
-
-         case POINTER_TYPE:
-           /* We don't want "char * &" */
-           if (! (TYPE_READONLY (sub) || TYPE_VOLATILE (sub)))
-             break;
-           /* But we do want "char *const &" */
-
-         default:
-           OB_PUTC (' ');
+           if (TREE_CODE (t) == POINTER_TYPE)
+             OB_PUTC ('*');
+           else
+             OB_PUTC ('&');
+           dump_qualifiers (t, none);
          }
       }
-      OB_PUTC ('&');
-      dump_readonly_or_volatile (t, none);
       break;
 
     case OFFSET_TYPE:
@@ -473,7 +478,7 @@ dump_type_prefix (t, v, canonical_name)
          OB_PUTC2 (':', ':');
        }
       OB_PUTC ('*');
-      dump_readonly_or_volatile (t, none);
+      dump_qualifiers (t, none);
       break;
 
       /* Can only be reached through function pointer -- this would not be
@@ -555,7 +560,7 @@ dump_type_suffix (t, v, canonical_name)
          OB_PUTS ("...");
        OB_PUTC (')');
        if (TREE_CODE (t) == METHOD_TYPE)
-         dump_readonly_or_volatile
+         dump_qualifiers
            (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), before);
        dump_type_suffix (TREE_TYPE (t), v, canonical_name);
        break;
@@ -1000,10 +1005,10 @@ dump_function_decl (t, v)
     {
       if (IS_SIGNATURE (cname))
        /* We look at the type pointed to by the `optr' field of `this.'  */
-       dump_readonly_or_volatile
+       dump_qualifiers
          (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (TREE_VALUE (TYPE_ARG_TYPES (fntype))))), before);
       else
-       dump_readonly_or_volatile
+       dump_qualifiers
          (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype))), before);
     }
 }
@@ -1951,7 +1956,7 @@ cv_as_string (p, v)
 {
   OB_INIT ();
 
-  dump_readonly_or_volatile (p, before);
+  dump_qualifiers (p, before);
 
   OB_FINISH ();
 
index 868dfc426f0826202a1f374f5041bb0d57e2cc4c..5632f7f34a5460e70fd6b140cb896d58770a152a 100644 (file)
@@ -22,6 +22,8 @@ __label__, LABEL, NORID
 __null, CONSTANT, RID_NULL
 __real, REALPART, NORID
 __real__, REALPART, NORID
+__restrict, CV_QUALIFIER, RID_RESTRICT
+__restrict__, CV_QUALIFIER, RID_RESTRICT
 __signature__, AGGR, RID_SIGNATURE     /* Extension */,
 __signed, TYPESPEC, RID_SIGNED
 __signed__, TYPESPEC, RID_SIGNED
index c8f312ebfca25608723a01ee3dbc51d4db751081..f23b85d351400780d6a67ee1913d9a2fa02c15a0 100644 (file)
@@ -1783,6 +1783,12 @@ Used by squangling to compress qualified names.
 @item l
 Encodes the C++ @code{long} type.
 
+@item n
+Used with squangling.
+
+@item N 
+Namespaces.
+
 @item P
 Indicates a pointer type.  Followed by the type pointed to.
 
@@ -1817,11 +1823,14 @@ A modifier that indicates that the following integer type is unsigned.
 Also used to indicate that the following class or namespace name
 is encoded using Unicode-mangling.
 
+@item u
+The @code{restrict} type qualifier.
+
 @item v
 Encodes the C++ and Java @code{void} types.
 
 @item V
-A modified for a @code{const} type or method.
+A modifier for a @code{volatile} type or method.
 
 @item w
 Encodes the C++ @code{wchar_t} type, and the Java @code{char} types.
index 21ebdd7901e13816fb497bda59b0ea17704449a2..71c2f317ffef98bebb1a281649985a4ac74929b0 100644 (file)
@@ -1,14 +1,14 @@
 /* KR-C code produced by gperf version 2.7.1 (19981006 egcs) */
-/* Command-line: gperf -L KR-C -F , 0, 0 -p -j1 -g -o -t -N is_reserved_word -k1,4,7,$ ./gxx.gperf  */
+/* Command-line: gperf -L KR-C -F , 0, 0 -p -j1 -g -o -t -N is_reserved_word -k1,4,7,$ ../../../gcc/cp/gxx.gperf  */
 /* Command-line: gperf -L KR-C -F ', 0, 0' -p -j1 -g -o -t -N is_reserved_word -k1,4,$,7 gplus.gperf  */
 struct resword { char *name; short token; enum rid rid;};
 
-#define TOTAL_KEYWORDS 104
+#define TOTAL_KEYWORDS 106
 #define MIN_WORD_LENGTH 2
 #define MAX_WORD_LENGTH 16
 #define MIN_HASH_VALUE 4
-#define MAX_HASH_VALUE 261
-/* maximum key range = 258, duplicates = 0 */
+#define MAX_HASH_VALUE 250
+/* maximum key range = 247, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -18,34 +18,34 @@ hash (str, len)
      register char *str;
      register unsigned int len;
 {
-  static unsigned short asso_values[] =
+  static unsigned char asso_values[] =
     {
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262,   0, 262,  87,  25,  96,
-       60,   0,  55,   7,   4,  41, 262,   2,  15,  49,
-       14,  63,  32,  29,   3,  23,   6,   8,   2,   2,
-        0,   7, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262, 262, 262, 262, 262,
-      262, 262, 262, 262, 262, 262
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251,   0, 251,  64,  93,   3,
+        0,   0,  74,  35,   0,  26, 251,   2,  31,  65,
+       23,  76,   7,  19,  45,  37,   6,  64,  12,  38,
+       14,   4, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
+      251, 251, 251, 251, 251, 251
     };
   register int hval = len;
 
@@ -80,155 +80,145 @@ is_reserved_word (str, len)
       {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
       {"else", ELSE, NORID,},
       {"", 0, 0},
-      {"xor", '^', NORID,},
-      {"", 0, 0},
+      {"delete", DELETE, NORID,},
+      {"case", CASE, NORID,},
       {"__real__", REALPART, NORID},
       {"", 0, 0},
       {"true", CXX_TRUE, NORID,},
-      {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"catch", CATCH, NORID,},
+      {"typeid", TYPEID, NORID,},
       {"try", TRY, NORID,},
       {"", 0, 0}, {"", 0, 0},
-      {"new", NEW, NORID,},
+      {"void", TYPESPEC, RID_VOID,},
+      {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"private", VISSPEC, RID_PRIVATE,},
+      {"template", TEMPLATE, RID_TEMPLATE,},
+      {"protected", VISSPEC, RID_PROTECTED,},
       {"extern", SCSPEC, RID_EXTERN,},
-      {"__real", REALPART, NORID},
-      {"while", WHILE, NORID,},
+      {"", 0, 0}, {"", 0, 0},
       {"not", '!', NORID,},
-      {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
-      {"__extension__", EXTENSION, NORID},
       {"", 0, 0},
-      {"__null", CONSTANT, RID_NULL},
-      {"__asm__", ASM_KEYWORD, NORID},
-      {"return", RETURN, NORID,},
+      {"__signed", TYPESPEC, RID_SIGNED},
+      {"int", TYPESPEC, RID_INT,},
+      {"__signed__", TYPESPEC, RID_SIGNED},
+      {"__real", REALPART, NORID},
       {"", 0, 0},
-      {"long", TYPESPEC, RID_LONG,},
-      {"using", USING, NORID,},
       {"xor_eq", ASSIGN, NORID,},
-      {"__inline", SCSPEC, RID_INLINE},
-      {"short", TYPESPEC, RID_SHORT,},
-      {"__inline__", SCSPEC, RID_INLINE},
+      {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"__attribute", ATTRIBUTE, NORID},
+      {"__asm__", ASM_KEYWORD, NORID},
+      {"__attribute__", ATTRIBUTE, NORID},
+      {"compl", '~', NORID,},
+      {"public", VISSPEC, RID_PUBLIC,},
+      {"not_eq", EQCOMPARE, NORID,},
       {"switch", SWITCH, NORID,},
-      {"__alignof__", ALIGNOF, NORID},
-      {"private", VISSPEC, RID_PRIVATE,},
-      {"reinterpret_cast", REINTERPRET_CAST, NORID,},
-      {"struct", AGGR, RID_RECORD,},
+      {"__extension__", EXTENSION, NORID},
+      {"const", CV_QUALIFIER, RID_CONST,},
+      {"static", SCSPEC, RID_STATIC,},
       {"", 0, 0},
-      {"virtual", SCSPEC, RID_VIRTUAL,},
+      {"__inline", SCSPEC, RID_INLINE},
+      {"", 0, 0},
+      {"__inline__", SCSPEC, RID_INLINE},
+      {"__restrict__", CV_QUALIFIER, RID_RESTRICT},
+      {"inline", SCSPEC, RID_INLINE,},
+      {"const_cast", CONST_CAST, NORID,},
       {"static_cast", STATIC_CAST, NORID,},
-      {"", 0, 0}, {"", 0, 0},
-      {"not_eq", EQCOMPARE, NORID,},
-      {"int", TYPESPEC, RID_INT,},
-      {"__signed__", TYPESPEC, RID_SIGNED},
-      {"template", TEMPLATE, RID_TEMPLATE,},
+      {"__restrict", CV_QUALIFIER, RID_RESTRICT},
+      {"xor", '^', NORID,},
+      {"__wchar_t", TYPESPEC, RID_WCHAR  /* Unique to ANSI C++ */,},
+      {"new", NEW, NORID,},
+      {"__alignof__", ALIGNOF, NORID},
+      {"signed", TYPESPEC, RID_SIGNED,},
+      {"and", ANDAND, NORID,},
+      {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"explicit", SCSPEC, RID_EXPLICIT,},
       {"", 0, 0},
-      {"signature", AGGR, RID_SIGNATURE        /* Extension */,},
-      {"register", SCSPEC, RID_REGISTER,},
-      {"this", THIS, NORID,},
       {"__imag__", IMAGPART, NORID},
-      {"__attribute", ATTRIBUTE, NORID},
-      {"bool", TYPESPEC, RID_BOOL,},
-      {"__attribute__", ATTRIBUTE, NORID},
-      {"for", FOR, NORID,},
-      {"__imag", IMAGPART, NORID},
+      {"while", WHILE, NORID,},
+      {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"do", DO, NORID,},
       {"typename", TYPENAME_KEYWORD, NORID,},
-      {"", 0, 0}, {"", 0, 0},
-      {"delete", DELETE, NORID,},
+      {"friend", SCSPEC, RID_FRIEND,},
+      {"continue", CONTINUE, NORID,},
+      {"class", AGGR, RID_CLASS,},
+      {"default", DEFAULT, NORID,},
+      {"this", THIS, NORID,},
+      {"dynamic_cast", DYNAMIC_CAST, NORID,},
       {"typeof", TYPEOF, NORID,},
-      {"or", OROR, NORID,},
-      {"", 0, 0},
-      {"explicit", SCSPEC, RID_EXPLICIT,},
-      {"", 0, 0},
-      {"typeid", TYPEID, NORID,},
-      {"", 0, 0}, {"", 0, 0},
+      {"virtual", SCSPEC, RID_VIRTUAL,},
       {"export", SCSPEC, RID_EXPORT,},
-      {"throw", THROW, NORID,},
-      {"__asm", ASM_KEYWORD, NORID},
+      {"and_eq", ASSIGN, NORID,},
+      {"__typeof__", TYPEOF, NORID},
       {"__const__", CV_QUALIFIER, RID_CONST},
       {"__volatile", CV_QUALIFIER, RID_VOLATILE},
-      {"__typeof__", TYPEOF, NORID},
+      {"short", TYPESPEC, RID_SHORT,},
       {"__volatile__", CV_QUALIFIER, RID_VOLATILE},
       {"__const", CV_QUALIFIER, RID_CONST},
-      {"false", CXX_FALSE, NORID,},
-      {"sizeof", SIZEOF, NORID,},
-      {"", 0, 0}, {"", 0, 0},
-      {"__complex", TYPESPEC, RID_COMPLEX},
-      {"inline", SCSPEC, RID_INLINE,},
-      {"__complex__", TYPESPEC, RID_COMPLEX},
-      {"union", AGGR, RID_UNION,},
+      {"namespace", NAMESPACE, NORID,},
+      {"char", TYPESPEC, RID_CHAR,},
+      {"unsigned", TYPESPEC, RID_UNSIGNED,},
       {"double", TYPESPEC, RID_DOUBLE,},
-      {"", 0, 0},
-      {"__alignof", ALIGNOF, NORID},
-      {"", 0, 0}, {"", 0, 0},
-      {"bitor", '|', NORID,},
       {"or_eq", ASSIGN, NORID,},
+      {"__null", CONSTANT, RID_NULL},
       {"if", IF, NORID,},
-      {"", 0, 0},
-      {"case", CASE, NORID,},
-      {"", 0, 0},
-      {"enum", ENUM, NORID,},
-      {"signed", TYPESPEC, RID_SIGNED,},
-      {"", 0, 0},
-      {"__sigof__", SIGOF, NORID               /* Extension */,},
-      {"char", TYPESPEC, RID_CHAR,},
-      {"", 0, 0}, {"", 0, 0},
-      {"__signed", TYPESPEC, RID_SIGNED},
-      {"namespace", NAMESPACE, NORID,},
+      {"__signature__", AGGR, RID_SIGNATURE    /* Extension */,},
       {"__label__", LABEL, NORID},
-      {"volatile", CV_QUALIFIER, RID_VOLATILE,},
-      {"protected", VISSPEC, RID_PROTECTED,},
-      {"__wchar_t", TYPESPEC, RID_WCHAR  /* Unique to ANSI C++ */,},
-      {"", 0, 0}, {"", 0, 0},
-      {"unsigned", TYPESPEC, RID_UNSIGNED,},
-      {"continue", CONTINUE, NORID,},
-      {"break", BREAK, NORID,},
-      {"", 0, 0},
-      {"friend", SCSPEC, RID_FRIEND,},
-      {"and_eq", ASSIGN, NORID,},
-      {"typedef", SCSPEC, RID_TYPEDEF,},
+      {"long", TYPESPEC, RID_LONG,},
+      {"__imag", IMAGPART, NORID},
+      {"__asm", ASM_KEYWORD, NORID},
       {"", 0, 0},
-      {"do", DO, NORID,},
-      {"void", TYPESPEC, RID_VOID,},
+      {"__sigof__", SIGOF, NORID               /* Extension */,},
       {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
-      {"const", CV_QUALIFIER, RID_CONST,},
-      {"static", SCSPEC, RID_STATIC,},
+      {"struct", AGGR, RID_RECORD,},
       {"", 0, 0},
-      {"__typeof", TYPEOF, NORID},
+      {"volatile", CV_QUALIFIER, RID_VOLATILE,},
+      {"false", CXX_FALSE, NORID,},
+      {"sizeof", SIZEOF, NORID,},
+      {"__complex__", TYPESPEC, RID_COMPLEX},
       {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
-      {"goto", GOTO, NORID,},
+      {"for", FOR, NORID,},
+      {"or", OROR, NORID,},
+      {"register", SCSPEC, RID_REGISTER,},
+      {"throw", THROW, NORID,},
       {"", 0, 0},
-      {"asm", ASM_KEYWORD, NORID,},
-      {"operator", OPERATOR, NORID,},
-      {"__signature__", AGGR, RID_SIGNATURE    /* Extension */,},
+      {"using", USING, NORID,},
+      {"", 0, 0}, {"", 0, 0},
+      {"__complex", TYPESPEC, RID_COMPLEX},
       {"", 0, 0},
+      {"asm", ASM_KEYWORD, NORID,},
+      {"signature", AGGR, RID_SIGNATURE        /* Extension */,},
+      {"enum", ENUM, NORID,},
+      {"reinterpret_cast", REINTERPRET_CAST, NORID,},
       {"mutable", SCSPEC, RID_MUTABLE,},
-      {"", 0, 0}, {"", 0, 0},
-      {"sigof", SIGOF, NORID           /* Extension */,},
-      {"class", AGGR, RID_CLASS,},
-      {"compl", '~', NORID,},
-      {"public", VISSPEC, RID_PUBLIC,},
-      {"and", ANDAND, NORID,},
-      {"", 0, 0}, {"", 0, 0},
-      {"float", TYPESPEC, RID_FLOAT,},
+      {"__alignof", ALIGNOF, NORID},
+      {"return", RETURN, NORID,},
       {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
-      {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
-      {"default", DEFAULT, NORID,},
+      {"", 0, 0},
+      {"float", TYPESPEC, RID_FLOAT,},
       {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
-      {"", 0, 0}, {"", 0, 0},
+      {"bool", TYPESPEC, RID_BOOL,},
+      {"", 0, 0},
+      {"typedef", SCSPEC, RID_TYPEDEF,},
+      {"__typeof", TYPEOF, NORID},
       {"bitand", '&', NORID,},
+      {"break", BREAK, NORID,},
+      {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"union", AGGR, RID_UNION,},
       {"", 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},
-      {"catch", CATCH, NORID,},
+      {"goto", GOTO, NORID,},
+      {"sigof", SIGOF, NORID           /* Extension */,},
       {"", 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},
-      {"auto", SCSPEC, RID_AUTO,},
       {"", 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},
-      {"const_cast", CONST_CAST, NORID,},
+      {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0}, {"", 0, 0},
+      {"bitor", '|', NORID,},
+      {"auto", SCSPEC, RID_AUTO,},
       {"", 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, 0}, {"", 0, 0},
-      {"dynamic_cast", DYNAMIC_CAST, NORID,}
+      {"operator", OPERATOR, NORID,}
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
index 87c4a596f6413bdaeb5db870ee7615da54b8b2f9..82e616f76cdc69a4f55720c148d2d4cfee464c26 100644 (file)
@@ -1057,7 +1057,7 @@ expand_aggr_init (exp, init, flags)
       /* Must arrange to initialize each element of EXP
         from elements of INIT.  */
       tree itype = init ? TREE_TYPE (init) : NULL_TREE;
-      if (TYPE_READONLY (TREE_TYPE (type)) || TYPE_VOLATILE (TREE_TYPE (type)))
+      if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
        {
          TREE_TYPE (exp) = TYPE_MAIN_VARIANT (type);
          if (init)
@@ -1424,8 +1424,7 @@ build_member_call (type, name, parmlist)
       tree oldtype = TREE_TYPE (TREE_TYPE (olddecl));
       if (oldtype != type)
        {
-         tree newtype = build_type_variant (type, TYPE_READONLY (oldtype),
-                                            TYPE_VOLATILE (oldtype));
+         tree newtype = build_qualified_type (type, TYPE_QUALS (oldtype));
          decl = convert_force (build_pointer_type (newtype), olddecl, 0);
          decl = build_indirect_ref (decl, NULL_PTR);
        }
@@ -2143,7 +2142,7 @@ build_new_1 (exp)
     }
   true_type = type;
 
-  if (TYPE_READONLY (type) || TYPE_VOLATILE (type))
+  if (CP_TYPE_QUALS (type))
     type = TYPE_MAIN_VARIANT (type);
 
   /* If our base type is an array, then make sure we know how many elements
@@ -2345,11 +2344,11 @@ build_new_1 (exp)
             allow the expression to be non-const while we do the
             initialization.  */
          deref_type = TREE_TYPE (deref);
-         if (TYPE_READONLY (deref_type))
+         if (CP_TYPE_CONST_P (deref_type))
            TREE_TYPE (deref) 
-             = cp_build_type_variant (deref_type,
-                                      /*constp=*/0,
-                                      TYPE_VOLATILE (deref_type));
+             = cp_build_qualified_type (deref_type,
+                                        CP_TYPE_QUALS (deref_type) 
+                                        & ~TYPE_QUAL_CONST);
          TREE_READONLY (deref) = 0;
 
          if (TREE_CHAIN (init) != NULL_TREE)
@@ -2469,7 +2468,7 @@ build_new_1 (exp)
            }
        }
     }
-  else if (TYPE_READONLY (true_type))
+  else if (CP_TYPE_CONST_P (true_type))
     cp_error ("uninitialized const in `new' of `%#T'", true_type);
 
  done:
index 3f0ab4773355970e0e840026a4cd40db1d3338af..e08166331850a65f9b0a0d3dfb66942c3632daba 100644 (file)
@@ -702,6 +702,9 @@ init_parse (filename)
   ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
   SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_VOLATILE],
                          build_tree_list (NULL_TREE, ridpointers[(int) RID_VOLATILE]));
+  ridpointers[(int) RID_RESTRICT] = get_identifier ("__restrict");
+  SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_RESTRICT],
+                         build_tree_list (NULL_TREE, ridpointers[(int) RID_RESTRICT]));
   ridpointers[(int) RID_AUTO] = get_identifier ("auto");
   SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_AUTO],
                          build_tree_list (NULL_TREE, ridpointers[(int) RID_AUTO]));
@@ -1984,7 +1987,7 @@ cons_up_default_function (type, full_name, kind)
       break;
 
     case 3:
-      type = build_type_variant (type, 1, 0);
+      type = build_qualified_type (type, TYPE_QUAL_CONST);
       /* Fall through...  */
     case 4:
       /* According to ARM $12.8, the default copy ctor will be declared, but
@@ -2002,7 +2005,7 @@ cons_up_default_function (type, full_name, kind)
       declspecs = build_decl_list (NULL_TREE, type);
 
       if (kind == 5)
-       type = build_type_variant (type, 1, 0);
+       type = build_qualified_type (type, TYPE_QUAL_CONST);
 
       name = ansi_opname [(int) MODIFY_EXPR];
 
@@ -4934,6 +4937,25 @@ handle_cp_pragma (pname)
 
   return 0;
 }
+
+/* Return the type-qualifier corresponding to the identifier given by
+   RID.  */
+
+int
+cp_type_qual_from_rid (rid)
+     tree rid;
+{
+  if (rid == ridpointers[(int) RID_CONST])
+    return TYPE_QUAL_CONST;
+  else if (rid == ridpointers[(int) RID_VOLATILE])
+    return TYPE_QUAL_VOLATILE;
+  else if (rid == ridpointers[(int) RID_RESTRICT])
+    return TYPE_QUAL_RESTRICT;
+
+  my_friendly_abort (0);
+  return TYPE_UNQUALIFIED;
+}
+
 \f
 #ifdef HANDLE_GENERIC_PRAGMAS
 
index 98add36ff17c6593eef36d14c07a372336e692cf..ec08f39f69e3d724d8e15749cbdd18eb8ef382e0 100644 (file)
@@ -64,6 +64,7 @@ enum rid
   RID_AUTO,
   RID_MUTABLE,
   RID_COMPLEX,
+  RID_RESTRICT,
 
   /* This is where grokdeclarator ends its search when setting the
      specbits.  */
index 6d31ce4f268b26d4d3f55f3cc87f23cf927adcce..f738124117fe5f914c50729b639e4bc68e5fd769 100644 (file)
@@ -1163,7 +1163,10 @@ void
 process_modifiers (parmtype) 
      tree parmtype;
 {
-  if (TREE_READONLY (parmtype))
+  /* Note that here we do not use CP_TYPE_CONST_P and friends because
+     we describe types recursively; we will get the `const' in 
+     `const int ()[10]' when processing the `const int' part.  */
+  if (TYPE_READONLY (parmtype))
     OB_PUTC ('C');
   if (TREE_CODE (parmtype) == INTEGER_TYPE
       && (TYPE_MAIN_VARIANT (parmtype)
@@ -1172,6 +1175,10 @@ process_modifiers (parmtype)
     OB_PUTC ('U');
   if (TYPE_VOLATILE (parmtype))
     OB_PUTC ('V');
+  /* It would be better to use `R' for `restrict', but that's already
+     used for reference types.  And `r' is used for `long double'.  */
+  if (TYPE_RESTRICT (parmtype))
+    OB_PUTC ('u');
 }
 
 /* Check to see if TYPE has been entered into the Bcode typelist.  If
index f7bfb100ba1622aa3f9a26df98a29c556abe2d12..fb1d896578de497797a1f08b1b9a5f7d8c744845 100644 (file)
@@ -215,11 +215,11 @@ parse_decl(declarator, specs_attrs, attributes, initialized, decl)
 
 
 
-#define        YYFINAL         1624
+#define        YYFINAL         1625
 #define        YYFLAG          -32768
 #define        YYNTBASE        112
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 342 ? yytranslate[x] : 398)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 342 ? yytranslate[x] : 399)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -311,44 +311,44 @@ static const short yyprhs[] = {     0,
   1568,  1575,  1579,  1582,  1585,  1588,  1589,  1590,  1600,  1602,
   1603,  1605,  1606,  1608,  1610,  1613,  1616,  1619,  1622,  1625,
   1628,  1631,  1634,  1637,  1641,  1646,  1650,  1653,  1657,  1659,
-  1660,  1664,  1667,  1670,  1672,  1674,  1675,  1678,  1682,  1684,
-  1689,  1691,  1695,  1697,  1699,  1704,  1709,  1712,  1715,  1719,
-  1723,  1725,  1726,  1728,  1731,  1735,  1738,  1741,  1743,  1746,
-  1749,  1752,  1755,  1758,  1761,  1764,  1766,  1769,  1772,  1776,
-  1779,  1782,  1787,  1792,  1795,  1797,  1803,  1808,  1810,  1811,
-  1813,  1817,  1818,  1820,  1824,  1826,  1828,  1830,  1832,  1837,
-  1842,  1847,  1852,  1857,  1861,  1866,  1871,  1876,  1881,  1885,
-  1887,  1891,  1893,  1897,  1900,  1902,  1910,  1911,  1914,  1916,
-  1919,  1920,  1923,  1928,  1933,  1936,  1941,  1945,  1949,  1952,
-  1955,  1959,  1961,  1963,  1966,  1968,  1970,  1973,  1976,  1981,
-  1986,  1990,  1994,  1997,  1999,  2001,  2004,  2008,  2012,  2015,
-  2018,  2022,  2024,  2028,  2032,  2035,  2038,  2042,  2044,  2049,
-  2053,  2058,  2062,  2064,  2067,  2070,  2073,  2076,  2079,  2081,
-  2084,  2089,  2094,  2097,  2099,  2101,  2103,  2105,  2108,  2113,
-  2116,  2119,  2122,  2125,  2127,  2130,  2133,  2136,  2139,  2143,
-  2145,  2148,  2152,  2157,  2160,  2163,  2166,  2169,  2172,  2175,
-  2180,  2183,  2185,  2188,  2191,  2195,  2197,  2201,  2204,  2208,
-  2211,  2214,  2218,  2220,  2224,  2229,  2233,  2236,  2239,  2241,
-  2245,  2248,  2251,  2253,  2256,  2260,  2262,  2266,  2268,  2275,
-  2280,  2285,  2289,  2295,  2299,  2303,  2307,  2310,  2312,  2314,
-  2317,  2320,  2323,  2324,  2326,  2328,  2331,  2335,  2337,  2340,
-  2341,  2345,  2346,  2347,  2353,  2355,  2356,  2359,  2361,  2363,
-  2365,  2368,  2369,  2374,  2376,  2377,  2378,  2384,  2385,  2386,
-  2394,  2395,  2396,  2397,  2398,  2411,  2412,  2413,  2421,  2422,
-  2428,  2429,  2437,  2438,  2443,  2446,  2449,  2452,  2456,  2463,
-  2472,  2483,  2496,  2501,  2505,  2508,  2511,  2513,  2515,  2517,
-  2519,  2521,  2522,  2523,  2530,  2531,  2532,  2538,  2540,  2543,
-  2544,  2545,  2551,  2553,  2555,  2559,  2563,  2566,  2569,  2572,
-  2575,  2578,  2580,  2583,  2584,  2586,  2587,  2589,  2591,  2592,
-  2594,  2596,  2600,  2605,  2607,  2611,  2612,  2614,  2616,  2618,
-  2621,  2624,  2627,  2629,  2632,  2635,  2636,  2640,  2642,  2644,
-  2646,  2649,  2652,  2655,  2660,  2663,  2666,  2669,  2672,  2675,
-  2678,  2680,  2683,  2685,  2688,  2690,  2692,  2693,  2694,  2696,
-  2697,  2702,  2705,  2707,  2709,  2713,  2714,  2718,  2722,  2726,
-  2728,  2731,  2734,  2737,  2740,  2743,  2746,  2749,  2752,  2755,
-  2758,  2761,  2764,  2767,  2770,  2773,  2776,  2779,  2782,  2785,
-  2788,  2791,  2794,  2797,  2801,  2804,  2807,  2810,  2813,  2817,
-  2820,  2823,  2828,  2833,  2837
+  1660,  1664,  1665,  1669,  1672,  1674,  1676,  1677,  1680,  1684,
+  1686,  1691,  1693,  1697,  1699,  1701,  1706,  1711,  1714,  1717,
+  1721,  1725,  1727,  1728,  1730,  1733,  1737,  1740,  1743,  1745,
+  1748,  1751,  1754,  1757,  1760,  1763,  1766,  1768,  1771,  1774,
+  1778,  1781,  1784,  1789,  1794,  1797,  1799,  1805,  1810,  1812,
+  1813,  1815,  1819,  1820,  1822,  1826,  1828,  1830,  1832,  1834,
+  1839,  1844,  1849,  1854,  1859,  1863,  1868,  1873,  1878,  1883,
+  1887,  1889,  1893,  1895,  1899,  1902,  1904,  1912,  1913,  1916,
+  1918,  1921,  1922,  1925,  1930,  1935,  1938,  1943,  1947,  1951,
+  1954,  1957,  1961,  1963,  1965,  1968,  1970,  1972,  1975,  1978,
+  1983,  1988,  1992,  1996,  1999,  2001,  2003,  2006,  2010,  2014,
+  2017,  2020,  2024,  2026,  2030,  2034,  2037,  2040,  2044,  2046,
+  2051,  2055,  2060,  2064,  2066,  2069,  2072,  2075,  2078,  2081,
+  2083,  2086,  2091,  2096,  2099,  2101,  2103,  2105,  2107,  2110,
+  2115,  2118,  2121,  2124,  2127,  2129,  2132,  2135,  2138,  2141,
+  2145,  2147,  2150,  2154,  2159,  2162,  2165,  2168,  2171,  2174,
+  2177,  2182,  2185,  2187,  2190,  2193,  2197,  2199,  2203,  2206,
+  2210,  2213,  2216,  2220,  2222,  2226,  2231,  2235,  2238,  2241,
+  2243,  2247,  2250,  2253,  2255,  2258,  2262,  2264,  2268,  2270,
+  2277,  2282,  2287,  2291,  2297,  2301,  2305,  2309,  2312,  2314,
+  2316,  2319,  2322,  2325,  2326,  2328,  2330,  2333,  2337,  2339,
+  2342,  2343,  2347,  2348,  2349,  2355,  2357,  2358,  2361,  2363,
+  2365,  2367,  2370,  2371,  2376,  2378,  2379,  2380,  2386,  2387,
+  2388,  2396,  2397,  2398,  2399,  2400,  2413,  2414,  2415,  2423,
+  2424,  2430,  2431,  2439,  2440,  2445,  2448,  2451,  2454,  2458,
+  2465,  2474,  2485,  2498,  2503,  2507,  2510,  2513,  2515,  2517,
+  2519,  2521,  2523,  2524,  2525,  2532,  2533,  2534,  2540,  2542,
+  2545,  2546,  2547,  2553,  2555,  2557,  2561,  2565,  2568,  2571,
+  2574,  2577,  2580,  2582,  2585,  2586,  2588,  2589,  2591,  2593,
+  2594,  2596,  2598,  2602,  2607,  2609,  2613,  2614,  2616,  2618,
+  2620,  2623,  2626,  2629,  2631,  2634,  2637,  2638,  2642,  2644,
+  2646,  2648,  2651,  2654,  2657,  2662,  2665,  2668,  2671,  2674,
+  2677,  2680,  2682,  2685,  2687,  2690,  2692,  2694,  2695,  2696,
+  2698,  2699,  2704,  2707,  2709,  2711,  2715,  2716,  2720,  2724,
+  2728,  2730,  2733,  2736,  2739,  2742,  2745,  2748,  2751,  2754,
+  2757,  2760,  2763,  2766,  2769,  2772,  2775,  2778,  2781,  2784,
+  2787,  2790,  2793,  2796,  2799,  2803,  2806,  2809,  2812,  2815,
+  2819,  2822,  2825,  2830,  2835,  2839
 };
 
 static const short yyrhs[] = {    -1,
@@ -360,16 +360,16 @@ static const short yyrhs[] = {    -1,
      0,     0,    44,   163,    58,   123,   115,   109,     0,     0,
     44,    58,   124,   115,   109,     0,   125,     0,   127,    60,
      0,   129,     0,   118,   122,     0,     0,    44,   163,    64,
-   126,   132,    60,     0,    46,   312,     0,    46,   326,   312,
-     0,    46,   326,   208,     0,    46,   131,   163,     0,    46,
-   326,   163,     0,    46,   326,   131,   163,     0,     0,    46,
+   126,   132,    60,     0,    46,   313,     0,    46,   327,   313,
+     0,    46,   327,   208,     0,    46,   131,   163,     0,    46,
+   327,   163,     0,    46,   327,   131,   163,     0,     0,    46,
     44,   130,   132,    60,     0,    57,    54,     0,   131,    57,
-    54,     0,   208,     0,   312,     0,   326,   312,     0,   326,
+    54,     0,   208,     0,   313,     0,   327,   313,     0,   327,
    208,     0,    98,     0,   133,    98,     0,     0,    48,    74,
    135,   136,    75,     0,    48,    74,    75,     0,   140,     0,
    136,    59,   140,     0,   163,     0,     0,   267,   137,     0,
     45,   137,     0,   134,   267,   137,     0,   138,     0,   138,
-    64,   224,     0,   389,     0,   389,    64,   203,     0,   139,
+    64,   224,     0,   390,     0,   390,    64,   203,     0,   139,
      0,   139,    64,   183,     0,   134,   142,     0,   134,     1,
      0,   148,   147,     0,   143,     0,   141,     0,   133,   116,
    148,   117,   147,     0,   133,   116,   143,   117,     0,   118,
@@ -379,33 +379,33 @@ static const short yyrhs[] = {    -1,
    166,    60,     0,   225,    60,     0,     1,    60,     0,     1,
    109,     0,    60,     0,   219,     0,   159,     0,     0,   158,
      0,   158,    60,     0,     0,   107,     0,   154,   146,   145,
-   336,     0,   154,   146,   360,     0,   154,   146,     1,     0,
-     0,   317,     5,    93,   150,   380,   108,   298,   392,     0,
-   317,     5,    47,   298,   392,     0,     0,   326,   317,     5,
-    93,   151,   380,   108,   298,   392,     0,   326,   317,     5,
-    47,   298,   392,     0,     0,   317,   178,    93,   152,   380,
-   108,   298,   392,     0,   317,   178,    47,   298,   392,     0,
-     0,   326,   317,   178,    93,   153,   380,   108,   298,   392,
-     0,   326,   317,   178,    47,   298,   392,     0,   225,   222,
-     0,   228,   309,     0,   309,     0,   228,   149,     0,   149,
-     0,     5,    93,   380,   108,   298,   392,     0,     5,    47,
-   298,   392,     0,   178,    93,   380,   108,   298,   392,     0,
-   178,    47,   298,   392,     0,   228,   155,     0,   155,     0,
-   225,   222,     0,   228,   309,     0,   309,     0,   228,   149,
+   337,     0,   154,   146,   361,     0,   154,   146,     1,     0,
+     0,   318,     5,    93,   150,   381,   108,   299,   393,     0,
+   318,     5,    47,   299,   393,     0,     0,   327,   318,     5,
+    93,   151,   381,   108,   299,   393,     0,   327,   318,     5,
+    47,   299,   393,     0,     0,   318,   178,    93,   152,   381,
+   108,   299,   393,     0,   318,   178,    47,   299,   393,     0,
+     0,   327,   318,   178,    93,   153,   381,   108,   299,   393,
+     0,   327,   318,   178,    47,   299,   393,     0,   225,   222,
+     0,   228,   310,     0,   310,     0,   228,   149,     0,   149,
+     0,     5,    93,   381,   108,   299,   393,     0,     5,    47,
+   299,   393,     0,   178,    93,   381,   108,   299,   393,     0,
+   178,    47,   299,   393,     0,   228,   155,     0,   155,     0,
+   225,   222,     0,   228,   310,     0,   310,     0,   228,   149,
      0,   149,     0,    25,     3,     0,   157,   252,     0,   157,
     93,   195,   108,     0,   157,    47,     0,    62,   160,   161,
      0,     0,     0,   162,     0,   161,    59,   162,     0,   161,
      1,     0,    93,   195,   108,     0,    47,     0,   164,    93,
-   195,   108,     0,   164,    47,     0,   304,    93,   195,   108,
-     0,   304,    47,     0,   319,    93,   195,   108,     0,   319,
+   195,   108,     0,   164,    47,     0,   305,    93,   195,   108,
+     0,   305,    47,     0,   320,    93,   195,   108,     0,   320,
     47,     0,     3,     0,     4,     0,     5,     0,    56,     0,
     57,     0,     3,     0,    56,     0,    57,     0,   104,     0,
    103,     0,   105,     0,     0,    48,   175,   231,    60,   167,
    176,     0,     0,    48,   175,   225,   222,   168,   176,     0,
-     0,    48,   175,   309,   169,   176,     0,     0,    48,   175,
+     0,    48,   175,   310,   169,   176,     0,     0,    48,   175,
    149,   170,   176,     0,     0,     7,    48,   175,   231,    60,
    171,   176,     0,     0,     7,    48,   175,   225,   222,   172,
-   176,     0,     0,     7,    48,   175,   309,   173,   176,     0,
+   176,     0,     0,     7,    48,   175,   310,   173,   176,     0,
      0,     7,    48,   175,   149,   174,   176,     0,     0,     0,
     56,    74,   181,   180,   179,     0,     4,    74,   181,   180,
    179,     0,   178,     0,     5,    74,   181,   180,   179,     0,
@@ -414,17 +414,17 @@ static const short yyrhs[] = {    -1,
     79,     0,    78,     0,    86,     0,    87,     0,   110,     0,
    194,     0,   203,     0,    47,     0,    93,   185,   108,     0,
     47,     0,    93,   189,   108,     0,     0,   189,     0,     1,
-     0,     0,   370,   222,   236,   245,    64,   190,   253,     0,
-   185,     0,   109,     0,   333,   331,   109,     0,   333,   331,
-     1,   109,     0,   333,     1,   109,     0,     0,    58,   193,
-   191,     0,   345,     0,   203,    59,   203,     0,   203,    59,
+     0,     0,   371,   222,   236,   245,    64,   190,   253,     0,
+   185,     0,   109,     0,   334,   332,   109,     0,   334,   332,
+     1,   109,     0,   334,     1,   109,     0,     0,    58,   193,
+   191,     0,   346,     0,   203,    59,   203,     0,   203,    59,
      1,     0,   194,    59,   203,     0,   194,    59,     1,     0,
    203,     0,   194,     0,   213,     0,   118,   202,     0,    80,
    202,     0,    70,   202,     0,    88,   202,     0,   184,   202,
      0,    67,   163,     0,    13,   196,     0,    13,    93,   224,
    108,     0,    29,   196,     0,    29,    93,   224,   108,     0,
-   215,   297,     0,   215,   297,   200,     0,   215,   199,   297,
-     0,   215,   199,   297,   200,     0,   215,    93,   198,   224,
+   215,   298,     0,   215,   298,   200,     0,   215,   199,   298,
+     0,   215,   199,   298,   200,     0,   215,    93,   198,   224,
    197,     0,   215,    93,   198,   224,   197,   200,     0,   215,
    199,    93,   198,   224,   197,     0,   215,   199,    93,   198,
    224,   197,   200,     0,   216,   202,     0,   216,    94,   111,
@@ -442,58 +442,58 @@ static const short yyrhs[] = {    -1,
    203,    72,   203,     0,   203,    71,   203,     0,   203,    70,
    203,     0,   203,    68,   203,     0,   203,    69,   203,     0,
    203,    67,   203,     0,   203,    66,   203,     0,   203,    65,
-   375,    62,   203,     0,   203,    64,   203,     0,   203,    63,
-   203,     0,    61,     0,    61,   203,     0,    88,   390,   163,
-     0,    88,   390,   177,     0,   206,     0,   397,     0,     3,
+   376,    62,   203,     0,   203,    64,   203,     0,   203,    63,
+   203,     0,    61,     0,    61,   203,     0,    88,   391,   163,
+     0,    88,   391,   177,     0,   206,     0,   398,     0,     3,
      0,    56,     0,    57,     0,     0,     6,    74,   205,   181,
-   180,     0,   397,    74,   205,   181,   180,     0,    48,   163,
+   180,     0,   398,    74,   205,   181,   180,     0,    48,   163,
     74,   181,   180,     0,    48,     6,    74,   181,   180,     0,
-    48,   397,    74,   181,   180,     0,   204,     0,     4,     0,
+    48,   398,    74,   181,   180,     0,   204,     0,     4,     0,
      5,     0,   210,     0,   246,   210,     0,   204,     0,    80,
    209,     0,    70,   209,     0,    93,   209,   108,     0,     3,
-    74,   181,   180,     0,    57,    74,   182,   180,     0,   311,
+    74,   181,   180,     0,    57,    74,   182,   180,     0,   312,
      0,   204,     0,   211,     0,    93,   209,   108,     0,   204,
      0,    10,     0,   217,     0,   218,     0,    93,   185,   108,
      0,    93,   209,   108,     0,    93,     1,   108,     0,     0,
-    93,   214,   337,   108,     0,   204,    93,   195,   108,     0,
+    93,   214,   338,   108,     0,   204,    93,   195,   108,     0,
    204,    47,     0,   213,    93,   195,   108,     0,   213,    47,
      0,   213,    94,   185,   111,     0,   213,    86,     0,   213,
-    87,     0,    40,     0,     9,    93,   195,   108,     0,   315,
+    87,     0,    40,     0,     9,    93,   195,   108,     0,   316,
      0,    50,    74,   224,    75,    93,   185,   108,     0,    51,
     74,   224,    75,    93,   185,   108,     0,    52,    74,   224,
     75,    93,   185,   108,     0,    53,    74,   224,    75,    93,
    185,   108,     0,    49,    93,   185,   108,     0,    49,    93,
-   224,   108,     0,   326,     3,     0,   326,   206,     0,   326,
-   397,     0,   314,     0,   314,    93,   195,   108,     0,   314,
+   224,   108,     0,   327,     3,     0,   327,   206,     0,   327,
+   398,     0,   315,     0,   315,    93,   195,   108,     0,   315,
     47,     0,   220,   207,     0,   220,   207,    93,   195,   108,
-     0,   220,   207,    47,     0,   220,   208,     0,   220,   314,
+     0,   220,   207,    47,     0,   220,   208,     0,   220,   315,
      0,   220,   208,    93,   195,   108,     0,   220,   208,    47,
-     0,   220,   314,    93,   195,   108,     0,   220,   314,    47,
+     0,   220,   315,    93,   195,   108,     0,   220,   315,    47,
      0,   220,    88,     8,    47,     0,   220,     8,    54,    88,
-     8,    47,     0,   220,     1,     0,    39,     0,   326,    39,
-     0,    38,     0,   326,   216,     0,    42,     0,    43,     0,
+     8,    47,     0,   220,     1,     0,    39,     0,   327,    39,
+     0,    38,     0,   327,   216,     0,    42,     0,    43,     0,
     11,     0,   218,    11,     0,     0,   213,    92,     0,   213,
     91,     0,   231,   233,    60,     0,   225,   233,    60,     0,
    228,   234,    60,     0,   225,    60,     0,   228,    60,     0,
-   118,   221,     0,   303,     0,   309,     0,    47,     0,   223,
-    47,     0,   229,   329,     0,   299,   329,     0,   231,   329,
-     0,   229,     0,   299,     0,   229,     0,   226,     0,   228,
+   118,   221,     0,   304,     0,   310,     0,    47,     0,   223,
+    47,     0,   229,   330,     0,   300,   330,     0,   231,   330,
+     0,   229,     0,   300,     0,   229,     0,   226,     0,   228,
    231,     0,   231,   227,     0,   231,   230,   227,     0,   228,
    231,   227,     0,   228,   231,   230,     0,   228,   231,   230,
    227,     0,     7,     0,   227,   232,     0,   227,     7,     0,
-   227,   246,     0,   246,     0,   299,     0,     7,     0,   228,
+   227,   246,     0,   246,     0,   300,     0,     7,     0,   228,
      9,     0,   228,     7,     0,   228,   246,     0,   246,     0,
-   231,     0,   299,   231,     0,   231,   230,     0,   299,   231,
+   231,     0,   300,   231,     0,   231,   230,     0,   300,   231,
    230,     0,   232,     0,   230,   232,     0,   260,     0,     8,
-     0,   305,     0,    28,    93,   185,   108,     0,    28,    93,
+     0,   306,     0,    28,    93,   185,   108,     0,    28,    93,
    224,   108,     0,    30,    93,   185,   108,     0,    30,    93,
    224,   108,     0,     8,     0,     9,     0,   260,     0,   241,
      0,   233,    59,   237,     0,   242,     0,   234,    59,   237,
      0,   243,     0,   235,    59,   237,     0,     0,   119,    93,
    218,   108,     0,     0,   222,   236,   245,    64,   238,   253,
      0,   222,   236,   245,     0,     0,   245,    64,   240,   253,
-     0,   245,     0,   222,   236,   239,     0,   309,   236,   239,
-     0,     0,   309,   236,   244,   239,     0,   149,   236,   245,
+     0,   245,     0,   222,   236,   239,     0,   310,   236,   239,
+     0,     0,   310,   236,   244,   239,     0,   149,   236,   245,
      0,     0,   246,     0,   247,     0,   246,   247,     0,    31,
     93,    93,   248,   108,   108,     0,   249,     0,   248,    59,
    249,     0,     0,   250,     0,   250,    93,     3,   108,     0,
@@ -504,138 +504,139 @@ static const short yyrhs[] = {    -1,
    254,    59,   109,     0,     1,     0,   253,     0,   254,    59,
    253,     0,    94,   203,   111,   253,     0,   163,    62,   253,
      0,   254,    59,   163,    62,   253,     0,    97,     0,   255,
-   146,   145,   336,     0,   255,   146,   360,     0,   255,   146,
+   146,   145,   337,     0,   255,   146,   361,     0,   255,   146,
      1,     0,     0,   257,   256,   147,     0,   102,   203,   107,
      0,   102,     1,   107,     0,     0,   259,   258,     0,   259,
-     1,     0,     0,    14,   163,    58,   261,   295,   266,   109,
+     1,     0,     0,    14,   163,    58,   261,   296,   266,   109,
      0,    14,   163,    58,   109,     0,     0,    14,    58,   262,
-   295,   266,   109,     0,    14,    58,   109,     0,    14,   163,
-     0,    14,   324,     0,    45,   319,     0,     0,     0,   274,
-   280,   282,   109,   245,   263,   259,   264,   257,     0,   274,
+   296,   266,   109,     0,    14,    58,   109,     0,    14,   163,
+     0,    14,   325,     0,    45,   320,     0,     0,     0,   275,
+   281,   283,   109,   245,   263,   259,   264,   257,     0,   275,
      0,     0,    59,     0,     0,    59,     0,    36,     0,   267,
      7,     0,   267,     8,     0,   267,     9,     0,   267,    36,
      0,   267,   246,     0,   267,   163,     0,   267,   165,     0,
-   268,    58,     0,   268,    62,     0,   267,   317,   163,     0,
-   267,   326,   317,   163,     0,   267,   326,   163,     0,   267,
-   177,     0,   267,   317,   177,     0,   268,     0,     0,   269,
-   272,   275,     0,   270,   275,     0,   267,    58,     0,   273,
-     0,   271,     0,     0,    62,   390,     0,    62,   390,   276,
-     0,   277,     0,   276,    59,   390,   277,     0,   278,     0,
-   279,   390,   278,     0,   319,     0,   304,     0,    30,    93,
-   185,   108,     0,    30,    93,   224,   108,     0,    37,   390,
-     0,     7,   390,     0,   279,    37,   390,     0,   279,     7,
-   390,     0,    58,     0,     0,   281,     0,   281,   284,     0,
-   282,   283,   284,     0,   282,   283,     0,    37,    62,     0,
-   285,     0,   284,   285,     0,   286,    60,     0,   286,   109,
-     0,   156,    62,     0,   156,    95,     0,   156,    25,     0,
-   156,    58,     0,    60,     0,   118,   285,     0,   134,   285,
-     0,   134,   225,    60,     0,   225,   287,     0,   228,   288,
-     0,   309,   236,   245,   252,     0,   149,   236,   245,   252,
-     0,    62,   203,     0,     1,     0,   228,   155,   236,   245,
-   252,     0,   155,   236,   245,   252,     0,   127,     0,     0,
-   289,     0,   287,    59,   290,     0,     0,   292,     0,   288,
-    59,   294,     0,   291,     0,   292,     0,   293,     0,   294,
-     0,   303,   236,   245,   252,     0,     4,    62,   203,   245,
-     0,   309,   236,   245,   252,     0,   149,   236,   245,   252,
-     0,     3,    62,   203,   245,     0,    62,   203,   245,     0,
-   303,   236,   245,   252,     0,     4,    62,   203,   245,     0,
-   309,   236,   245,   252,     0,     3,    62,   203,   245,     0,
-    62,   203,   245,     0,   296,     0,   295,    59,   296,     0,
-   163,     0,   163,    64,   203,     0,   370,   327,     0,   370,
-     0,    93,   198,   224,   197,    94,   185,   111,     0,     0,
-   298,     9,     0,     9,     0,   299,     9,     0,     0,   300,
-   185,     0,   300,    93,   195,   108,     0,   300,    93,   380,
-   108,     0,   300,    47,     0,   300,    93,     1,   108,     0,
-    80,   299,   303,     0,    70,   299,   303,     0,    80,   303,
-     0,    70,   303,     0,   325,   298,   303,     0,   307,     0,
-   316,     0,   326,   316,     0,   304,     0,   306,     0,   326,
-   306,     0,   317,   316,     0,   307,   302,   298,   392,     0,
-   307,    94,   301,   111,     0,   307,    94,   111,     0,    93,
-   303,   108,     0,   317,   316,     0,   316,     0,   309,     0,
-   246,   309,     0,    80,   299,   308,     0,    70,   299,   308,
-     0,    80,   308,     0,    70,   308,     0,   325,   298,   308,
-     0,   212,     0,    80,   299,   308,     0,    70,   299,   308,
-     0,    80,   310,     0,    70,   310,     0,   325,   298,   308,
-     0,   311,     0,   212,   302,   298,   392,     0,    93,   310,
-   108,     0,   212,    94,   301,   111,     0,   212,    94,   111,
-     0,   313,     0,   317,   211,     0,   317,   208,     0,   317,
-   207,     0,   317,   204,     0,   317,   207,     0,   313,     0,
-   326,   313,     0,   231,    93,   195,   108,     0,   231,    93,
-   209,   108,     0,   231,   223,     0,     4,     0,     5,     0,
-   177,     0,   318,     0,   317,   318,     0,   317,    48,   323,
-    54,     0,     4,    54,     0,     5,    54,     0,    57,    54,
-     0,   177,    54,     0,   320,     0,   326,   320,     0,   321,
-   163,     0,   321,   177,     0,   321,   323,     0,   321,    48,
-   323,     0,   322,     0,   321,   322,     0,   321,   323,    54,
-     0,   321,    48,   323,    54,     0,     4,    54,     0,     5,
-    54,     0,   177,    54,     0,    56,    54,     0,     3,    54,
-     0,    57,    54,     0,   163,    74,   181,   180,     0,   326,
-   316,     0,   306,     0,   326,   306,     0,   317,    80,     0,
-   326,   317,    80,     0,    54,     0,    80,   298,   327,     0,
-    80,   298,     0,    70,   298,   327,     0,    70,   298,     0,
-   325,   298,     0,   325,   298,   327,     0,   328,     0,    94,
-   185,   111,     0,   328,    94,   301,   111,     0,    80,   299,
-   329,     0,    80,   329,     0,    80,   299,     0,    80,     0,
-    70,   299,   329,     0,    70,   329,     0,    70,   299,     0,
-    70,     0,   325,   298,     0,   325,   298,   329,     0,   330,
-     0,    93,   329,   108,     0,    90,     0,   330,    93,   380,
-   108,   298,   392,     0,   330,    47,   298,   392,     0,   330,
-    94,   301,   111,     0,   330,    94,   111,     0,    93,   381,
-   108,   298,   392,     0,   201,   298,   392,     0,   223,   298,
-   392,     0,    94,   301,   111,     0,    94,   111,     0,   344,
-     0,   332,     0,   331,   344,     0,   331,   332,     0,     1,
-    60,     0,     0,   334,     0,   335,     0,   334,   335,     0,
-    33,   251,    60,     0,   337,     0,     1,   337,     0,     0,
-    58,   338,   191,     0,     0,     0,    15,   340,   187,   341,
-   342,     0,   337,     0,     0,   343,   345,     0,   337,     0,
-   345,     0,   221,     0,   185,    60,     0,     0,   339,    16,
-   346,   342,     0,   339,     0,     0,     0,    17,   347,   187,
-   348,   192,     0,     0,     0,    18,   349,   342,    17,   350,
-   186,    60,     0,     0,     0,     0,     0,    19,   351,    93,
-   373,   352,   188,    60,   353,   375,   108,   354,   192,     0,
-     0,     0,    20,   355,    93,   189,   108,   356,   342,     0,
-     0,    21,   203,    62,   357,   344,     0,     0,    21,   203,
-    12,   203,    62,   358,   344,     0,     0,    22,    62,   359,
-   344,     0,    23,    60,     0,    24,    60,     0,    25,    60,
-     0,    25,   185,    60,     0,   119,   374,    93,   218,   108,
-    60,     0,   119,   374,    93,   218,    62,   376,   108,    60,
-     0,   119,   374,    93,   218,    62,   376,    62,   376,   108,
-    60,     0,   119,   374,    93,   218,    62,   376,    62,   376,
-    62,   379,   108,    60,     0,    26,    80,   185,    60,     0,
-    26,   163,    60,     0,   372,   344,     0,   372,   109,     0,
-    60,     0,   363,     0,   129,     0,   128,     0,   125,     0,
-     0,     0,    95,   361,   145,   337,   362,   366,     0,     0,
-     0,    95,   364,   337,   365,   366,     0,   367,     0,   366,
-   367,     0,     0,     0,    96,   368,   371,   369,   337,     0,
-   229,     0,   299,     0,    93,    12,   108,     0,    93,   389,
-   108,     0,     3,    62,     0,    56,    62,     0,     4,    62,
-     0,     5,    62,     0,   375,    60,     0,   221,     0,    58,
-   191,     0,     0,     9,     0,     0,   185,     0,     1,     0,
-     0,   377,     0,   378,     0,   377,    59,   378,     0,    11,
-    93,   185,   108,     0,    11,     0,   379,    59,    11,     0,
-     0,   381,     0,   224,     0,   385,     0,   386,    12,     0,
-   385,    12,     0,   224,    12,     0,    12,     0,   385,    62,
-     0,   224,    62,     0,     0,    64,   383,   384,     0,   101,
-     0,   253,     0,   387,     0,   389,   382,     0,   386,   388,
-     0,   386,   391,     0,   386,   391,    64,   253,     0,   385,
-    59,     0,   224,    59,     0,   226,   222,     0,   229,   222,
-     0,   231,   222,     0,   226,   329,     0,   226,     0,   228,
-   309,     0,   389,     0,   389,   382,     0,   387,     0,   224,
-     0,     0,     0,   309,     0,     0,    61,    93,   394,   108,
-     0,    61,    47,     0,   224,     0,   393,     0,   394,    59,
-   393,     0,     0,    80,   298,   395,     0,    70,   298,   395,
-     0,   325,   298,   395,     0,    41,     0,   396,    80,     0,
-   396,    81,     0,   396,    82,     0,   396,    78,     0,   396,
-    79,     0,   396,    70,     0,   396,    68,     0,   396,    69,
-     0,   396,    88,     0,   396,    59,     0,   396,    73,     0,
-   396,    74,     0,   396,    75,     0,   396,    72,     0,   396,
-    63,     0,   396,    64,     0,   396,    76,     0,   396,    77,
-     0,   396,    86,     0,   396,    87,     0,   396,    67,     0,
-   396,    66,     0,   396,   110,     0,   396,    65,    62,     0,
-   396,    71,     0,   396,    91,     0,   396,    83,     0,   396,
-    47,     0,   396,    94,   111,     0,   396,    39,     0,   396,
-    38,     0,   396,    39,    94,   111,     0,   396,    38,    94,
-   111,     0,   396,   370,   395,     0,   396,     1,     0
+   268,    58,     0,   268,    62,     0,   267,   318,   163,     0,
+   267,   327,   318,   163,     0,   267,   327,   163,     0,   267,
+   177,     0,   267,   318,   177,     0,   268,     0,     0,   269,
+   272,   276,     0,     0,   270,   273,   276,     0,   267,    58,
+     0,   274,     0,   271,     0,     0,    62,   391,     0,    62,
+   391,   277,     0,   278,     0,   277,    59,   391,   278,     0,
+   279,     0,   280,   391,   279,     0,   320,     0,   305,     0,
+    30,    93,   185,   108,     0,    30,    93,   224,   108,     0,
+    37,   391,     0,     7,   391,     0,   280,    37,   391,     0,
+   280,     7,   391,     0,    58,     0,     0,   282,     0,   282,
+   285,     0,   283,   284,   285,     0,   283,   284,     0,    37,
+    62,     0,   286,     0,   285,   286,     0,   287,    60,     0,
+   287,   109,     0,   156,    62,     0,   156,    95,     0,   156,
+    25,     0,   156,    58,     0,    60,     0,   118,   286,     0,
+   134,   286,     0,   134,   225,    60,     0,   225,   288,     0,
+   228,   289,     0,   310,   236,   245,   252,     0,   149,   236,
+   245,   252,     0,    62,   203,     0,     1,     0,   228,   155,
+   236,   245,   252,     0,   155,   236,   245,   252,     0,   127,
+     0,     0,   290,     0,   288,    59,   291,     0,     0,   293,
+     0,   289,    59,   295,     0,   292,     0,   293,     0,   294,
+     0,   295,     0,   304,   236,   245,   252,     0,     4,    62,
+   203,   245,     0,   310,   236,   245,   252,     0,   149,   236,
+   245,   252,     0,     3,    62,   203,   245,     0,    62,   203,
+   245,     0,   304,   236,   245,   252,     0,     4,    62,   203,
+   245,     0,   310,   236,   245,   252,     0,     3,    62,   203,
+   245,     0,    62,   203,   245,     0,   297,     0,   296,    59,
+   297,     0,   163,     0,   163,    64,   203,     0,   371,   328,
+     0,   371,     0,    93,   198,   224,   197,    94,   185,   111,
+     0,     0,   299,     9,     0,     9,     0,   300,     9,     0,
+     0,   301,   185,     0,   301,    93,   195,   108,     0,   301,
+    93,   381,   108,     0,   301,    47,     0,   301,    93,     1,
+   108,     0,    80,   300,   304,     0,    70,   300,   304,     0,
+    80,   304,     0,    70,   304,     0,   326,   299,   304,     0,
+   308,     0,   317,     0,   327,   317,     0,   305,     0,   307,
+     0,   327,   307,     0,   318,   317,     0,   308,   303,   299,
+   393,     0,   308,    94,   302,   111,     0,   308,    94,   111,
+     0,    93,   304,   108,     0,   318,   317,     0,   317,     0,
+   310,     0,   246,   310,     0,    80,   300,   309,     0,    70,
+   300,   309,     0,    80,   309,     0,    70,   309,     0,   326,
+   299,   309,     0,   212,     0,    80,   300,   309,     0,    70,
+   300,   309,     0,    80,   311,     0,    70,   311,     0,   326,
+   299,   309,     0,   312,     0,   212,   303,   299,   393,     0,
+    93,   311,   108,     0,   212,    94,   302,   111,     0,   212,
+    94,   111,     0,   314,     0,   318,   211,     0,   318,   208,
+     0,   318,   207,     0,   318,   204,     0,   318,   207,     0,
+   314,     0,   327,   314,     0,   231,    93,   195,   108,     0,
+   231,    93,   209,   108,     0,   231,   223,     0,     4,     0,
+     5,     0,   177,     0,   319,     0,   318,   319,     0,   318,
+    48,   324,    54,     0,     4,    54,     0,     5,    54,     0,
+    57,    54,     0,   177,    54,     0,   321,     0,   327,   321,
+     0,   322,   163,     0,   322,   177,     0,   322,   324,     0,
+   322,    48,   324,     0,   323,     0,   322,   323,     0,   322,
+   324,    54,     0,   322,    48,   324,    54,     0,     4,    54,
+     0,     5,    54,     0,   177,    54,     0,    56,    54,     0,
+     3,    54,     0,    57,    54,     0,   163,    74,   181,   180,
+     0,   327,   317,     0,   307,     0,   327,   307,     0,   318,
+    80,     0,   327,   318,    80,     0,    54,     0,    80,   299,
+   328,     0,    80,   299,     0,    70,   299,   328,     0,    70,
+   299,     0,   326,   299,     0,   326,   299,   328,     0,   329,
+     0,    94,   185,   111,     0,   329,    94,   302,   111,     0,
+    80,   300,   330,     0,    80,   330,     0,    80,   300,     0,
+    80,     0,    70,   300,   330,     0,    70,   330,     0,    70,
+   300,     0,    70,     0,   326,   299,     0,   326,   299,   330,
+     0,   331,     0,    93,   330,   108,     0,    90,     0,   331,
+    93,   381,   108,   299,   393,     0,   331,    47,   299,   393,
+     0,   331,    94,   302,   111,     0,   331,    94,   111,     0,
+    93,   382,   108,   299,   393,     0,   201,   299,   393,     0,
+   223,   299,   393,     0,    94,   302,   111,     0,    94,   111,
+     0,   345,     0,   333,     0,   332,   345,     0,   332,   333,
+     0,     1,    60,     0,     0,   335,     0,   336,     0,   335,
+   336,     0,    33,   251,    60,     0,   338,     0,     1,   338,
+     0,     0,    58,   339,   191,     0,     0,     0,    15,   341,
+   187,   342,   343,     0,   338,     0,     0,   344,   346,     0,
+   338,     0,   346,     0,   221,     0,   185,    60,     0,     0,
+   340,    16,   347,   343,     0,   340,     0,     0,     0,    17,
+   348,   187,   349,   192,     0,     0,     0,    18,   350,   343,
+    17,   351,   186,    60,     0,     0,     0,     0,     0,    19,
+   352,    93,   374,   353,   188,    60,   354,   376,   108,   355,
+   192,     0,     0,     0,    20,   356,    93,   189,   108,   357,
+   343,     0,     0,    21,   203,    62,   358,   345,     0,     0,
+    21,   203,    12,   203,    62,   359,   345,     0,     0,    22,
+    62,   360,   345,     0,    23,    60,     0,    24,    60,     0,
+    25,    60,     0,    25,   185,    60,     0,   119,   375,    93,
+   218,   108,    60,     0,   119,   375,    93,   218,    62,   377,
+   108,    60,     0,   119,   375,    93,   218,    62,   377,    62,
+   377,   108,    60,     0,   119,   375,    93,   218,    62,   377,
+    62,   377,    62,   380,   108,    60,     0,    26,    80,   185,
+    60,     0,    26,   163,    60,     0,   373,   345,     0,   373,
+   109,     0,    60,     0,   364,     0,   129,     0,   128,     0,
+   125,     0,     0,     0,    95,   362,   145,   338,   363,   367,
+     0,     0,     0,    95,   365,   338,   366,   367,     0,   368,
+     0,   367,   368,     0,     0,     0,    96,   369,   372,   370,
+   338,     0,   229,     0,   300,     0,    93,    12,   108,     0,
+    93,   390,   108,     0,     3,    62,     0,    56,    62,     0,
+     4,    62,     0,     5,    62,     0,   376,    60,     0,   221,
+     0,    58,   191,     0,     0,     9,     0,     0,   185,     0,
+     1,     0,     0,   378,     0,   379,     0,   378,    59,   379,
+     0,    11,    93,   185,   108,     0,    11,     0,   380,    59,
+    11,     0,     0,   382,     0,   224,     0,   386,     0,   387,
+    12,     0,   386,    12,     0,   224,    12,     0,    12,     0,
+   386,    62,     0,   224,    62,     0,     0,    64,   384,   385,
+     0,   101,     0,   253,     0,   388,     0,   390,   383,     0,
+   387,   389,     0,   387,   392,     0,   387,   392,    64,   253,
+     0,   386,    59,     0,   224,    59,     0,   226,   222,     0,
+   229,   222,     0,   231,   222,     0,   226,   330,     0,   226,
+     0,   228,   310,     0,   390,     0,   390,   383,     0,   388,
+     0,   224,     0,     0,     0,   310,     0,     0,    61,    93,
+   395,   108,     0,    61,    47,     0,   224,     0,   394,     0,
+   395,    59,   394,     0,     0,    80,   299,   396,     0,    70,
+   299,   396,     0,   326,   299,   396,     0,    41,     0,   397,
+    80,     0,   397,    81,     0,   397,    82,     0,   397,    78,
+     0,   397,    79,     0,   397,    70,     0,   397,    68,     0,
+   397,    69,     0,   397,    88,     0,   397,    59,     0,   397,
+    73,     0,   397,    74,     0,   397,    75,     0,   397,    72,
+     0,   397,    63,     0,   397,    64,     0,   397,    76,     0,
+   397,    77,     0,   397,    86,     0,   397,    87,     0,   397,
+    67,     0,   397,    66,     0,   397,   110,     0,   397,    65,
+    62,     0,   397,    71,     0,   397,    91,     0,   397,    83,
+     0,   397,    47,     0,   397,    94,   111,     0,   397,    39,
+     0,   397,    38,     0,   397,    39,    94,   111,     0,   397,
+    38,    94,   111,     0,   397,   371,   396,     0,   397,     1,
+     0
 };
 
 #endif
@@ -674,62 +675,62 @@ static const short yyrline[] = { 0,
   1333,  1335,  1343,  1345,  1347,  1349,  1353,  1356,  1360,  1364,
   1365,  1366,  1370,  1378,  1379,  1380,  1394,  1396,  1399,  1401,
   1412,  1417,  1419,  1421,  1423,  1425,  1427,  1429,  1432,  1434,
-  1478,  1479,  1483,  1487,  1491,  1495,  1497,  1501,  1503,  1505,
-  1513,  1515,  1517,  1519,  1523,  1525,  1527,  1529,  1534,  1536,
-  1538,  1540,  1543,  1545,  1547,  1591,  1594,  1598,  1601,  1605,
-  1608,  1613,  1615,  1619,  1632,  1635,  1642,  1649,  1654,  1656,
-  1661,  1663,  1670,  1672,  1676,  1680,  1686,  1690,  1693,  1696,
-  1699,  1709,  1711,  1714,  1718,  1721,  1724,  1727,  1730,  1736,
-  1742,  1744,  1749,  1751,  1760,  1763,  1765,  1768,  1774,  1776,
-  1786,  1790,  1793,  1796,  1801,  1804,  1812,  1814,  1816,  1818,
-  1821,  1824,  1839,  1858,  1861,  1863,  1866,  1868,  1872,  1874,
-  1878,  1880,  1884,  1887,  1891,  1897,  1898,  1910,  1917,  1920,
-  1926,  1930,  1935,  1941,  1942,  1950,  1953,  1957,  1960,  1964,
-  1969,  1972,  1976,  1979,  1981,  1983,  1985,  1992,  1994,  1995,
-  1996,  2000,  2003,  2007,  2010,  2016,  2018,  2021,  2024,  2027,
-  2033,  2036,  2039,  2041,  2043,  2047,  2053,  2061,  2063,  2067,
-  2069,  2074,  2077,  2080,  2082,  2084,  2088,  2093,  2100,  2104,
-  2108,  2115,  2119,  2122,  2125,  2131,  2143,  2145,  2148,  2168,
-  2170,  2173,  2175,  2180,  2182,  2184,  2186,  2188,  2190,  2194,
-  2202,  2205,  2207,  2211,  2217,  2222,  2227,  2229,  2233,  2236,
-  2238,  2244,  2261,  2267,  2269,  2272,  2275,  2277,  2281,  2283,
-  2287,  2292,  2298,  2301,  2302,  2323,  2346,  2348,  2352,  2363,
-  2377,  2382,  2389,  2391,  2392,  2393,  2396,  2411,  2416,  2422,
-  2424,  2429,  2431,  2433,  2435,  2437,  2439,  2442,  2452,  2459,
-  2484,  2490,  2493,  2496,  2498,  2509,  2514,  2517,  2522,  2525,
-  2532,  2542,  2545,  2552,  2562,  2564,  2567,  2569,  2572,  2579,
-  2587,  2594,  2600,  2606,  2614,  2618,  2623,  2627,  2630,  2639,
-  2641,  2645,  2648,  2653,  2657,  2663,  2674,  2677,  2681,  2685,
-  2693,  2698,  2704,  2707,  2709,  2711,  2717,  2720,  2722,  2724,
-  2726,  2730,  2733,  2751,  2761,  2763,  2764,  2768,  2773,  2776,
-  2778,  2780,  2782,  2786,  2792,  2794,  2802,  2805,  2807,  2809,
-  2811,  2815,  2818,  2821,  2823,  2825,  2827,  2831,  2834,  2837,
-  2839,  2841,  2843,  2845,  2852,  2856,  2861,  2865,  2870,  2872,
-  2876,  2879,  2881,  2884,  2886,  2887,  2890,  2892,  2894,  2900,
-  2915,  2921,  2927,  2941,  2943,  2947,  2961,  2963,  2965,  2969,
-  2975,  2988,  2990,  2994,  3007,  3013,  3015,  3016,  3017,  3025,
-  3030,  3039,  3040,  3044,  3047,  3053,  3059,  3062,  3064,  3066,
-  3068,  3072,  3076,  3080,  3083,  3088,  3091,  3093,  3095,  3097,
-  3099,  3101,  3103,  3105,  3109,  3113,  3117,  3121,  3122,  3124,
-  3126,  3128,  3130,  3132,  3134,  3136,  3138,  3146,  3148,  3149,
-  3150,  3153,  3159,  3161,  3166,  3168,  3171,  3185,  3188,  3191,
-  3195,  3198,  3205,  3207,  3210,  3212,  3214,  3217,  3220,  3223,
-  3226,  3228,  3231,  3235,  3237,  3243,  3245,  3246,  3248,  3253,
-  3255,  3257,  3259,  3261,  3264,  3265,  3267,  3270,  3271,  3274,
-  3274,  3277,  3277,  3280,  3280,  3282,  3284,  3286,  3288,  3294,
-  3300,  3303,  3306,  3312,  3314,  3316,  3320,  3322,  3323,  3324,
-  3326,  3329,  3336,  3341,  3349,  3353,  3355,  3358,  3360,  3363,
-  3367,  3369,  3372,  3374,  3377,  3394,  3400,  3408,  3410,  3412,
-  3416,  3419,  3420,  3428,  3432,  3436,  3439,  3440,  3446,  3449,
-  3452,  3454,  3458,  3463,  3466,  3476,  3481,  3482,  3489,  3492,
-  3495,  3497,  3500,  3502,  3512,  3526,  3530,  3533,  3535,  3539,
-  3543,  3546,  3549,  3551,  3555,  3557,  3564,  3571,  3574,  3577,
-  3581,  3585,  3591,  3595,  3600,  3602,  3605,  3610,  3616,  3627,
-  3630,  3632,  3636,  3641,  3643,  3650,  3653,  3655,  3657,  3663,
-  3668,  3671,  3673,  3675,  3677,  3679,  3681,  3683,  3685,  3687,
-  3689,  3691,  3693,  3695,  3697,  3699,  3701,  3703,  3705,  3707,
-  3709,  3711,  3713,  3715,  3717,  3719,  3721,  3723,  3725,  3727,
-  3729,  3731,  3733,  3736,  3738
+  1451,  1452,  1456,  1460,  1464,  1468,  1470,  1474,  1476,  1478,
+  1486,  1488,  1490,  1492,  1496,  1498,  1500,  1502,  1507,  1509,
+  1511,  1513,  1516,  1518,  1520,  1564,  1567,  1571,  1574,  1578,
+  1581,  1586,  1588,  1592,  1605,  1608,  1615,  1622,  1627,  1629,
+  1634,  1636,  1643,  1645,  1649,  1653,  1659,  1663,  1666,  1669,
+  1672,  1682,  1684,  1687,  1691,  1694,  1697,  1700,  1703,  1709,
+  1715,  1717,  1722,  1724,  1733,  1736,  1738,  1741,  1747,  1749,
+  1759,  1763,  1766,  1769,  1774,  1777,  1785,  1787,  1789,  1791,
+  1794,  1797,  1812,  1831,  1834,  1836,  1839,  1841,  1845,  1847,
+  1851,  1853,  1857,  1860,  1864,  1870,  1871,  1883,  1890,  1893,
+  1899,  1903,  1908,  1914,  1915,  1923,  1926,  1930,  1933,  1937,
+  1942,  1945,  1949,  1952,  1954,  1956,  1958,  1965,  1967,  1968,
+  1969,  1973,  1976,  1980,  1983,  1989,  1991,  1994,  1997,  2000,
+  2006,  2009,  2012,  2014,  2016,  2020,  2026,  2034,  2036,  2040,
+  2042,  2047,  2050,  2053,  2055,  2057,  2061,  2066,  2073,  2077,
+  2081,  2088,  2092,  2095,  2098,  2104,  2116,  2118,  2121,  2141,
+  2143,  2146,  2148,  2153,  2155,  2157,  2159,  2161,  2163,  2167,
+  2175,  2178,  2180,  2184,  2190,  2195,  2200,  2202,  2206,  2209,
+  2213,  2219,  2222,  2239,  2245,  2247,  2250,  2253,  2255,  2259,
+  2261,  2265,  2270,  2276,  2279,  2280,  2301,  2324,  2326,  2330,
+  2341,  2355,  2360,  2367,  2369,  2370,  2371,  2374,  2389,  2394,
+  2400,  2402,  2407,  2409,  2411,  2413,  2415,  2417,  2420,  2430,
+  2437,  2462,  2468,  2471,  2474,  2476,  2487,  2492,  2495,  2500,
+  2503,  2510,  2520,  2523,  2530,  2540,  2542,  2545,  2547,  2550,
+  2557,  2565,  2572,  2578,  2584,  2592,  2596,  2601,  2605,  2608,
+  2617,  2619,  2623,  2626,  2631,  2635,  2641,  2652,  2655,  2659,
+  2663,  2671,  2676,  2682,  2685,  2687,  2689,  2695,  2698,  2700,
+  2702,  2704,  2708,  2711,  2729,  2739,  2741,  2742,  2746,  2751,
+  2754,  2756,  2758,  2760,  2764,  2770,  2772,  2780,  2783,  2785,
+  2787,  2789,  2793,  2796,  2799,  2801,  2803,  2805,  2809,  2812,
+  2815,  2817,  2819,  2821,  2823,  2830,  2834,  2839,  2843,  2848,
+  2850,  2854,  2857,  2859,  2862,  2864,  2865,  2868,  2870,  2872,
+  2878,  2893,  2899,  2905,  2919,  2921,  2925,  2939,  2941,  2943,
+  2947,  2953,  2966,  2968,  2972,  2985,  2991,  2993,  2994,  2995,
+  3003,  3008,  3017,  3018,  3022,  3025,  3031,  3037,  3040,  3042,
+  3044,  3046,  3050,  3054,  3058,  3061,  3066,  3069,  3071,  3073,
+  3075,  3077,  3079,  3081,  3083,  3087,  3091,  3095,  3099,  3100,
+  3102,  3104,  3106,  3108,  3110,  3112,  3114,  3116,  3124,  3126,
+  3127,  3128,  3131,  3137,  3139,  3144,  3146,  3149,  3163,  3166,
+  3169,  3173,  3176,  3183,  3185,  3188,  3190,  3192,  3195,  3198,
+  3201,  3204,  3206,  3209,  3213,  3215,  3221,  3223,  3224,  3226,
+  3231,  3233,  3235,  3237,  3239,  3242,  3243,  3245,  3248,  3249,
+  3252,  3252,  3255,  3255,  3258,  3258,  3260,  3262,  3264,  3266,
+  3272,  3278,  3281,  3284,  3290,  3292,  3294,  3298,  3300,  3301,
+  3302,  3304,  3307,  3314,  3319,  3327,  3331,  3333,  3336,  3338,
+  3341,  3345,  3347,  3350,  3352,  3355,  3372,  3378,  3386,  3388,
+  3390,  3394,  3397,  3398,  3406,  3410,  3414,  3417,  3418,  3424,
+  3427,  3430,  3432,  3436,  3441,  3444,  3454,  3459,  3460,  3467,
+  3470,  3473,  3475,  3478,  3480,  3490,  3504,  3508,  3511,  3513,
+  3517,  3521,  3524,  3527,  3529,  3533,  3535,  3542,  3549,  3552,
+  3555,  3559,  3563,  3569,  3573,  3578,  3580,  3583,  3588,  3594,
+  3605,  3608,  3610,  3614,  3619,  3621,  3628,  3631,  3633,  3635,
+  3641,  3646,  3649,  3651,  3653,  3655,  3657,  3659,  3661,  3663,
+  3665,  3667,  3669,  3671,  3673,  3675,  3677,  3679,  3681,  3683,
+  3685,  3687,  3689,  3691,  3693,  3695,  3697,  3699,  3701,  3703,
+  3705,  3707,  3709,  3711,  3714,  3716
 };
 #endif
 
@@ -778,7 +779,7 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "init","initlist","fn.defpen","pending_inline","pending_inlines","defarg_again",
 "pending_defargs","structsp","@26","@27","@28","@29","maybecomma","maybecomma_warn",
 "aggr","named_class_head_sans_basetype","named_class_head_sans_basetype_defn",
-"named_complex_class_head_sans_basetype","named_class_head","@30","unnamed_class_head",
+"named_complex_class_head_sans_basetype","named_class_head","@30","@31","unnamed_class_head",
 "class_head","maybe_base_class_list","base_class_list","base_class","base_class.1",
 "base_class_access_list","left_curly","self_reference","opt.component_decl_list",
 "access_specifier","component_decl_list","component_decl","component_decl_1",
@@ -794,12 +795,12 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "explicit_template_type","complex_type_name","ptr_to_mem","global_scope","new_declarator",
 "direct_new_declarator","absdcl","direct_abstract_declarator","stmts","errstmt",
 "maybe_label_decls","label_decls","label_decl","compstmt_or_error","compstmt",
-"@31","simple_if","@32","@33","implicitly_scoped_stmt","@34","stmt","simple_stmt",
-"@35","@36","@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47",
-"@48","function_try_block","@49","@50","try_block","@51","@52","handler_seq",
-"handler","@53","@54","type_specifier_seq","handler_args","label_colon","for.init.statement",
+"@32","simple_if","@33","@34","implicitly_scoped_stmt","@35","stmt","simple_stmt",
+"@36","@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47","@48",
+"@49","function_try_block","@50","@51","try_block","@52","@53","handler_seq",
+"handler","@54","@55","type_specifier_seq","handler_args","label_colon","for.init.statement",
 "maybe_cv_qualifier","xexpr","asm_operands","nonnull_asm_operands","asm_operand",
-"asm_clobbers","parmlist","complex_parmlist","defarg","@55","defarg1","parms",
+"asm_clobbers","parmlist","complex_parmlist","defarg","@56","defarg1","parms",
 "parms_comma","named_parm","full_parm","parm","see_typename","bad_parm","exception_specification_opt",
 "ansi_raise_identifier","ansi_raise_identifiers","conversion_declarator","operator",
 "operator_name", NULL
@@ -857,44 +858,44 @@ static const short yyr1[] = {     0,
    260,   260,   260,   260,   260,   263,   264,   260,   260,   265,
    265,   266,   266,   267,   267,   267,   267,   267,   267,   268,
    269,   269,   269,   270,   270,   270,   270,   270,   271,   272,
-   271,   271,   273,   274,   274,   275,   275,   275,   276,   276,
-   277,   277,   278,   278,   278,   278,   279,   279,   279,   279,
-   280,   281,   282,   282,   282,   282,   283,   284,   284,   285,
-   285,   285,   285,   285,   285,   285,   285,   285,   285,   286,
-   286,   286,   286,   286,   286,   286,   286,   286,   287,   287,
-   287,   288,   288,   288,   289,   289,   290,   290,   291,   291,
-   292,   292,   292,   292,   293,   293,   294,   294,   294,   295,
-   295,   296,   296,   297,   297,   297,   298,   298,   299,   299,
-   300,   301,   302,   302,   302,   302,   303,   303,   303,   303,
-   303,   303,   304,   304,   305,   305,   305,   306,   307,   307,
-   307,   307,   307,   307,   308,   308,   309,   309,   309,   309,
-   309,   309,   310,   310,   310,   310,   310,   310,   311,   311,
-   311,   311,   311,   311,   312,   312,   313,   313,   314,   314,
-   315,   315,   315,   316,   316,   316,   317,   317,   317,   318,
-   318,   318,   318,   319,   319,   320,   320,   320,   320,   321,
-   321,   321,   321,   322,   322,   322,   322,   322,   322,   323,
-   324,   324,   324,   325,   325,   326,   327,   327,   327,   327,
-   327,   327,   327,   328,   328,   329,   329,   329,   329,   329,
-   329,   329,   329,   329,   329,   329,   330,   330,   330,   330,
+   271,   273,   271,   274,   275,   275,   276,   276,   276,   277,
+   277,   278,   278,   279,   279,   279,   279,   280,   280,   280,
+   280,   281,   282,   283,   283,   283,   283,   284,   285,   285,
+   286,   286,   286,   286,   286,   286,   286,   286,   286,   286,
+   287,   287,   287,   287,   287,   287,   287,   287,   287,   288,
+   288,   288,   289,   289,   289,   290,   290,   291,   291,   292,
+   292,   293,   293,   293,   293,   294,   294,   295,   295,   295,
+   296,   296,   297,   297,   298,   298,   298,   299,   299,   300,
+   300,   301,   302,   303,   303,   303,   303,   304,   304,   304,
+   304,   304,   304,   305,   305,   306,   306,   306,   307,   308,
+   308,   308,   308,   308,   308,   309,   309,   310,   310,   310,
+   310,   310,   310,   311,   311,   311,   311,   311,   311,   312,
+   312,   312,   312,   312,   312,   313,   313,   314,   314,   315,
+   315,   316,   316,   316,   317,   317,   317,   318,   318,   318,
+   319,   319,   319,   319,   320,   320,   321,   321,   321,   321,
+   322,   322,   322,   322,   323,   323,   323,   323,   323,   323,
+   324,   325,   325,   325,   326,   326,   327,   328,   328,   328,
+   328,   328,   328,   328,   329,   329,   330,   330,   330,   330,
    330,   330,   330,   330,   330,   330,   330,   331,   331,   331,
-   331,   332,   333,   333,   334,   334,   335,   336,   336,   338,
-   337,   340,   341,   339,   342,   343,   342,   344,   344,   345,
-   345,   346,   345,   345,   347,   348,   345,   349,   350,   345,
-   351,   352,   353,   354,   345,   355,   356,   345,   357,   345,
-   358,   345,   359,   345,   345,   345,   345,   345,   345,   345,
-   345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
-   345,   361,   362,   360,   364,   365,   363,   366,   366,   368,
-   369,   367,   370,   370,   371,   371,   372,   372,   372,   372,
-   373,   373,   373,   374,   374,   375,   375,   375,   376,   376,
-   377,   377,   378,   379,   379,   380,   380,   380,   381,   381,
-   381,   381,   381,   381,   381,   383,   382,   384,   384,   385,
-   385,   385,   385,   385,   386,   386,   387,   387,   387,   387,
-   387,   387,   388,   388,   389,   389,   390,   391,   391,   392,
-   392,   392,   393,   394,   394,   395,   395,   395,   395,   396,
-   397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-   397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-   397,   397,   397,   397,   397,   397,   397,   397,   397,   397,
-   397,   397,   397,   397,   397
+   331,   331,   331,   331,   331,   331,   331,   331,   332,   332,
+   332,   332,   333,   334,   334,   335,   335,   336,   337,   337,
+   339,   338,   341,   342,   340,   343,   344,   343,   345,   345,
+   346,   346,   347,   346,   346,   348,   349,   346,   350,   351,
+   346,   352,   353,   354,   355,   346,   356,   357,   346,   358,
+   346,   359,   346,   360,   346,   346,   346,   346,   346,   346,
+   346,   346,   346,   346,   346,   346,   346,   346,   346,   346,
+   346,   346,   362,   363,   361,   365,   366,   364,   367,   367,
+   369,   370,   368,   371,   371,   372,   372,   373,   373,   373,
+   373,   374,   374,   374,   375,   375,   376,   376,   376,   377,
+   377,   378,   378,   379,   380,   380,   381,   381,   381,   382,
+   382,   382,   382,   382,   382,   382,   384,   383,   385,   385,
+   386,   386,   386,   386,   386,   387,   387,   388,   388,   388,
+   388,   388,   388,   389,   389,   390,   390,   391,   392,   392,
+   393,   393,   393,   394,   395,   395,   396,   396,   396,   396,
+   397,   398,   398,   398,   398,   398,   398,   398,   398,   398,
+   398,   398,   398,   398,   398,   398,   398,   398,   398,   398,
+   398,   398,   398,   398,   398,   398,   398,   398,   398,   398,
+   398,   398,   398,   398,   398,   398
 };
 
 static const short yyr2[] = {     0,
@@ -948,100 +949,100 @@ static const short yyr2[] = {     0,
      6,     3,     2,     2,     2,     0,     0,     9,     1,     0,
      1,     0,     1,     1,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     3,     4,     3,     2,     3,     1,     0,
-     3,     2,     2,     1,     1,     0,     2,     3,     1,     4,
-     1,     3,     1,     1,     4,     4,     2,     2,     3,     3,
-     1,     0,     1,     2,     3,     2,     2,     1,     2,     2,
-     2,     2,     2,     2,     2,     1,     2,     2,     3,     2,
-     2,     4,     4,     2,     1,     5,     4,     1,     0,     1,
-     3,     0,     1,     3,     1,     1,     1,     1,     4,     4,
-     4,     4,     4,     3,     4,     4,     4,     4,     3,     1,
-     3,     1,     3,     2,     1,     7,     0,     2,     1,     2,
-     0,     2,     4,     4,     2,     4,     3,     3,     2,     2,
-     3,     1,     1,     2,     1,     1,     2,     2,     4,     4,
-     3,     3,     2,     1,     1,     2,     3,     3,     2,     2,
-     3,     1,     3,     3,     2,     2,     3,     1,     4,     3,
-     4,     3,     1,     2,     2,     2,     2,     2,     1,     2,
-     4,     4,     2,     1,     1,     1,     1,     2,     4,     2,
-     2,     2,     2,     1,     2,     2,     2,     2,     3,     1,
-     2,     3,     4,     2,     2,     2,     2,     2,     2,     4,
-     2,     1,     2,     2,     3,     1,     3,     2,     3,     2,
-     2,     3,     1,     3,     4,     3,     2,     2,     1,     3,
-     2,     2,     1,     2,     3,     1,     3,     1,     6,     4,
-     4,     3,     5,     3,     3,     3,     2,     1,     1,     2,
-     2,     2,     0,     1,     1,     2,     3,     1,     2,     0,
-     3,     0,     0,     5,     1,     0,     2,     1,     1,     1,
-     2,     0,     4,     1,     0,     0,     5,     0,     0,     7,
-     0,     0,     0,     0,    12,     0,     0,     7,     0,     5,
-     0,     7,     0,     4,     2,     2,     2,     3,     6,     8,
-    10,    12,     4,     3,     2,     2,     1,     1,     1,     1,
-     1,     0,     0,     6,     0,     0,     5,     1,     2,     0,
-     0,     5,     1,     1,     3,     3,     2,     2,     2,     2,
-     2,     1,     2,     0,     1,     0,     1,     1,     0,     1,
-     1,     3,     4,     1,     3,     0,     1,     1,     1,     2,
-     2,     2,     1,     2,     2,     0,     3,     1,     1,     1,
-     2,     2,     2,     4,     2,     2,     2,     2,     2,     2,
-     1,     2,     1,     2,     1,     1,     0,     0,     1,     0,
-     4,     2,     1,     1,     3,     0,     3,     3,     3,     1,
+     3,     0,     3,     2,     1,     1,     0,     2,     3,     1,
+     4,     1,     3,     1,     1,     4,     4,     2,     2,     3,
+     3,     1,     0,     1,     2,     3,     2,     2,     1,     2,
+     2,     2,     2,     2,     2,     2,     1,     2,     2,     3,
+     2,     2,     4,     4,     2,     1,     5,     4,     1,     0,
+     1,     3,     0,     1,     3,     1,     1,     1,     1,     4,
+     4,     4,     4,     4,     3,     4,     4,     4,     4,     3,
+     1,     3,     1,     3,     2,     1,     7,     0,     2,     1,
+     2,     0,     2,     4,     4,     2,     4,     3,     3,     2,
+     2,     3,     1,     1,     2,     1,     1,     2,     2,     4,
+     4,     3,     3,     2,     1,     1,     2,     3,     3,     2,
+     2,     3,     1,     3,     3,     2,     2,     3,     1,     4,
+     3,     4,     3,     1,     2,     2,     2,     2,     2,     1,
+     2,     4,     4,     2,     1,     1,     1,     1,     2,     4,
+     2,     2,     2,     2,     1,     2,     2,     2,     2,     3,
+     1,     2,     3,     4,     2,     2,     2,     2,     2,     2,
+     4,     2,     1,     2,     2,     3,     1,     3,     2,     3,
+     2,     2,     3,     1,     3,     4,     3,     2,     2,     1,
+     3,     2,     2,     1,     2,     3,     1,     3,     1,     6,
+     4,     4,     3,     5,     3,     3,     3,     2,     1,     1,
+     2,     2,     2,     0,     1,     1,     2,     3,     1,     2,
+     0,     3,     0,     0,     5,     1,     0,     2,     1,     1,
+     1,     2,     0,     4,     1,     0,     0,     5,     0,     0,
+     7,     0,     0,     0,     0,    12,     0,     0,     7,     0,
+     5,     0,     7,     0,     4,     2,     2,     2,     3,     6,
+     8,    10,    12,     4,     3,     2,     2,     1,     1,     1,
+     1,     1,     0,     0,     6,     0,     0,     5,     1,     2,
+     0,     0,     5,     1,     1,     3,     3,     2,     2,     2,
+     2,     2,     1,     2,     0,     1,     0,     1,     1,     0,
+     1,     1,     3,     4,     1,     3,     0,     1,     1,     1,
+     2,     2,     2,     1,     2,     2,     0,     3,     1,     1,
+     1,     2,     2,     2,     4,     2,     2,     2,     2,     2,
+     2,     1,     2,     1,     2,     1,     1,     0,     0,     1,
+     0,     4,     2,     1,     1,     3,     0,     3,     3,     3,
+     1,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     3,     2,     2,     2,     2,     3,     2,
-     2,     4,     4,     3,     2
+     2,     2,     2,     2,     3,     2,     2,     2,     2,     3,
+     2,     2,     4,     4,     3,     2
 };
 
 static const short yydefact[] = {     3,
-    12,    12,     5,     0,     4,     0,   279,   634,   635,     0,
-   386,   398,   579,     0,    11,     0,     0,     0,    10,   484,
-   840,     0,     0,     0,   167,   666,   280,   281,    83,     0,
-     0,   827,     0,    45,     0,     0,    13,    25,     0,    27,
-     8,     0,    16,    15,    89,   110,    86,     0,   636,   171,
-   300,   277,   301,   612,     0,   373,     0,   372,   391,     0,
-   411,   390,   428,   397,     0,   499,   500,   506,   505,   504,
-   479,   385,   595,   399,   596,   108,   299,   623,   593,     0,
-   637,   577,     0,     0,   278,    81,    82,   176,   640,   176,
-   641,   176,   282,   167,   140,   141,   142,   143,   144,   470,
-   473,     0,   662,     0,   474,     0,     0,     0,     0,   141,
+    12,    12,     5,     0,     4,     0,   279,   635,   636,     0,
+   386,   398,   580,     0,    11,     0,     0,     0,    10,   484,
+   841,     0,     0,     0,   167,   667,   280,   281,    83,     0,
+     0,   828,     0,    45,     0,     0,    13,    25,     0,    27,
+     8,     0,    16,    15,    89,   110,    86,     0,   637,   171,
+   300,   277,   301,   613,     0,   373,     0,   372,   391,     0,
+   411,   390,   428,   397,     0,   499,   500,   502,   506,   505,
+   479,   385,   596,   399,   597,   108,   299,   624,   594,     0,
+   638,   578,     0,     0,   278,    81,    82,   176,   641,   176,
+   642,   176,   282,   167,   140,   141,   142,   143,   144,   470,
+   473,     0,   663,     0,   474,     0,     0,     0,     0,   141,
    142,   143,   144,    23,     0,     0,     0,     0,     0,     0,
-     0,   475,   644,     0,   650,     0,     0,     0,    37,     0,
-     0,    31,     0,     0,    47,     0,   176,   642,     0,     0,
-     0,   610,   605,     0,     0,     0,   609,     0,     0,     0,
-     0,   300,     0,   291,   581,     0,     0,   299,   577,    28,
+     0,   475,   645,     0,   651,     0,     0,     0,    37,     0,
+     0,    31,     0,     0,    47,     0,   176,   643,     0,     0,
+     0,   611,   606,     0,     0,     0,   610,     0,     0,     0,
+     0,   300,     0,   291,   582,     0,     0,   299,   578,    28,
      0,    26,     3,    46,     0,    64,   386,     0,     0,     8,
     67,    63,    66,    89,     0,     0,     0,   397,    90,    14,
-     0,   426,     0,     0,   444,    87,    79,   643,   581,     0,
-   577,    80,     0,     0,     0,   106,     0,   407,   363,   592,
-   364,   604,     0,   577,   388,   387,    78,   109,   374,     0,
+     0,   426,     0,     0,   444,    87,    79,   644,   582,     0,
+   578,    80,     0,     0,     0,   106,     0,   407,   363,   593,
+   364,   605,     0,   578,   388,   387,    78,   109,   374,     0,
    409,   389,   107,   380,   404,   405,   375,   393,   395,   384,
-   406,     0,    75,   429,   485,   486,   487,   488,   503,   149,
+   406,     0,    75,   429,   485,   486,   487,   488,   504,   149,
    148,   150,   490,   491,   497,   489,     0,     0,   492,   493,
-   506,   827,   502,   521,   522,   580,   392,     0,   423,   635,
-     0,   664,   171,   627,   628,   624,   598,   638,     0,   597,
-   594,     0,   875,   871,   870,   868,   850,   855,   856,     0,
-   862,   861,   847,   848,   846,   865,   854,   851,   852,   853,
-   857,   858,   844,   845,   841,   842,   843,   867,   859,   860,
-   849,   866,     0,   863,   773,   391,   774,   836,   282,   279,
-   579,   304,   352,     0,     0,     0,     0,   348,   346,   319,
-   350,   351,     0,     0,     0,     0,     0,   280,   281,   273,
-     0,     0,   184,   183,     0,   185,   186,     0,     0,   187,
-     0,     0,   177,   178,     0,   247,     0,   250,   182,   303,
-   213,     0,     0,   305,   306,     0,   180,   370,   391,   371,
-   629,   331,   321,     0,     0,     0,     0,   176,     0,   472,
-     0,   467,     0,   663,   661,     0,   188,   189,     0,     0,
-     0,   433,     3,    21,    29,   658,   654,   655,   657,   659,
-   656,   140,   141,   142,     0,   143,   144,   646,   647,   651,
-   648,   645,     0,   289,   290,   288,   626,   625,    33,    32,
-    49,     0,   157,     0,     0,   391,   155,     0,     0,   606,
-   608,     0,   607,   141,   142,   275,   276,   295,     0,   616,
-   294,     0,   615,     0,   302,   280,   281,     0,     0,     0,
-   293,   292,   620,     0,     0,    12,     0,   167,     9,     9,
-    70,     0,    65,     0,     0,    71,    74,     0,   425,   427,
-   122,    93,   127,   762,     0,    85,    84,    92,   125,     0,
-     0,   123,    88,   622,     0,     0,   585,     0,   830,     0,
-   590,     0,   589,     0,     0,     0,     0,   577,   426,     0,
-    77,   581,   577,   603,     0,   377,   378,     0,    76,   426,
-   382,   381,   383,   376,   396,   413,   412,   494,   498,   496,
-     0,   501,   507,     0,     0,   394,   426,   577,    94,     0,
-     0,     0,     0,   577,   100,   578,   611,   635,   665,   171,
-     0,     0,   864,   869,   393,   577,   577,     0,   577,   874,
+   507,   507,   522,   523,   581,   392,     0,   423,   636,     0,
+   665,   171,   628,   629,   625,   599,   639,     0,   598,   595,
+     0,   876,   872,   871,   869,   851,   856,   857,     0,   863,
+   862,   848,   849,   847,   866,   855,   852,   853,   854,   858,
+   859,   845,   846,   842,   843,   844,   868,   860,   861,   850,
+   867,     0,   864,   774,   391,   775,   837,   282,   279,   580,
+   304,   352,     0,     0,     0,     0,   348,   346,   319,   350,
+   351,     0,     0,     0,     0,     0,   280,   281,   273,     0,
+     0,   184,   183,     0,   185,   186,     0,     0,   187,     0,
+     0,   177,   178,     0,   247,     0,   250,   182,   303,   213,
+     0,     0,   305,   306,     0,   180,   370,   391,   371,   630,
+   331,   321,     0,     0,     0,     0,   176,     0,   472,     0,
+   467,     0,   664,   662,     0,   188,   189,     0,     0,     0,
+   433,     3,    21,    29,   659,   655,   656,   658,   660,   657,
+   140,   141,   142,     0,   143,   144,   647,   648,   652,   649,
+   646,     0,   289,   290,   288,   627,   626,    33,    32,    49,
+     0,   157,     0,     0,   391,   155,     0,     0,   607,   609,
+     0,   608,   141,   142,   275,   276,   295,     0,   617,   294,
+     0,   616,     0,   302,   280,   281,     0,     0,     0,   293,
+   292,   621,     0,     0,    12,     0,   167,     9,     9,    70,
+     0,    65,     0,     0,    71,    74,     0,   425,   427,   122,
+    93,   127,   763,     0,    85,    84,    92,   125,     0,     0,
+   123,    88,   623,     0,     0,   586,     0,   831,     0,   591,
+     0,   590,     0,     0,     0,     0,   578,   426,     0,    77,
+   582,   578,   604,     0,   377,   378,     0,    76,   426,   382,
+   381,   383,   376,   396,   413,   412,   494,   498,   496,     0,
+   828,   501,   503,     0,     0,   394,   426,   578,    94,     0,
+     0,     0,     0,   578,   100,   579,   612,   636,   666,   171,
+     0,     0,   865,   870,   393,   578,   578,     0,   578,   875,
    176,     0,     0,     0,   220,     0,     0,   222,   235,   236,
      0,     0,     0,     0,     0,   274,   219,   216,   215,   217,
      0,     0,     0,     0,     0,   303,     0,     0,     0,   214,
@@ -1049,2271 +1050,2231 @@ static const short yydefact[] = {     3,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    313,     0,   315,   317,   318,   356,   355,     0,     0,   238,
-   238,     0,   224,   575,     0,   232,   353,   345,     0,     0,
-   827,   334,   337,   338,     0,     0,   365,   683,   679,   688,
-     0,   581,   577,   577,   577,   367,   686,     0,   633,   369,
-     0,     0,   368,   333,     0,   328,   347,   329,   349,   630,
-     0,   330,   173,   173,     0,   165,     0,   391,   163,   572,
-   482,   570,   469,     0,     0,   400,     0,     0,   401,   402,
+   238,     0,   224,   576,     0,   232,   353,   345,     0,     0,
+   828,   334,   337,   338,     0,     0,   365,   684,   680,   689,
+     0,   582,   578,   578,   578,   367,   687,     0,   634,   369,
+     0,     0,   368,   333,     0,   328,   347,   329,   349,   631,
+     0,   330,   173,   173,     0,   165,     0,   391,   163,   573,
+   482,   571,   469,     0,     0,   400,     0,     0,   401,   402,
    403,   439,   440,   441,   438,     0,   431,   434,     0,     3,
-     0,   649,   176,   652,     0,    41,    42,     0,    53,     0,
-     0,    57,    61,    50,   826,   821,     0,   370,   391,    53,
-   371,   825,    59,   168,   153,   151,   168,   173,   298,   614,
-   613,   302,     0,   617,     0,    18,    20,    89,     9,     9,
-    73,    72,     0,   128,   354,     0,   710,    91,   708,   450,
-     0,   446,   445,   212,     0,   211,   582,   621,     0,   803,
-     0,   798,   391,     0,   797,   799,   828,   810,     0,     0,
-   619,   588,   587,     0,     0,   602,     0,   421,   420,   408,
-   601,     0,   830,   591,   379,   410,   422,   426,   495,   634,
-   635,   827,     0,   827,   636,   508,   509,   511,   827,   514,
-   513,     0,   545,   635,     0,   536,     0,     0,   548,     0,
-   121,   116,     0,   171,   549,   552,     0,   528,     0,   119,
-     0,   426,     0,   424,   830,   796,   176,   176,   639,   176,
-   830,   796,   577,    97,   577,   103,   873,   872,   836,   836,
-   836,     0,     0,     0,     0,   633,     0,     0,     0,     0,
-   391,     0,     0,     0,   309,     0,   307,   308,     0,   245,
-   179,   279,   634,   635,   280,   281,     0,     0,   451,   480,
-     0,   272,   271,   788,   787,     0,   269,   268,   266,   267,
-   265,   264,   263,   260,   261,   262,   258,   259,   253,   254,
-   255,   256,   257,   251,   252,     0,     0,     0,     0,     0,
-   238,   226,   242,     0,     0,   225,   577,   577,     0,   577,
-   574,   673,     0,     0,     0,     0,     0,   336,     0,   340,
-     0,   342,     0,   682,   681,   678,   677,   826,     0,     0,
-   697,     0,     0,   830,   366,   830,   684,   577,   796,   581,
-   683,   679,     0,     0,   577,     0,   390,     0,     0,     0,
-     0,   170,   172,   283,   168,   161,   159,   168,     0,   483,
-     0,   482,   210,   209,   208,   207,   433,     0,     0,    24,
-     0,     0,   653,     0,    38,    44,    43,    55,    52,    53,
-     0,    48,     0,     0,   683,   679,     0,   817,   577,   820,
-   822,     0,   818,   819,    54,   490,     0,   158,   168,   168,
-   156,   169,   296,    17,    19,    69,    89,   414,   145,   133,
-   146,   147,     0,   126,   129,     0,     0,     0,     0,   709,
-   703,   447,     0,   124,   586,   583,   802,   816,   805,     0,
-   584,   801,   815,   804,   800,   829,   812,   823,   813,   806,
-   811,   832,     0,   418,   600,   599,   417,   518,     0,   517,
-   827,   827,   827,     0,   577,   796,   544,   537,   549,   538,
-   426,   426,   534,   535,   532,   533,   577,   796,   279,   634,
-     0,   413,   117,   540,   550,   555,   556,   413,   413,     0,
-     0,   413,   115,   541,   553,   413,   529,   530,   531,   426,
-   527,   476,     0,    96,     0,     0,     0,     0,   102,     0,
-   830,   796,   830,   796,   838,   837,   839,   284,   320,   221,
-   223,   326,   327,     0,     0,     0,     0,   308,   311,     0,
-     0,     0,     0,   246,     0,   312,   314,   316,     0,     0,
-     0,     0,   227,   244,     0,     0,   670,   668,     0,   671,
-   581,   233,     0,     0,   176,   343,     0,     0,     0,   680,
-   676,   687,   577,   696,   694,   695,   685,   830,     0,   692,
-     0,   631,   632,     0,   332,   166,   168,   168,   164,   573,
-   571,   471,     0,   432,   430,   279,     0,    22,    30,   660,
-    56,    51,    58,    62,   682,   678,   683,   679,     0,   593,
-     0,   577,   684,    60,   154,   152,    68,     0,   131,     0,
-   135,     0,   137,     0,   139,     0,   763,     0,   200,   711,
-     0,   704,   705,     0,   448,   683,   679,     0,   303,     0,
-   629,   824,     0,     0,   833,   834,     0,     0,   415,     0,
-     0,     0,   520,   519,   512,   830,     0,   539,   444,   444,
-   830,     0,     0,     0,   426,   426,     0,   426,   426,     0,
-   426,     0,   444,   464,   577,   286,   285,   287,   577,    99,
-     0,   105,     0,     0,     0,     0,     0,     0,   454,     0,
-   452,   249,   270,   240,   239,   237,   228,     0,   241,   243,
-   669,   667,   674,   672,     0,   234,     0,     0,   335,   339,
-   341,   830,   690,   577,   691,   162,   160,   468,     0,   435,
-   437,   682,   678,   598,   684,   132,   130,     0,     0,     0,
-     0,   442,     0,     0,   279,   634,   635,   712,   725,   728,
-   731,   736,     0,     0,     0,     0,     0,     0,     0,     0,
-   280,   757,   765,     0,   784,   761,   760,   759,     0,   720,
-     0,     0,   391,     0,   699,   718,   724,   698,   719,   758,
-     0,   706,   449,     0,   632,   814,   808,   809,   807,     0,
-   831,   419,     0,   515,   516,   510,   112,   577,   543,   547,
-   114,   577,   426,   426,   564,   444,   279,   634,     0,   551,
-   557,   558,   413,   413,   444,   444,     0,   444,   554,   542,
-     0,   830,   830,   577,   577,     0,     0,     0,     0,   453,
-     0,     0,   229,   230,   675,   344,   285,   693,   830,     0,
-   134,   136,   138,   770,   764,   768,     0,   707,   702,   203,
-   777,   779,   780,     0,     0,   716,     0,     0,     0,   743,
-   745,   746,   747,     0,     0,     0,     0,     0,     0,     0,
-   778,     0,   362,   785,     0,   721,   360,   413,     0,   361,
-     0,   413,     0,     0,     0,   201,   701,   700,   722,   756,
-   755,   308,   835,   416,   830,   830,   563,   560,   562,     0,
-     0,   426,   426,   426,   559,   561,   546,   466,     0,   465,
-   460,    95,   101,   830,   830,   322,   323,   324,   325,   455,
-     0,   231,   689,   436,     0,   769,   443,   192,     0,   713,
-   726,   715,     0,     0,     0,     0,     0,   739,     0,   748,
-     0,   754,    39,   144,    34,   144,     0,    35,   766,     0,
-   358,   359,     0,     0,     0,   357,   202,   716,   111,   113,
-   426,   426,   569,   444,   444,     0,     0,   478,    98,   104,
-   576,     0,   771,   199,     0,   391,     0,   716,     0,   729,
-   717,   703,   782,   732,     0,     0,     0,     0,   744,   753,
-    40,    36,     0,     0,   723,   568,   566,   565,   567,   463,
-   462,   456,    86,    89,     0,     0,     0,   193,   413,   714,
-   204,   727,   206,     0,   783,     0,   781,   737,   741,   740,
-   767,   789,     0,     0,   461,   775,   776,   772,   426,   703,
-   190,     0,     0,   196,     0,   195,   716,     0,     0,     0,
-   790,   791,   749,   459,     0,   458,     0,   205,     0,   730,
-   733,   738,   742,     0,   789,     0,     0,   457,   197,   191,
-     0,     0,     0,   750,   792,     0,     0,   793,     0,     0,
-   198,   734,   794,     0,   751,     0,     0,     0,   735,   795,
-   752,     0,     0,     0
+     0,   650,   176,   653,     0,    41,    42,     0,    53,     0,
+     0,    57,    61,    50,   827,   822,     0,   370,   391,    53,
+   371,   826,    59,   168,   153,   151,   168,   173,   298,   615,
+   614,   302,     0,   618,     0,    18,    20,    89,     9,     9,
+    73,    72,     0,   128,   354,     0,   711,    91,   709,   450,
+     0,   446,   445,   212,     0,   211,   583,   622,     0,   804,
+     0,   799,   391,     0,   798,   800,   829,   811,     0,     0,
+   620,   589,   588,     0,     0,   603,     0,   421,   420,   408,
+   602,     0,   831,   592,   379,   410,   422,   426,   495,   508,
+   546,   636,     0,   537,     0,     0,   549,     0,   121,   116,
+     0,   171,   550,   553,     0,   529,     0,   119,     0,   426,
+     0,   424,   831,   797,   176,   176,   640,   176,   831,   797,
+   578,    97,   578,   103,   874,   873,   837,   837,   837,     0,
+     0,     0,     0,   634,     0,     0,     0,     0,   391,     0,
+     0,     0,   309,     0,   307,   308,     0,   245,   179,   279,
+   635,   636,   280,   281,     0,     0,   451,   480,     0,   272,
+   271,   789,   788,     0,   269,   268,   266,   267,   265,   264,
+   263,   260,   261,   262,   258,   259,   253,   254,   255,   256,
+   257,   251,   252,     0,     0,     0,     0,     0,   238,   226,
+   242,     0,     0,   225,   578,   578,     0,   578,   575,   674,
+     0,     0,     0,     0,     0,   336,     0,   340,     0,   342,
+     0,   683,   682,   679,   678,   827,     0,     0,   698,     0,
+     0,   831,   366,   831,   685,   578,   797,   582,   684,   680,
+     0,     0,   578,     0,   390,     0,     0,     0,     0,   170,
+   172,   283,   168,   161,   159,   168,     0,   483,     0,   482,
+   210,   209,   208,   207,   433,     0,     0,    24,     0,     0,
+   654,     0,    38,    44,    43,    55,    52,    53,     0,    48,
+     0,     0,   684,   680,     0,   818,   578,   821,   823,     0,
+   819,   820,    54,   490,     0,   158,   168,   168,   156,   169,
+   296,    17,    19,    69,    89,   414,   145,   635,   636,   133,
+   146,   147,     0,   126,   129,     0,   637,     0,     0,     0,
+     0,   710,   704,   447,     0,   124,   587,   584,   803,   817,
+   806,     0,   585,   802,   816,   805,   801,   830,   813,   824,
+   814,   807,   812,   833,     0,   418,   601,   600,   417,   828,
+     0,   828,   509,   510,   512,   828,   515,   514,   578,   797,
+   545,   538,   550,   539,   426,   426,   535,   536,   533,   534,
+   578,   797,   279,   635,     0,   413,   117,   541,   551,   556,
+   557,   413,   413,     0,     0,   413,   115,   542,   554,   413,
+   530,   531,   532,   426,   528,   476,     0,    96,     0,     0,
+     0,     0,   102,     0,   831,   797,   831,   797,   839,   838,
+   840,   284,   320,   221,   223,   326,   327,     0,     0,     0,
+     0,   308,   311,     0,     0,     0,     0,   246,     0,   312,
+   314,   316,     0,     0,     0,     0,   227,   244,     0,     0,
+   671,   669,     0,   672,   582,   233,     0,     0,   176,   343,
+     0,     0,     0,   681,   677,   688,   578,   697,   695,   696,
+   686,   831,     0,   693,     0,   632,   633,     0,   332,   166,
+   168,   168,   164,   574,   572,   471,     0,   432,   430,   279,
+     0,    22,    30,   661,    56,    51,    58,    62,   683,   679,
+   684,   680,     0,   594,     0,   578,   685,    60,   154,   152,
+    68,     0,   131,     0,   135,     0,   137,     0,   139,     0,
+   764,     0,   200,   712,     0,   705,   706,     0,   448,   684,
+   680,     0,   303,     0,   630,   825,     0,     0,   834,   835,
+     0,     0,   415,   519,     0,   518,   828,   828,   828,     0,
+   831,     0,   540,   444,   444,   831,     0,     0,     0,   426,
+   426,     0,   426,   426,     0,   426,     0,   444,   464,   578,
+   286,   285,   287,   578,    99,     0,   105,     0,     0,     0,
+     0,     0,     0,   454,     0,   452,   249,   270,   240,   239,
+   237,   228,     0,   241,   243,   670,   668,   675,   673,     0,
+   234,     0,     0,   335,   339,   341,   831,   691,   578,   692,
+   162,   160,   468,     0,   435,   437,   683,   679,   599,   685,
+   132,   130,     0,     0,     0,     0,   442,     0,     0,   279,
+   635,   636,   713,   726,   729,   732,   737,     0,     0,     0,
+     0,     0,     0,     0,     0,   280,   758,   766,     0,   785,
+   762,   761,   760,     0,   721,     0,     0,   391,     0,   700,
+   719,   725,   699,   720,   759,     0,   707,   449,     0,   633,
+   815,   809,   810,   808,     0,   832,   419,     0,     0,     0,
+     0,   521,   520,   513,   112,   578,   544,   548,   114,   578,
+   426,   426,   565,   444,   279,   635,     0,   552,   558,   559,
+   413,   413,   444,   444,     0,   444,   555,   543,     0,   831,
+   831,   578,   578,     0,     0,     0,     0,   453,     0,     0,
+   229,   230,   676,   344,   285,   694,   831,     0,   134,   136,
+   138,   771,   765,   769,     0,   708,   703,   203,   778,   780,
+   781,     0,     0,   717,     0,     0,     0,   744,   746,   747,
+   748,     0,     0,     0,     0,     0,     0,     0,   779,     0,
+   362,   786,     0,   722,   360,   413,     0,   361,     0,   413,
+     0,     0,     0,   201,   702,   701,   723,   757,   756,   308,
+   836,   416,   516,   517,   511,   831,   831,   564,   561,   563,
+     0,     0,   426,   426,   426,   560,   562,   547,   466,     0,
+   465,   460,    95,   101,   831,   831,   322,   323,   324,   325,
+   455,     0,   231,   690,   436,     0,   770,   443,   192,     0,
+   714,   727,   716,     0,     0,     0,     0,     0,   740,     0,
+   749,     0,   755,    39,   144,    34,   144,     0,    35,   767,
+     0,   358,   359,     0,     0,     0,   357,   202,   717,   111,
+   113,   426,   426,   570,   444,   444,     0,     0,   478,    98,
+   104,   577,     0,   772,   199,     0,   391,     0,   717,     0,
+   730,   718,   704,   783,   733,     0,     0,     0,     0,   745,
+   754,    40,    36,     0,     0,   724,   569,   567,   566,   568,
+   463,   462,   456,    86,    89,     0,     0,     0,   193,   413,
+   715,   204,   728,   206,     0,   784,     0,   782,   738,   742,
+   741,   768,   790,     0,     0,   461,   776,   777,   773,   426,
+   704,   190,     0,     0,   196,     0,   195,   717,     0,     0,
+     0,   791,   792,   750,   459,     0,   458,     0,   205,     0,
+   731,   734,   739,   743,     0,   790,     0,     0,   457,   197,
+   191,     0,     0,     0,   751,   793,     0,     0,   794,     0,
+     0,   198,   735,   795,     0,   752,     0,     0,     0,   736,
+   796,   753,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1622,
-   436,     2,   437,   165,   707,   331,   181,     3,     4,    37,
-   670,   373,  1306,   671,   779,  1307,  1308,   393,  1409,   675,
-    41,   780,   402,   681,   948,   682,   683,   684,    43,   172,
-   173,    44,   455,   184,   180,    45,    46,   796,  1072,   802,
-  1074,    47,   782,   783,   185,   186,   456,   714,   984,   985,
-   650,   986,   234,    48,   970,   969,   697,   694,  1138,  1137,
-   928,   925,   136,   968,    49,    50,   922,   563,   332,   333,
-   334,   335,  1309,  1573,  1470,  1575,  1515,  1606,  1180,  1552,
-  1570,   367,   914,   336,  1247,   869,   602,   876,   337,   338,
-   368,   340,   358,    52,   255,   676,   418,   154,    53,    54,
-   341,   558,   342,   343,   344,   345,   457,   346,  1310,   496,
-   624,   347,  1311,    56,   217,   687,   348,   218,   536,   219,
-   197,   210,    60,   479,   497,  1333,   748,  1198,   198,   211,
-    61,   507,   749,    62,    63,   666,   667,   668,  1283,   462,
-   839,   840,  1543,  1544,  1508,  1450,  1361,    64,   654,   361,
-  1224,  1451,  1093,   931,    65,    66,    67,    68,    69,   241,
-    70,    71,   243,   766,   767,   768,   769,   245,   504,   505,
-   793,   787,   788,   789,  1044,  1054,  1045,  1350,  1046,  1047,
-  1351,  1352,   651,   652,   603,   904,   350,   465,   466,   191,
-   199,    73,    74,    75,   200,   142,   143,   157,    77,   132,
-   351,   352,   353,    79,   354,    81,   771,   123,   124,   125,
-   512,   105,    82,   355,   881,   882,   899,   627,  1314,  1315,
-  1181,  1182,  1183,   718,  1316,   991,  1317,  1394,  1518,  1473,
-  1474,  1318,  1319,  1498,  1395,  1519,  1396,  1554,  1397,  1556,
-  1601,  1616,  1398,  1577,  1528,  1578,  1479,   458,   715,  1281,
-  1320,  1412,  1533,  1385,  1386,  1465,  1547,  1517,  1513,  1321,
-  1524,  1415,   846,  1580,  1581,  1582,  1614,   734,   735,  1011,
-  1194,  1329,   736,   737,   738,  1007,   739,   148,  1009,   741,
-  1196,  1197,   530,    84,    85
+static const short yydefgoto[] = {  1623,
+   435,     2,   436,   165,   707,   330,   181,     3,     4,    37,
+   670,   372,  1301,   671,   767,  1302,  1303,   392,  1407,   675,
+    41,   768,   401,   681,   936,   682,   683,   684,    43,   172,
+   173,    44,   454,   184,   180,    45,    46,   784,  1066,   790,
+  1068,    47,   770,   771,   185,   186,   455,   714,   974,   975,
+   650,   976,   234,    48,   958,   957,   697,   694,  1132,  1131,
+   916,   913,   136,   956,    49,    50,   910,   563,   331,   332,
+   333,   334,  1304,  1574,  1471,  1576,  1516,  1607,  1174,  1553,
+  1571,   366,   902,   335,  1242,   857,   602,   864,   336,   337,
+   367,   339,   357,    52,   254,   676,   417,   154,    53,    54,
+   340,   558,   341,   342,   343,   344,   456,   345,  1305,   495,
+   624,   346,  1306,    56,   217,   687,   347,   218,   536,   219,
+   197,   210,    60,   478,   496,  1328,   748,  1192,   198,   211,
+    61,   507,   749,    62,    63,   666,   667,   668,  1278,   461,
+   827,   828,  1544,  1545,  1509,  1451,  1359,    64,   654,   360,
+  1219,  1452,  1087,   919,    65,    66,    67,    68,    69,   241,
+   242,    70,    71,   502,  1013,  1014,  1015,  1016,   244,   504,
+   505,   781,   775,   776,   777,  1038,  1048,  1039,  1348,  1040,
+  1041,  1349,  1350,   651,   652,   603,   892,   349,   464,   465,
+   191,   199,    73,    74,    75,   200,   142,   143,   157,    77,
+   132,   350,   351,   352,    79,   353,    81,  1018,   123,   124,
+   125,   512,   105,    82,   354,   869,   870,   887,   627,  1309,
+  1310,  1175,  1176,  1177,   718,  1311,   983,  1312,  1392,  1519,
+  1474,  1475,  1313,  1314,  1499,  1393,  1520,  1394,  1555,  1395,
+  1557,  1602,  1617,  1396,  1578,  1529,  1579,  1480,   457,   715,
+  1276,  1315,  1410,  1534,  1383,  1384,  1466,  1548,  1518,  1514,
+  1316,  1525,  1413,   834,  1581,  1582,  1583,  1615,   734,   735,
+  1003,  1188,  1324,   736,   737,   738,   999,   739,   148,  1001,
+   741,  1190,  1191,   530,    84,    85
 };
 
-static const short yypact[] = {   134,
-   147,-32768,-32768, 10614,-32768,   113,   124,   383,   475,   168,
-   235,-32768,-32768,  1317,-32768,   193,   230,   267,-32768,-32768,
--32768,   797,   818,   588,   296,-32768,   326,   491,-32768,  3006,
-  3006,-32768,  2737,-32768, 10614,   330,-32768,-32768,   365,-32768,
-    73,  3940,-32768,-32768,   333,   911,   425,   405,   437,-32768,
--32768,-32768,-32768,   325,  2831,-32768,  4345,-32768,  1547,   700,
--32768,   467,-32768,-32768,  2099,   254,-32768,   458,-32768,-32768,
-   500,  7261,-32768,-32768,-32768,  1031,-32768,-32768,-32768,  1082,
--32768,-32768,   359,  6042,   490,-32768,-32768,  9680,-32768,  9680,
--32768,  9680,-32768,-32768,-32768,   383,   475,   326,   528,   504,
-   585,   437,-32768,   617,-32768,   359,  9766,  9766,   548,-32768,
--32768,-32768,-32768,-32768,   255,   592,   522,   741,   760,   594,
-   610,-32768,-32768,  1984,-32768,   710,   383,   475,-32768,   326,
-   528,-32768,  1230,  1299,   595,  5960,  9680,-32768,  9680,  4453,
-  3755,-32768,-32768,  1402,   680,  3755,-32768,  1687,  3899,  3899,
-  2737,   559,   569,-32768,   587,  1881,   614,   618,-32768,-32768,
-   682,-32768,   582,-32768,  3152,-32768,-32768,   296,  5610,   597,
--32768,-32768,-32768,   333,  3414, 10887,   835,   688,-32768,-32768,
-   661,   467,   753,   155,   402,   703,-32768,-32768,   662,    98,
--32768,-32768,  4138,  4138,  4947,  1031,   868,-32768,-32768,   454,
--32768,-32768,  2487,-32768,-32768,-32768,-32768,-32768,  1547,   892,
--32768,   467,  1031,-32768,-32768,-32768,  1705,  1547,-32768,   467,
--32768,  3414,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   437,   467,  1998,  1822,-32768,-32768,
-   458,-32768,-32768,-32768,-32768,-32768,  1038,   359,-32768,   304,
-  1529,-32768,   185,-32768,-32768,-32768,-32768,-32768,  4607,-32768,
--32768,   803,-32768,   690,   697,-32768,-32768,-32768,-32768,   737,
+static const short yypact[] = {   126,
+   129,-32768,-32768, 10615,-32768,   110,    77,   203,   259,   176,
+   247,-32768,-32768,  1079,-32768,    22,   232,   273,-32768,-32768,
+-32768,   418,  1052,  1404,   336,-32768,   357,   452,-32768,  2484,
+  2484,-32768,  2672,-32768, 10615,   351,-32768,-32768,   422,-32768,
+   175,  4517,-32768,-32768,   391,   209,   478,   488,   455,-32768,
+-32768,-32768,-32768,   458,  1898,-32768,  5536,-32768,   938,   211,
+-32768,   523,-32768,-32768,   331,   509,-32768,-32768,-32768,-32768,
+   533,  3647,-32768,-32768,-32768,  1224,-32768,-32768,-32768,   409,
+-32768,-32768,   800,  7914,   527,-32768,-32768,  9681,-32768,  9681,
+-32768,  9681,-32768,-32768,-32768,   203,   259,   357,   541,   510,
+   605,   455,-32768,   815,-32768,   800,  9767,  9767,   530,-32768,
+-32768,-32768,-32768,-32768,   284,   631,   457,   577,   624,   638,
+   641,-32768,-32768,   686,-32768,   982,   203,   259,-32768,   357,
+   541,-32768,  1244,  1418,   570, 10888,  9681,-32768,  9681,  3446,
+  2986,-32768,-32768,   832,   877,  2986,-32768,  1464,  3204,  3204,
+  2672,   597,   602,-32768,   643,  1348,   639,   642,-32768,-32768,
+   688,-32768,   645,-32768,  1818,-32768,-32768,   336,  5424,   659,
+-32768,-32768,-32768,   391,  5857, 10943,   475,   703,-32768,-32768,
+   680,   523,   785,    76,    67,   732,-32768,-32768,   700,   191,
+-32768,-32768,  4646,  4646,  5138,  1224,   959,-32768,-32768,   535,
+-32768,-32768,  1359,-32768,-32768,-32768,-32768,-32768,   938,  1020,
+-32768,   523,  1224,-32768,-32768,-32768,  2418,   938,-32768,   523,
+-32768,  5857,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   455,   523,  1277,  1579,-32768,-32768,
+   755,   755,-32768,-32768,-32768,  1057,   800,-32768,   674,  1215,
+-32768,   236,-32768,-32768,-32768,-32768,-32768,  4780,-32768,-32768,
+   517,-32768,   731,   734,-32768,-32768,-32768,-32768,   782,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   699,-32768,-32768,  1038,  7261,   650,-32768,-32768,
-   727,-32768,-32768, 10374, 10460, 10546, 10546,-32768,-32768,-32768,
--32768,-32768,   738,   770,   772,   790,   804,   939,   528,  9852,
 2016, 10546,-32768,-32768, 10546,-32768,-32768, 10546,  7206,-32768,
10546,   318,   851,-32768, 10546,-32768,  9938,-32768, 11105,   228,
-   821,  2403, 10024,-32768,   869,   440,-32768,   685,   927,  1846,
--32768,   237,-32768,  1902,  3265,   318,   318,  9680,  5960,-32768,
-  2016,   775,  2016,-32768,-32768,   810,   878, 11038,   831,   879,
-   887,  1713,   582,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   592,   522,   741,  2016,   760,   594,   918,   610,-32768,
-   965,-32768,  1075,   383,   475,-32768,-32768,-32768,-32768,-32768,
--32768,  6810,-32768,  3414, 10954,   994,-32768,   318,   581,-32768,
--32768,   898,-32768,   961,   971,-32768,-32768,-32768,  3755,-32768,
--32768,  3755,-32768,   943,-32768,-32768,-32768,  1881,  1881,  1881,
--32768,-32768,-32768,  4607,    97,   947,   951,-32768,-32768,-32768,
--32768,  5960,-32768,   973,   984,-32768,-32768,   682,-32768,   467,
--32768,-32768,-32768,-32768,   126,-32768,-32768,-32768,-32768,  7781,
-  9852,-32768,-32768,-32768,  9852,   978,-32768,  6717,   119,  4618,
--32768,  4618,-32768,  4748,  4748,  4947,   985,-32768,   467,  3414,
--32768,   989,-32768,-32768,  4855,  1705,  1547,  3414,-32768,   467,
--32768,-32768,   467,  1705,-32768,  1065,-32768,-32768,   437,-32768,
-  1998,-32768,  1941,  5099,    72,  1038,   467,-32768,-32768,  1027,
-  1030,  1052,  1033,-32768,-32768,-32768,-32768,   628,-32768,   247,
-   998,  1001,-32768,-32768,  1038,-32768,-32768,   981,-32768,-32768,
-  9680,  9852,   727,  7206,-32768,   287,  7206,-32768,-32768,-32768,
-  9766, 10998, 10998, 10998, 10998, 11083,-32768,-32768,-32768,-32768,
-  1005, 10116, 10116,  7206,  1009,   136,  1013,  1062,  1016,-32768,
--32768,-32768,-32768,  9680,-32768,  7320,  7206,-32768,  9852,  9852,
-  7872,  9852,  9852,  9852,  9852,  9852,  9852,  9852,  9852,  9852,
-  9852,  9852,  9852,  9852,  9852,  9852,  9852,  9852,  9852,  9852,
--32768,  9852,-32768,-32768,-32768,-32768,-32768,  9852,  9852,-32768,
--32768,  6212,   468,   183,  8413,-32768,-32768,-32768,  1071,  1529,
-  1119,   362,   413,   463,  2639,   680,-32768,  1170,  1170,-32768,
-  3651,  1022,  1042,  1090,-32768,-32768,   543,  8963,  1352,-32768,
-  1019,   359,-32768,-32768,  9852,-32768,-32768,-32768,-32768,-32768,
-   266,   490,-32768,-32768,   318,-32768,  3414,  2324,-32768,  1080,
-  1089,-32768,-32768,  2016,   918,-32768,  8145,  8236,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,    61,-32768,  1056,  1044,   582,
-  1075,  1097,  9680,-32768,  1094,-32768,-32768,  1299,  1620,  1124,
-   433,  1101,  1102,-32768,-32768,  1616, 10887,  1616,  3284,  2099,
-  4549,-32768,  1107,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1053,  1068,-32768,  1118,-32768,-32768,   333,-32768,-32768,
--32768,-32768,   106,   328,  1123,  1062,-32768,-32768,-32768,-32768,
-  7112, 11083,-32768,   878,  1073, 11038,-32768,-32768,  1081,-32768,
-  1084,   542,  5731,  1086,-32768,   150,  3420,  1131,  1137,   466,
--32768,-32768,-32768,  4618,  4618,-32768,  4855,-32768,  1138,-32768,
--32768,  1092,   119,-32768,  1705,-32768,-32768,   467,-32768,   522,
-   741,-32768,  1113,-32768,   610,  1149,-32768,-32768,   273,-32768,
--32768,  2023,-32768,   664,   825,-32768,  9852, 10692,-32768, 10692,
-   241,   241,   447,   541,  4866, 10760,  5486,-32768,   156,   241,
-  1145,   467,  6153,-32768,   119,  5039,  9680,  9680,-32768,  9680,
-   119,  5039,-32768,-32768,-32768,-32768,-32768,-32768,  1324,  1324,
-  1324,   318,  1110,  1114,  9331,  1090,  1115,  1117,  1129,  1134,
-  3596,  1140,  1146,  1169,-32768,  1139,-32768,-32768,  1141,-32768,
--32768,  1183,   283,   795,    92,   469,  9852,  1196,-32768,  1202,
-  1151, 11083, 11083,-32768,-32768,  1204,  6378,  6411,  6614, 11008,
-  3061,  3485,  3796,  2854,  2854,  2854,  1373,  1373,  1148,  1148,
-   532,   532,   532,-32768,-32768,  1154,  1160,  1158,  9852,  9766,
--32768,   468,-32768,  7781,  9852,-32768,-32768,-32768,  9852,-32768,
--32768,  1176, 10546,  1166,  1191,  1211,  1234,-32768,  9852,-32768,
-  9852,-32768,  9852,  2254,-32768,  2254,-32768,   162,  1180,  1185,
--32768,  1187, 10998,   119,-32768,   119,  2810,-32768,  5039,  1190,
-  9147,  9147,  5316,  1186,  9938,  1188,  1881,  3529,  3265,  1195,
-  1198,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  9852,  2016,
-  1182,  1089,-32768, 11083,-32768, 11083,  1713,  1199, 10202,-32768,
-  1203,  1249,-32768,   318,-32768,-32768,-32768,-32768,-32768,  1810,
-  6810,-32768, 10998,  9680,  1977,  1977,  4216,-32768,-32768,-32768,
--32768,  2487,-32768,-32768,-32768,   884,  9852,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   333,-32768,   592,-32768,
-   760,   594,  9852,  1252,-32768,   578,   583,   651,  1062,-32768,
-    88,-32768,    84,-32768,-32768,-32768,-32768,-32768,-32768,  9055,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  1137,  1255,-32768,
--32768,-32768, 10998,-32768,-32768,-32768,  1261,-32768,  9766,-32768,
--32768,-32768,-32768,  1602,-32768,  5039, 11083,-32768,   836,-32768,
-   467,   467,-32768,-32768,-32768,-32768,-32768,  5039,   334,   811,
-  9852,  1065,-32768,  1254,-32768,-32768,-32768,   211,   352,  1082,
-   680,   364,   241,  1268,-32768,   556,-32768,-32768,-32768,   467,
--32768,-32768,  8481,-32768,  1226,   318,   318,   318,-32768,  1228,
-   119,  5039,   119,  5039,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1244,  1248,  1257,  1258,  1053,-32768,  6933,
-  7781,  7414,  1233,-32768,  9852,-32768,-32768,-32768,  1253,  1259,
-  1260, 10998,-32768,-32768,  1262,   214,   423,   423,  1265,   423,
--32768,-32768, 10546,  1355,  9680,-32768,  1269,  1275,  1277,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   119,  1280,-32768,
-  1278,-32768,-32768,  3668,-32768,-32768,-32768,-32768,-32768, 11083,
--32768,-32768,  1256,-32768,-32768,   151,  1283,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  2225,  2225,  2666,  2666,  4216,-32768,
-  2487,-32768,  2960, 11105,-32768,-32768,-32768,  1284,-32768,   328,
--32768,  9852,-32768,  9852,-32768,  9852,-32768,  2016,-32768,-32768,
-  6871,  1333,-32768,  7505,-32768,  9239,  9239,  5831,   188,  1287,
-   294,-32768,  7781,  7596,-32768,-32768,   166,  7781,-32768,  1288,
-  1289,  1941,-32768,-32768,-32768,   119,  1290,-32768,  1336,  1336,
-   119,  1301,  9852,  9852,  4666,   467,  5218,   467,   467,  1200,
-   467,  5335,  1336,-32768,-32768,-32768,  1358,-32768,-32768,-32768,
-  1307,-32768,  1310,  9852,  9852,  9852,  9852,  7781,-32768,  1359,
--32768,-32768, 11083,-32768,-32768,-32768,   533,  1260,-32768,-32768,
--32768,-32768,-32768,-32768,  1311,-32768,  1377,   318,-32768,-32768,
--32768,   119,-32768,-32768,-32768,-32768,-32768,-32768,  9852,-32768,
--32768,  2225,  2225,-32768,  2960,-32768,-32768,  1320,  1322,  1323,
-  1337,-32768,   990,   206,  1370,   871,   902,-32768,-32768,-32768,
--32768,-32768,  9852,  1372,  1375,  1376,  9417,   606,  2016,   655,
-   442,-32768,-32768,  9508,  1431,-32768,-32768,-32768,  1382,-32768,
-  5376, 10828,  4008,  6334,-32768,-32768,  1428,-32768,-32768,-32768,
-  8574,-32768,-32768,  1339,   641,-32768,-32768,-32768,-32768, 10998,
--32768,-32768,  7781,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  4666,  4666,-32768,  1336,   545,   915,  9852,-32768,
--32768,-32768,  1065,  1065,  1336,  1336,   628,  1336,-32768,-32768,
-  6555,   119,   119,-32768,-32768,  1341,  1354,  1356,  1360,-32768,
-  7781,  9852,-32768,   533,-32768,-32768,-32768,-32768,   119,  1361,
--32768,-32768,-32768,-32768,  1337,-32768,  2016,-32768,-32768,-32768,
--32768,-32768,-32768,   684,   684,  1062,  1380,  1381,  6461,-32768,
--32768,-32768,-32768,  1417,  9852,  1420,  1419,  1412,  2034,  2055,
--32768,  1062,-32768,-32768,  1394,-32768,-32768,  1065,  1004,-32768,
-  1006,  1065,  9594,  1012,   240,-32768,-32768,-32768,-32768,-32768,
--32768,   360,-32768,-32768,   119,   119,-32768,-32768,-32768,  9852,
-  9852,  4666,   467,   467,-32768,-32768,-32768,-32768,  8327,-32768,
--32768,-32768,-32768,   119,   119,-32768,-32768,-32768,-32768,-32768,
-  1387,-32768,-32768,-32768,  1399,-32768,-32768,-32768,  9766,-32768,
--32768,-32768,  1482,  8870,  7021,  9766,  9852,-32768,  8682,-32768,
-  1442,-32768,-32768,  1447,-32768,  1412,  2034,-32768,-32768,   682,
--32768,-32768, 10288, 10288,  7690,-32768,-32768,  1062,-32768,-32768,
-  4666,  4666,-32768,  1336,  1336,  1404, 10993,  1415,-32768,-32768,
--32768, 10941,-32768,-32768,  1401,   510,  3414,  1062,  8776,-32768,
--32768,    88,-32768,-32768,  1456,  1409, 11061,  8682,-32768,-32768,
--32768,-32768,  1337,    68,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   425,   333,  1418,  1423,  1062,-32768,  1065,-32768,
--32768,-32768,-32768,   693,-32768,  7963,-32768,-32768,-32768,-32768,
-  1337,  1509,  1463,   169,-32768,-32768,-32768,-32768,   467,    88,
--32768,  9852,  1465,-32768,  1468,-32768,  1062,  8682,  1443,   742,
-  1486,-32768,-32768,-32768,   126,-32768,  1477,-32768,  1439,-32768,
--32768,-32768,-32768,  9852,  1509,  1488,  1509,-32768,-32768,-32768,
-  8054,  1445,   754,-32768,-32768,  7781,  1449,-32768,  1538,  1500,
--32768,-32768,-32768,   184,-32768,  8776,  1551,  1503,-32768,-32768,
--32768,  1568,  1569,-32768
+-32768,   739,-32768,-32768,  1057,  3647,   988,-32768,-32768,   762,
+-32768,-32768, 10375, 10461, 10547, 10547,-32768,-32768,-32768,-32768,
+-32768,   777,   801,   810,   818,   824,   343,   541,  9853,  1772,
10547,-32768,-32768, 10547,-32768,-32768, 10547,  7116,-32768, 10547,
  712,   817,-32768, 10547,-32768,  9939,-32768, 11183,   263,  1821,
+  4581, 10025,-32768,   890,  3298,-32768,  1940,  1624,  2321,-32768,
+   335,-32768,  2792,  1755,   712,   712,  9681, 10888,-32768,  1772,
+   804,  1772,-32768,-32768,   813,   859, 11116,   831,   845,   853,
+   900,   645,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   631,   457,   577,  1772,   624,   638,   849,   641,-32768,   909,
+-32768,  2246,   203,   259,-32768,-32768,-32768,-32768,-32768,-32768,
+ 10997,-32768,  5857, 11054,  2230,-32768,   712,   802,-32768,-32768,
+   584,-32768,   891,   903,-32768,-32768,-32768,  2986,-32768,-32768,
+  2986,-32768,   896,-32768,-32768,-32768,  1348,  1348,  1348,-32768,
+-32768,-32768,  4780,   112,   899,   901,-32768,-32768,-32768,-32768,
+ 10888,-32768,  1062,  1102,-32768,-32768,   688,-32768,   523,-32768,
+-32768,-32768,-32768,   115,-32768,-32768,-32768,-32768,  7574,  9853,
+-32768,-32768,-32768,  9853,   916,-32768,  6915,   101,  4970,-32768,
+  4970,-32768,  5273,  5273,  5138,   923,-32768,   523,  5857,-32768,
+   918,-32768,-32768,  5303,  2418,   938,  5857,-32768,   523,-32768,
+-32768,   523,  2418,-32768,  1022,-32768,-32768,   455,-32768,  1277,
+-32768,-32768,-32768,  5647,   100,  1057,   523,-32768,-32768,   973,
+   980,  1007,   998,-32768,-32768,-32768,-32768,   753,-32768,   394,
+   958,   963,-32768,-32768,  1057,-32768,-32768,   661,-32768,-32768,
+  9681,  9853,   762,  7116,-32768,   449,  7116,-32768,-32768,-32768,
+  9767,  4022,  4022,  4022,  4022, 11161,-32768,-32768,-32768,-32768,
+   979, 10117, 10117,  7116,   983,   168,   987,  1042,  1006,-32768,
+-32768,-32768,-32768,  9681,-32768,  6244,  7116,-32768,  9853,  9853,
+  7665,  9853,  9853,  9853,  9853,  9853,  9853,  9853,  9853,  9853,
+  9853,  9853,  9853,  9853,  9853,  9853,  9853,  9853,  9853,  9853,
+-32768,  9853,-32768,-32768,-32768,-32768,-32768,  9853,  9853,-32768,
+-32768,   886,   378,   524,  8274,-32768,-32768,-32768,  1064,  1215,
+  1108,   499,   578,   587,  2940,   877,-32768,  2114,  2114,-32768,
+  5068,  1019,  1061,  1109,-32768,-32768,   565,  8964,  1214,-32768,
+   995,   800,-32768,-32768,  9853,-32768,-32768,-32768,-32768,-32768,
+   355,   527,-32768,-32768,   712,-32768,  5857,  2362,-32768,  1099,
+  1118,-32768,-32768,  1772,   849,-32768,  8006,  8097,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   137,-32768,  1090,  1081,   645,
+  2246,  1140,  9681,-32768,  1145,-32768,-32768,  1418,  1440,  1164,
+   395,  1143,  1148,-32768,-32768,  2103, 10943,  2103,  4337,   331,
+  3702,-32768,  1158,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1117,  1119,-32768,  1168,-32768,-32768,   391,-32768,-32768,
+-32768,-32768,   116,   318,  1167,  1042,-32768,-32768,-32768,-32768,
+  7006, 11161,-32768,   859,  1126, 11116,-32768,-32768,  1127,-32768,
+  1128,   384,  6051,  1130,-32768,   314,  5716,  1175,  1177,   607,
+-32768,-32768,-32768,  4970,  4970,-32768,  5303,-32768,  1179,-32768,
+-32768,  1134,   101,-32768,  2418,-32768,-32768,   523,-32768,  2778,
+-32768,   921,   456,-32768,  9853, 10693,-32768, 10693,   121,   121,
+   177,   665,  3193, 10761,  8342,-32768,   169,   121,  1182,   523,
+  8412,-32768,   101,  6183,  9681,  9681,-32768,  9681,   101,  6183,
+-32768,-32768,-32768,-32768,-32768,-32768,   699,   699,   699,   712,
+  1149,  1151,  9332,  1109,  1152,  1155,  1157,  1194,  2848,  1199,
+  1202,  1204,-32768,  1178,-32768,-32768,  1185,-32768,-32768,  1228,
+   620,   791,    66,    96,  9853,  1235,-32768,  1239,  1196, 11161,
+ 11161,-32768,-32768,  1248,  3488,  6078,  4671,  6829, 11090,  6609,
+  4141,  2007,  2007,  2007,  2386,  2386,   941,   941,   748,   748,
+   748,-32768,-32768,  1198,  1203,  1206,  9853,  9767,-32768,   378,
+-32768,  7574,  9853,-32768,-32768,-32768,  9853,-32768,-32768,  1219,
+ 10547,  1207,  1227,  1246,  1281,-32768,  9853,-32768,  9853,-32768,
+  9853,  2551,-32768,  2551,-32768,    82,  1221,  1222,-32768,  1229,
+  4022,   101,-32768,   101,  3146,-32768,  6183,  1232,  9148,  9148,
+  6469,  1230,  9939,  1231,  1348,  2216,  1755,  1072,  1238,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  9853,  1772,  1236,  1118,
+-32768, 11161,-32768, 11161,   900,  1245, 10203,-32768,  1243,  1287,
+-32768,   712,-32768,-32768,-32768,-32768,-32768,  1968, 10997,-32768,
+  4022,  9681,  2122,  2122,  5193,-32768,-32768,-32768,-32768,  1359,
+-32768,-32768,-32768,   932,  9853,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   391,-32768,   631,   457,   577,-32768,
+   624,   638,  9853,  1296,-32768,   668,   641,   682,   705,  1813,
+  1042,-32768,    78,-32768,   155,-32768,-32768,-32768,-32768,-32768,
+-32768,  9056,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1177,
+  1295,-32768,-32768,-32768,  4022,-32768,-32768,-32768,  1297,-32768,
+  1267,-32768,  1307,-32768,-32768,   106,-32768,-32768,-32768,  6183,
+ 11161,-32768,  1692,-32768,   523,   523,-32768,-32768,-32768,-32768,
+-32768,  6183,   496,   904,  9853,  1022,-32768,  1310,-32768,-32768,
+-32768,   224,   586,   409,   877,   772,   121,  1311,-32768,   816,
+-32768,-32768,-32768,   523,-32768,-32768,  8482,-32768,  1263,   712,
+   712,   712,-32768,  1268,   101,  6183,   101,  6183,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1284,  1288,  1291,
+  1292,  1117,-32768, 11049,  7574,  7207,  1271,-32768,  9853,-32768,
+-32768,-32768,  1282,  1285,  1286,  4022,-32768,-32768,  1290,   212,
+  1777,  1777,  1279,  1777,-32768,-32768, 10547,  1387,  9681,-32768,
+  1293,  1298,  1303,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   101,  1304,-32768,  1306,-32768,-32768,  2930,-32768,-32768,
+-32768,-32768,-32768, 11161,-32768,-32768,  1294,-32768,-32768,   173,
+  1312,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  3044,  3044,
+  3592,  3592,  5193,-32768,  1359,-32768,  4042, 11183,-32768,-32768,
+-32768,  1317,-32768,   318,-32768,  9853,-32768,  9853,-32768,  9853,
+-32768,  1772,-32768,-32768,  6696,  1363,-32768,  7298,-32768,  9240,
+  9240,  6804,   196,  1318,   400,-32768,  7574,  7389,-32768,-32768,
+   188,  7574,-32768,-32768,  9767,-32768,-32768,-32768,-32768,  1595,
+   101,  1321,-32768,  1350,  1350,   101,  1325,  9853,  9853,  4694,
+   523,  4333,   523,   523,  1094,   523,  5812,  1350,-32768,-32768,
+-32768,  1380,-32768,-32768,-32768,  1329,-32768,  1332,  9853,  9853,
+  9853,  9853,  7574,-32768,  1389,-32768,-32768, 11161,-32768,-32768,
+-32768,   521,  1286,-32768,-32768,-32768,-32768,-32768,-32768,  1331,
+-32768,  1402,   712,-32768,-32768,-32768,   101,-32768,-32768,-32768,
+-32768,-32768,-32768,  9853,-32768,-32768,  3044,  3044,-32768,  4042,
+-32768,-32768,  1344,  1345,  1349,  1360,-32768,  1106,   241,  1400,
+  1049,  1093,-32768,-32768,-32768,-32768,-32768,  9853,  1401,  1405,
+  1417,  9418,   376,  1772,   347,   502,-32768,-32768,  9509,  1455,
+-32768,-32768,-32768,  1419,-32768,  5314, 10829,  3813,  6585,-32768,
+-32768,  1462,-32768,-32768,-32768,  8575,-32768,-32768,  1373,   608,
+-32768,-32768,-32768,-32768,  4022,-32768,-32768,  7574,  1375,  1381,
+  2778,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  4694,  4694,-32768,  1350,   614,  1122,  9853,-32768,-32768,-32768,
+  1022,  1022,  1350,  1350,   753,  1350,-32768,-32768,  6341,   101,
+   101,-32768,-32768,  1383,  1385,  1391,  1399,-32768,  7574,  9853,
+-32768,   521,-32768,-32768,-32768,-32768,   101,  1407,-32768,-32768,
+-32768,-32768,  1360,-32768,  1772,-32768,-32768,-32768,-32768,-32768,
+-32768,   754,   754,  1042,  1395,  1424,  3882,-32768,-32768,-32768,
+-32768,  1450,  9853,  1459,  1460,  1472,  1879,  1890,-32768,  1042,
+-32768,-32768,  1439,-32768,-32768,  1022,  1113,-32768,  1133,  1022,
+  9595,  1156,   248,-32768,-32768,-32768,-32768,-32768,-32768,   514,
+-32768,-32768,-32768,-32768,-32768,   101,   101,-32768,-32768,-32768,
+  9853,  9853,  4694,   523,   523,-32768,-32768,-32768,-32768,  8188,
+-32768,-32768,-32768,-32768,   101,   101,-32768,-32768,-32768,-32768,
+-32768,  1431,-32768,-32768,-32768,  1453,-32768,-32768,-32768,  9767,
+-32768,-32768,-32768,  1526,  8871,  4910,  9767,  9853,-32768,  8683,
+-32768,  1489,-32768,-32768,  1496,-32768,  1472,  1879,-32768,-32768,
+   688,-32768,-32768, 10289, 10289,  7483,-32768,-32768,  1042,-32768,
+-32768,  4694,  4694,-32768,  1350,  1350,  1444, 11071,  1457,-32768,
+-32768,-32768, 11010,-32768,-32768,  1447,   591,  5857,  1042,  8777,
+-32768,-32768,    78,-32768,-32768,  1492,  1454, 11139,  8683,-32768,
+-32768,-32768,-32768,  1360,    97,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   478,   391,  1458,  1461,  1042,-32768,  1022,
+-32768,-32768,-32768,-32768,   769,-32768,  7756,-32768,-32768,-32768,
+-32768,  1360,  1550,  1507,   179,-32768,-32768,-32768,-32768,   523,
+    78,-32768,  9853,  1513,-32768,  1516,-32768,  1042,  8683,  1484,
+   760,  1520,-32768,-32768,-32768,   115,-32768,  1524,-32768,  1483,
+-32768,-32768,-32768,-32768,  9853,  1550,  1530,  1550,-32768,-32768,
+-32768,  7847,  1485,   778,-32768,-32768,  7574,  1493,-32768,  1569,
+  1532,-32768,-32768,-32768,   189,-32768,  8777,  1591,  1544,-32768,
+-32768,-32768,  1605,  1606,-32768
 };
 
 static const short yypgoto[] = {-32768,
-  1572,-32768,  -314,  1403,  -401,    39,     2,  1574,-32768,  1542,
--32768,-32768,   120,-32768,   252,-32768,   486,-32768,   191,   908,
-    57,     9,-32768,-32768,  -614,-32768,-32768,   643,    64,  1426,
-  1161,  1437,  -697,    67,  -172,    20,   -35,-32768,-32768,-32768,
--32768,-32768,   822,-32768,-32768,-32768,-32768,-32768,-32768,   434,
-  1848,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1517,  -626,  6173,   -70,  -491,    74,   -73,  1490,
-  -541,-32768,   363,-32768,   221,-32768, -1357,-32768, -1384,    15,
--32768,  2213,  1279,  -255,   385,  -529,-32768,  -830,  3900,  1424,
-  1207,  4286,  1335,  -328,   -56,   -79,  1613,  -147,   -51,     0,
--32768,-32768,-32768,  -330,-32768,  -160,-32768,-32768, -1213,   -39,
-  -334,  3372,    83,  1441,  -148,    65,    31,  -201,    -4,  -120,
-  -168,  -165,    25,    66,    46,-32768,  -350,-32768,-32768,-32768,
--32768,-32768,    -5,  1208,   -30,-32768,   698,-32768,-32768,  -952,
-  -413,   919,-32768,-32768,-32768,-32768,-32768,    80,-32768,-32768,
--32768,-32768,-32768,   707,  -366,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1400,-32768,   443,   620,-32768,-32768,-32768,-32768,
--32768,   855,  -695,-32768,-32768,-32768,-32768,-32768,-32768,   863,
--32768,   428,   997,   722,  1051,  2738,    10,    60,  -454,  1454,
-  1818,  -473,-32768,     7,-32768,    17,  1406,  -146,    96,   -76,
-  4791,  1315,-32768,  5548,  2440,  1788,   -18,  -106,-32768,  1540,
-   -59,-32768,  4983,  3380,  -219,-32768,  2934,-32768,-32768,   348,
--32768,-32768,   483,    81,  -421,-32768,-32768,-32768,-32768, -1354,
--32768, -1225, -1396,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   105,-32768,-32768,
--32768,-32768,-32768,   138, -1310,-32768,-32768,   -24,-32768,-32768,
--32768,-32768, -1373,    90,-32768,    82,-32768,  -691,  -565,   681,
--32768,-32768,-32768,-32768,  -378,-32768,  -376,  -185,-32768,  1735,
-   358,-32768,   195,-32768,  -239
+  1608,-32768,  -321,  1441,  -379,    83,     7,  1607,-32768,  1575,
+-32768,-32768,   348,-32768,   423,-32768,   480,-32768,   206,   945,
+    57,     5,-32768,-32768,  -629,-32768,-32768,   681,    59,  1465,
+  1181,  1466,  -705,    79,  -172,    23,    40,-32768,-32768,-32768,
+-32768,-32768,   852,-32768,-32768,-32768,-32768,-32768,-32768,   466,
+  2100,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1545,  -614,  5775,   -55,  -535,   -49,   -63,  1501,
+  -518,-32768,   365,-32768,   250,-32768, -1375,-32768, -1306,    30,
+-32768,  2949,  1841,  -282,   407,  -544,-32768,  -816,  3540,   783,
+  1482,  4109,  1355,  -330,   -66,   -85,    49,  -139,   -54,     6,
+-32768,-32768,-32768,  -341,-32768,  -160,-32768,-32768, -1210,    50,
+  -328,  1691,   149,   747,  -145,    10,    58,  -203,    -4,  -122,
+  -167,  -169,    14,   -10,   323,-32768,  -353,-32768,-32768,-32768,
+-32768,-32768,   592,  1237,    55,-32768,   736,-32768,-32768, -1098,
+  -443,   935,-32768,-32768,-32768,-32768,-32768,   221,-32768,-32768,
+-32768,-32768,-32768,   743,  -364,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1425,-32768,   328,   468,-32768,-32768,-32768,
+-32768,-32768,   892,  -697,-32768,-32768,-32768,-32768,-32768,-32768,
+   898,-32768,   459,  1025,   766,  1083,  2985,    28,    31,  -453,
+  1487,  1849,  -681,-32768,    41,-32768,  1256,  1077,  -146,    17,
+   -99,  4676,  1343,-32768,  5050,  2478,   109,   -18,  -114,-32768,
+  1566,   -52,-32768,  4867,  3296,  -120,-32768,  2722,-32768,-32768,
+   382,-32768,-32768,   525,   107,  -324,-32768,-32768,-32768,-32768,
+ -1380,-32768, -1218, -1399,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   134,-32768,
+-32768,-32768,-32768,-32768,   171, -1308,-32768,-32768,   -43,-32768,
+-32768,-32768,-32768, -1395,   111,-32768,   104,-32768,  -580,  -598,
+   709,-32768,-32768,-32768,-32768,  -386,-32768,  -382,  -467,-32768,
+  2023,   388,-32768,   346,-32768,  -232
 };
 
 
-#define        YYLAST          11189
+#define        YYLAST          11267
 
 
 static const short yytable[] = {    59,
-   435,   443,   420,   423,   122,    36,   444,   487,   432,   253,
-   445,   513,    42,    72,   629,   196,   356,   989,   357,   392,
-   103,   208,   831,   692,   639,   693,   638,   752,   256,   770,
-    59,   224,   155,   719,    58,   690,    36,    59,   708,   141,
-   146,  1103,    35,    42,    72,   506,   723,   147,   535,   538,
-    42,    72,   209,   398,   399,   900,   503,   400,   669,   298,
-   486,   174,   900,   408,   391,    58,   177,   247,    57,   494,
-   971,   870,    58,    35,  1466,   965,   397,  1521,   607,   296,
-   169,   568,  1028,   349,  1030,   349,    55,   349,  1428,   260,
-  1413,  1057,   256,   297,   525,  1431,   492,   495,   170,    57,
-   403,  1525,   349,   349,  1065,   171,   176,   607,   791,   224,
-  1070,   182,   364,   190,   295,   642,   607,    55,  1526,   937,
-  1178,   178,  1553,    38,   175,   224,   716,   516,   158,  1562,
-   163,   406,   349,    -1,   349,   196,   829,  1555,   221,   757,
-   208,   249,  1184,  1535,   467,    72,    -2,   525,   155,   155,
-   155,   256,   923,  -143,    38,   452,   794,   411,   419,   422,
-    59,  1002,   413,  1550,    59,   137,    58,   902,   938,  1584,
-   164,   209,    86,   997,    72,  1563,   449,    42,    72,   740,
-   792,   224,   591,   717,   440,  1588,   127,   128,   174,   224,
-   468,   520,  1185,   177,   155,    58,  1179,    88,  1576,    58,
-   405,   816,   470,   472,   705,   224,   972,   169,  1003,  1269,
-   147,  1004,  -354,   978,   190,  1058,   453,  1129,   404,  1553,
-   998,    87,  1592,   999,  1330,   170,  -354,  1607,   592,    57,
-   453,   514,   171,   176,  -300,  -363,    26,    15,   130,   131,
-   987,    93,  1617,  -293,   158,   158,   158,    55,   178,   454,
-  1466,   175,   877,  1529,   260,    39,  1339,  1340,  1270,   190,
-   617,  1523,   878,   454,  1059,  1389,   613,    15,  -363,   830,
-  1360,  -413,  -363,  1331,   591,   517,   879,   515,   490,  1022,
-  -300,  -300,    94,   634,   645,   107,    39,   713,   221,   612,
-   158,  1618,   247,   805,   990,  -293,   221,   221,  1136,  1389,
-  -413,  1139,  1560,   308,  -413,  -363,   815,   976,   977,  1023,
-   639,   239,   374,   950,  1390,   240,   677,   604,   375,    26,
-   592,  1250,   108,   646,   349,   672,   221,   420,   423,   635,
-   979,   760,   761,   617,  1207,  1151,    89,   296,   755,   806,
-  -623,  1102,  1165,  1166,  -141,   247,  1212,   900,  1497,  -413,
-   508,   297,  1593,   349,   648,   941,    90,    91,   692,   109,
-  1008,   260,     8,     9,   695,   492,   495,  1057,    72,   135,
-   513,  -581,   295,   492,   980,   221,  -364,    92,    15,   815,
-  1231,    26,  1233,   981,   982,   495,  -623,  -623,  -120,    58,
-    15,   900,   561,  1439,   562,  1213,   509,   689,   629,   137,
-   209,  -623,  1445,  1446,   495,  1447,  -302,    88,   888,  -364,
-   680,   691,  1154,  -364,   130,   131,  1373,  -581,   189,   224,
-   983,  -120,   161,   405,   162,  -120,   127,   128,   221,   643,
-   644,   516,   688,   784,   900,   700,    89,    59,   701,   179,
-   608,   647,   300,   394,   395,    10,  -364,   609,   459,   183,
-   704,    72,  -302,  -302,   889,  1131,    90,   812,  -120,   890,
-  1104,   710,   224,   733,   187,   460,   177,  -296,   781,   366,
-   370,  1033,    58,   155,   155,   155,    26,   691,   130,   131,
-    21,   698,   699,   744,   745,   221,   411,   610,   413,    40,
-   188,   951,   877,    26,   461,    27,   319,    18,   688,    59,
-  -581,   517,   878,  1411,  1034,   891,   176,   952,  1035,   892,
-  1266,  1267,  1012,    72,   873,   137,   879,   215,   216,   242,
-    40,   178,   138,    14,   175,   750,   349,   611,    91,   349,
-  -144,   874,   349,   756,    58,   975,   349,   821,   821,   821,
-   821,  1036,   778,  1462,   138,    20,  -581,   482,    92,   349,
-   770,  1538,  1539,   997,    23,   893,   617,   244,  1013,   349,
-   875,   758,   349,   299,   139,   221,   221,  1177,   786,   158,
-   158,   158,   692,   221,   693,   377,  1018,   604,  1020,   873,
-  -118,   138,    15,  1024,   690,   221,   785,  1037,   639,   908,
-   638,   127,   128,   900,   677,    90,   874,   296,   946,   944,
-   998,   947,   815,   999,   221,  -826,  1440,   926,    95,   110,
-   111,   297,   360,  -118,   589,   590,   689,  -118,    88,   525,
-     8,     9,   900,   733,  1171,   875,  1372,   894,   896,  1173,
-   691,   129,   295,  1038,   492,   909,   910,   691,   260,   564,
-   372,    26,   362,   130,   131,   376,   958,   380,   963,   964,
-  -118,   688,  -302,   127,   128,   561,  1255,   562,   688,   568,
-   122,   112,   113,   381,   363,   392,  -293,  -302,   349,   401,
-  1172,  -302,   130,   131,   803,  1174,   425,  1239,  1241,   642,
-   189,    91,   209,   127,   128,  1405,   247,  -302,   127,   128,
-    -7,   555,   303,   964,   164,   988,   987,  1175,   129,  -302,
-  -302,    92,  -302,    26,  -302,   130,   131,   784,    26,   784,
-  1025,  1408,   116,   117,   118,   784,   784,    91,   924,   526,
-   804,   433,   784,  1066,  1067,  -618,  1068,   221,   770,   527,
-  1468,   617,   689,  -302,  -302,   130,   131,    92,    26,  1571,
-   130,   131,   781,  1176,   781,  1043,   691,   447,  -302,  1042,
-  1052,   781,  1017,   448,   618,   451,  1026,   781,   222,   223,
-   700,   701,   463,   704,   619,   119,   120,   688,   221,   432,
-  1241,   816,   464,    59,   620,    59,  1469,   621,   622,  1326,
-  1328,   209,    59,   521,  1332,  1572,  1062,    72,    59,    72,
-   522,   689,   349,   349,   378,   349,    72,   689,   523,    95,
-   110,   111,    72,  1595,  1167,   691,     8,   518,    58,   524,
-    58,   691,   221,   379,    92,  1609,   778,    58,   778,   532,
-   116,   117,   118,    58,  1370,   778,   688,   727,   127,   128,
-   541,   778,   688,   137,   221,  1202,  1203,  1204,  1039,  1040,
-     9,    10,   786,   542,   786,   543,  1031,  1032,    91,  1596,
-   363,   786,   112,   113,   114,  1060,  -142,   786,   130,   131,
-   785,  1610,  1029,   544,    89,   349,  1585,   593,    92,   785,
-  1106,    26,  1214,   119,   120,   785,    21,   545,    26,   607,
-   130,   131,   519,   653,    90,  1078,   224,  1251,  1252,    26,
-  1254,    27,    28,   222,   446,  1208,   555,  1041,   821,   555,
-   221,   127,   128,   818,   689,   193,   594,   595,   733,   564,
-   256,   596,   597,   598,   599,   194,   555,   656,   691,  1434,
-   894,   896,   691,    32,    89,   260,   480,   481,   195,   555,
-   127,   128,  1392,   845,   215,   216,   657,    15,   659,   688,
-    14,  -413,   -52,   688,    90,   363,   689,   -52,   821,   349,
-   488,   489,   689,   130,   131,    91,   155,  1460,   -52,   680,
-   691,   868,    20,  1393,  1155,  1156,   691,   884,    89,  -413,
-  -413,    23,   147,   617,  1472,    92,  1441,   519,   816,   253,
-    26,   688,   130,   131,   127,   128,   660,   688,    90,  1043,
-  1489,   673,   784,  1042,   661,   733,   618,  -181,   256,   155,
-   214,   215,   216,  1075,  1076,  1077,   619,    14,   821,   691,
-   420,   423,   137,  -181,   349,  -181,   620,  1150,   674,   628,
-   622,   689,     8,     9,    18,  1209,  1210,   781,   363,    20,
-   688,   480,   711,   689,    90,   691,   130,   131,    23,   420,
-   423,  1258,   488,   712,    92,   215,   216,   691,  1387,  1388,
-   702,    14,   158,   696,  1223,    -6,   688,    15,    59,   706,
-   252,  -413,   480,  1491,   488,  1492,   363,   689,   688,   689,
-   480,  1496,    72,    20,   130,   131,  1472,   300,   394,   395,
-    10,   691,    23,   691,     7,     8,   250,    10,   728,  -413,
-  -413,    15,   746,    58,  -413,   158,  1472,   821,   252,   751,
-   797,   778,   688,   798,   688,   799,   800,  1216,   807,   256,
-   349,   808,   825,  1218,  1219,    21,   827,  1216,  1221,   717,
-   828,  1219,    21,   830,   885,  1568,   887,   786,    26,   251,
-    27,   319,   901,   692,   903,  1546,   905,    27,    28,  1226,
-  1227,  1228,  1419,   929,  1424,   785,  1421,   930,   939,   520,
-   943,   988,   940,   945,   689,  1472,   155,   155,   155,    20,
-  -296,   252,    32,   719,   953,   954,  1272,  1273,   691,    32,
-   967,   411,   413,   127,   128,   973,  1313,   974,    13,   517,
-   994,   816,  1305,   733,   453,   155,   155,   155,   995,   688,
-    72,   996,  1611,  1001,  -825,  1272,  1273,   691,     8,     9,
-  1010,  1014,  1015,   127,  1357,  1019,  1061,  1021,  1084,  1345,
-  1346,    58,  1355,  1356,  1085,  1358,   617,  1079,   688,  1304,
-  1086,  1080,  1081,    26,  1082,   130,   131,   586,   587,   588,
-   589,   590,   300,   394,   395,    10,  1083,   140,   140,   618,
-   156,  1109,   363,  1087,  -140,  1312,  1088,   363,  1089,   619,
-   130,   131,   158,   158,   158,   130,   131,  1091,  1094,   620,
-  1092,  1096,   621,   622,   212,  1095,   220,  1097,  1098,  1111,
-    21,  1418,   236,  1418,   519,   555,  1113,   251,  1114,   519,
-  1116,   158,   158,   158,  1115,    27,   319,  1122,   700,   701,
-  1142,   704,  1123,  1132,   339,  1133,   339,  1124,   339,  1313,
-  1130,   300,   394,   395,    10,  1135,  1145,   209,  1149,  1313,
-  1170,  1148,  1217,    72,   525,  1305,  1313,    32,  1193,    95,
-    96,    97,  1305,    72,  1199,   821,  1222,   127,   128,  1534,
-    72,  1377,   516,  1225,    58,  1229,  1234,  1437,  1438,    21,
-  1235,  1242,  1304,   339,    58,   339,   420,   423,   140,  1236,
-  1237,    58,  1304,   140,    27,   319,   156,   156,   156,  1304,
-  -577,  1244,  1257,  -577,  1268,  1178,  1245,  1246,  1312,  1249,
-    26,  1565,    98,    99,   100,  1253,  1259,    26,  1312,   130,
-   131,  1200,  1260,   212,  1261,  1312,    32,  1264,  1265,   450,
-  1271,  1276,   221,   526,  1325,  1334,  1335,  1338,   905,   460,
-   140,   140,   156,   527,     7,   127,   128,    10,  1342,    76,
-  -577,  -660,  -577,  -577,  1364,  -577,   220,  1365,  1443,  1444,
-  1371,  1375,   155,  1376,   493,   220,  -577,  1381,  -577,  1382,
-  1383,  1391,  1384,  1400,  1401,  1402,  1503,  1504,  1505,  1414,
-    76,  1416,    21,  1429,  -577,  -577,  1432,    76,  1456,   251,
-   584,   585,   586,   587,   588,   589,   590,    27,    28,  -577,
-   201,  1457,   213,  1458,  1516,  1483,   140,  1459,  1464,  1313,
-  1313,  1516,  1475,  1476,  1313,  1305,  1480,  1549,   297,  1482,
-  1305,   252,   375,    72,    72,   297,  1490,   490,    72,    32,
-   349,  1512,   155,   155,   155,  1536,  1537,  1511,  1520,   295,
-  1531,  1530,   744,   745,    58,    58,   295,   689,  1548,    58,
-  1540,  1542,  1304,  1304,  1313,  1557,  1558,  1304,   158,  1579,
-  1305,   691,  1583,  1313,  1590,  1566,   546,  1591,    72,  1305,
-  1567,    95,   110,   111,   510,  1594,   156,    72,  1312,  1312,
-  1599,   407,   688,  1312,  1597,   410,  1600,  1604,  1613,    58,
-   555,  1516,  1608,   214,   215,   216,  1612,  1304,    58,  1615,
-    14,  1620,  1621,  1587,   339,   297,  1304,  1623,  1624,    21,
-    76,     1,   442,  1313,    76,     5,   160,    18,   942,  1305,
-   201,   213,    20,  1312,   112,   113,   295,    72,   158,   158,
-   158,    23,  1312,  1152,   441,   221,  1366,  1367,  1368,  1369,
-  1487,   439,   709,  1277,   116,   760,   761,  1053,    58,  1564,
-   359,  1313,   212,   220,  1569,  1471,  1304,  1305,     7,     8,
-     9,    10,   382,   383,   384,    72,   140,   201,   409,   140,
-  1619,   763,  1374,   531,  1144,   156,   156,   156,  1143,   993,
-   502,   140,  1312,  1205,  1336,   153,    58,  1063,  1055,  1359,
-   932,  1141,   872,   483,  1304,    26,    21,   119,   120,  1404,
-   614,  1427,   617,   390,  1322,  1598,   722,   726,  1586,    26,
-  1561,    27,    28,    26,   726,   386,   387,   140,  1605,   140,
-  1312,   156,   156,   156,  1603,   955,   450,  1433,  1192,    95,
-   414,   415,   140,   493,   220,   956,     0,   450,     0,     0,
-     0,   493,     0,    32,     0,   620,     0,     0,   957,   622,
-     0,   491,   215,   216,   450,    95,   110,   111,    14,   662,
-   663,   664,     0,     0,     0,     0,     0,     0,     0,   539,
-   540,     0,     0,     0,  1461,    18,     0,   339,   726,   725,
-    20,   156,    98,   113,   156,   548,   731,     0,   549,    23,
-     0,   550,     0,     0,   560,     0,     0,     0,   565,   156,
-   156,   156,   421,   424,   649,     0,   606,  1481,   112,   113,
-   339,     0,   722,     0,   156,   842,   843,     0,   847,   848,
-   849,   850,   851,   852,   853,   854,   855,   856,   857,   858,
-   859,   860,   861,   862,   863,   864,   865,     0,   726,     0,
-     0,     0,     0,     0,   726,     0,     0,   153,     0,   201,
-   813,     0,    95,   110,   111,     0,   225,   226,   227,     0,
-     0,     0,     0,     0,    95,    96,    97,     0,     0,     0,
-     0,  1514,     0,     0,   726,   917,     0,   845,  1514,     0,
-    18,   726,   686,     0,     0,   228,     0,    76,     0,     8,
-     9,     0,     0,    12,   246,   220,     0,   555,     0,    14,
-     0,   101,     0,   934,   936,   112,   113,   258,     0,   115,
-   866,     0,     0,    16,     0,    17,   867,    98,    99,   339,
-     0,    20,     0,   300,     0,   201,    10,     0,     0,     0,
-    23,   258,   617,   201,   212,     0,   220,   236,     0,    26,
-     0,   130,   131,     0,   300,     8,     9,    10,   686,   790,
-     0,    18,   233,   921,     0,   618,     0,     0,  1514,     0,
-   258,    21,     0,     0,     0,   619,     0,   722,     0,     0,
-     0,   258,     0,     0,  1589,   620,   426,   427,   621,   622,
-   220,   557,    21,   116,   760,   761,     0,   762,     0,   251,
-   428,   140,   140,     0,   140,     0,  1602,    27,   319,     0,
-   429,     0,   493,   845,     0,   450,     0,     0,    32,     0,
-   763,   388,     0,   430,     0,   548,   549,   764,     0,     7,
-     8,     9,    10,  1027,     0,    13,   382,   383,   384,    32,
-   258,     0,     0,   212,    26,   416,   119,   120,     0,   450,
-    95,    96,    97,   339,   339,     0,   339,    18,     0,     0,
-   471,   473,   477,     0,     0,     0,     0,    21,    95,   110,
-   111,   726,   156,   617,   258,   116,   760,   761,     0,     0,
-    26,   385,    27,    28,     0,     0,    95,   110,   111,   386,
-   387,   421,   703,  1090,     0,   363,   955,     0,     0,   258,
-     0,     0,   201,    98,    99,     0,   956,    95,   110,   111,
-     0,   686,     0,     0,    32,     0,   620,     0,   686,   957,
-   622,   112,   113,     0,     0,   726,   726,     0,   119,   120,
-   722,   726,     0,     0,   498,   500,     0,   421,   424,   112,
-  1484,   201,   961,   201,   201,   726,     0,   726,   511,   726,
-     0,    95,    96,    97,     0,   225,   226,   227,     0,     0,
-   112,  1486,     0,     0,     0,     0,     0,     0,   156,   156,
-   917,     0,     0,     0,     0,     0,     0,     0,     0,    18,
-     0,     0,     0,     0,   228,  1140,     0,     0,   201,     0,
-     0,   258,  1006,     0,     0,   726,   557,  1099,  1100,   557,
-     0,     0,    26,  1105,    98,    99,   229,   236,     0,     0,
-   339,     0,   140,   140,   917,   421,   826,  1117,   547,  1118,
-     0,  1119,     0,  1164,     0,     0,     0,   686,     0,   557,
-     0,     0,     0,   790,     0,   790,     0,     0,     0,   726,
-  1049,  1056,   790,     0,     0,     0,     0,     0,   790,   258,
-     0,   230,   231,   232,     0,     0,   726,   917,     0,     0,
-   655,     0,     0,     0,     0,     0,     0,  1147,     0,   665,
-     0,     0,     0,     0,     0,     0,     0,     7,     8,     9,
-    10,     0,   655,   246,     0,     0,   686,     0,   450,   450,
-   916,     0,   686,     0,     0,     0,     0,  1215,     0,     0,
-     0,     0,     0,     0,     0,    18,     0,   127,   128,     0,
-     0,  1168,   246,     0,     0,    21,     0,   450,     0,     0,
-     0,   617,     0,     0,     0,     0,     0,     0,    26,     0,
-    27,    28,     0,     0,     0,     0,     0,   742,   258,   743,
-     0,   471,   473,   477,   955,     0,     0,   722,   722,     0,
-   617,  1243,   754,     0,   956,     0,  1112,    26,     0,   130,
-   131,     0,    32,     0,   620,   258,     0,   957,   622,     0,
-     0,   339,     0,   618,     0,     0,     0,     0,     0,     0,
-   214,   215,   216,   619,   548,   549,     0,    14,     0,     0,
-     0,     0,     0,   620,     0,     0,   621,   622,   759,   686,
-     0,     0,     0,   686,    18,     0,     0,     0,     0,    20,
-     0,     0,   140,   140,   156,   156,   917,     0,    23,     0,
-   140,     0,     0,     0,     0,     0,     0,     0,   726,     0,
-   726,     0,   726,   927,     0,     0,     0,     0,     0,     0,
-   722,   686,     0,   156,   156,   917,     0,   686,     0,   722,
-   722,     0,   258,     0,   722,     0,     8,     9,     0,     0,
-    12,    13,     0,   838,     0,     0,    14,     0,   258,  1343,
-  1344,     0,   450,   450,     0,   450,   450,   916,   450,     0,
-    16,     0,    17,     0,  1049,     0,     0,     0,    20,     0,
-   686,     0,     0,    80,   722,     0,     0,    23,     0,     0,
-  1278,     0,  1279,   104,  1280,     0,    26,   886,   130,   131,
-   600,     0,     0,   133,     0,     0,   686,     0,   790,   144,
-   144,     0,   144,     0,    80,   726,     0,     0,   686,   140,
-   140,    80,   140,     0,     0,     0,     0,  1016,     0,     7,
-     8,     9,    10,     0,   203,   601,    80,     0,     0,  1399,
-     0,     0,     0,     0,   237,     0,     0,     0,     0,     0,
-     0,   104,   686,     0,   686,     0,     0,     0,     0,   212,
-   220,     0,   262,   104,   421,   826,   949,    21,     0,  1064,
-     0,     0,     0,     0,   251,  1069,  1256,   966,     0,   722,
-     0,     0,    27,    28,     0,   104,     0,  1380,     0,     0,
-   450,   450,     0,     0,     0,  1442,     0,     0,     0,     0,
-     0,   742,   743,     0,   754,     0,   252,     0,   838,   153,
-     0,     0,     0,   133,    32,    80,     0,   722,     0,   144,
-   144,     0,     0,     0,   412,   144,     0,     0,   144,   144,
-   144,     0,     0,     0,     0,     0,     0,     0,     0,   686,
-     0,     0,  1048,     0,    80,     0,     0,     0,    80,   548,
-   549,     0,  1190,     0,   203,    80,     0,     0,     0,     0,
-     0,     0,  1354,     0,     0,     0,     0,  1354,   686,   726,
-   156,     0,   203,   203,   203,     0,     0,     0,  1125,     0,
-  1126,   300,   127,   128,    10,     0,  1501,  1502,     0,   450,
-   450,   450,     0,     0,     0,  1507,     0,     0,     0,     0,
-     0,   203,     0,     0,     0,     0,     0,     0,     7,     8,
-     9,    10,     0,   724,    13,     0,     0,   501,     0,    21,
-   724,     0,     0,  1527,     0,     0,   251,   104,     0,     0,
-     0,     0,     0,     0,    27,   319,    18,     0,   144,     0,
-   156,   156,   156,     0,     0,   258,    21,   258,   450,   450,
-     0,     0,   617,     0,     0,     0,   201,  1422,   201,    26,
-     0,    27,    28,     0,     0,     0,    32,   560,     0,     0,
-     0,     0,     0,     0,     0,  1157,   104,   528,     0,     7,
-   127,   128,    10,     0,   724,  1158,     0,     0,     0,   258,
-     0,     0,     0,    32,     0,   620,     0,     0,  1159,   622,
-     0,     0,     0,     0,     0,     0,     0,    18,     0,     0,
-   421,   424,   471,   473,   477,     0,   450,    21,     0,     0,
-     0,   104,     0,     0,   665,   615,     0,   528,   528,   631,
-    26,     0,    27,    28,     0,     0,     0,   949,    80,   421,
-  1324,     0,     0,     0,   724,  1230,   149,  1232,     0,     0,
-   724,     0,   722,   127,   128,     0,   150,   477,   516,   259,
-     0,     0,     0,     0,    32,     0,     0,     0,     0,   151,
-     0,     0,   133,     7,     8,     9,    10,   258,     0,     0,
-   724,   104,     0,   203,   104,     0,  1048,   724,     0,     0,
-     0,     0,     0,     0,     0,     0,   617,     0,   144,     0,
-     0,   144,  1263,    26,     0,   130,   131,     0,     0,     0,
-     0,    21,     0,   144,     0,     0,     0,     0,     0,   618,
-     0,    80,     0,     0,    26,     0,    27,    28,     0,   619,
-   192,     0,     0,     0,     0,     0,   434,     0,     0,   620,
-   193,     0,   621,   622,     0,     0,     0,     0,     0,   203,
-   194,   203,     0,   203,   203,   203,   548,   549,    32,   203,
-     0,   258,   201,   195,   203,     0,     0,   203,   469,   582,
-   583,   584,   585,   586,   587,   588,   589,   590,     0,  1240,
-  1337,   485,     0,    80,     0,  1341,     0,     0,   258,     0,
-     0,     0,   686,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     7,     8,     9,    10,     0,     0,   516,     0,
-     0,     0,   742,   743,   471,   473,   477,     0,     0,     0,
-   754,   104,   104,   104,   104,     0,     0,     0,     0,     0,
-    18,     0,     0,     0,     0,     0,  1378,     0,     0,     0,
-    21,     0,     0,   471,   473,   477,   617,   258,     7,   127,
-   128,    10,     0,    26,    13,    27,    28,     0,     0,     0,
-     0,     0,     0,     0,     0,  1282,     0,   724,     0,   955,
-     0,  1240,     0,     0,  1353,  1190,    18,     0,     0,   956,
-     0,   104,     0,   528,     0,     0,    21,    32,     0,   620,
-     0,     0,   957,   622,     0,   615,     0,   528,   528,    26,
-   631,    27,    28,     0,     0,     0,     0,   918,     0,     0,
-     0,   920,     0,     0,     0,    30,     0,     0,     0,     0,
-     0,   724,   724,     0,     0,    31,   203,   724,     0,   742,
-   743,     0,   754,    32,     0,     0,  1452,  1453,    33,     0,
-     0,   724,     0,   724,     0,   724,   421,  1324,     0,     0,
-   133,     0,     0,  1463,     0,     0,     0,   133,     0,     0,
-     0,     0,     0,     0,     0,   203,   962,   203,   203,   237,
-   631,   577,   578,   579,   580,   581,   582,   583,   584,   585,
-   586,   587,   588,   589,   590,  1406,  1407,     0,     0,     0,
-     0,   724,     6,     0,     7,     8,     9,    10,    11,    12,
-    13,     0,     0,     0,     0,    14,     0,     0,     0,  1499,
-  1500,     0,   203,     0,     0,     0,   962,     0,     0,    16,
-     0,    17,    18,   203,   203,     0,   203,    20,  1509,  1510,
-     0,     0,    21,     0,     0,   724,    23,     0,     0,   438,
-     0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
-     0,    29,   724,     0,   133,   747,     0,    80,     0,    80,
-   753,    30,     0,     0,  1050,    80,    80,     0,     0,     0,
-     0,    31,    80,     0,  1467,   104,     0,     0,     0,    32,
-   477,   104,     0,     0,    33,   795,     0,     0,   528,   528,
-   528,   801,     0,     0,     0,     0,  1485,  1488,     0,     0,
-   528,     0,     0,   809,   810,     0,   811,   636,     8,     9,
-    10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   626,   630,   633,     0,     0,     7,     8,     9,    10,
-   214,   215,   216,     0,     0,     0,     0,    14,     0,     0,
-     0,     0,   308,   637,     0,    21,     0,     0,     0,     0,
-   471,   473,   477,     0,    18,     0,     0,     0,    26,    20,
-   130,   131,     0,     0,    21,     0,     0,     0,    23,     0,
-   617,     0,     0,   528,  1532,   528,     0,    26,     0,    27,
-    28,     0,   104,     0,     0,     0,   528,     0,   104,     0,
-   918,   918,   918,   955,     0,     0,     0,     0,  1134,     0,
-     0,   906,   907,   956,     0,     0,   906,     0,     0,     0,
-     0,    32,     0,   620,     0,     0,   957,   622,     0,     0,
-     0,     0,     0,    83,   724,     0,   724,     0,   724,     0,
-   104,     0,   104,   106,   203,   203,  1161,     0,     0,     0,
-     0,     0,   126,   134,     0,     0,     0,     0,     0,   145,
-   145,     0,   145,     0,    83,     0,     7,     8,     9,    10,
-     0,    83,     7,     8,     9,    10,   167,    12,    13,     0,
-     0,  1005,     0,    14,   145,     0,    83,     0,     0,  1161,
-     0,     0,     0,     0,   238,     0,     0,    16,     0,    17,
-    18,   248,   104,     0,    21,    20,     0,     0,     0,     0,
-    21,     0,     0,   248,    23,   104,     0,    26,  1050,    27,
-    28,     0,     0,    26,     0,    27,    28,   104,   369,   371,
-     0,   724,     0,   193,     0,     0,     0,     0,     0,    30,
-  1220,     0,     0,   194,     0,     0,     0,     0,     0,    31,
-     0,    32,    80,     0,     0,     0,   195,    32,     0,     0,
-     0,   104,    33,   104,     0,    83,     0,     0,     0,   145,
-   145,     0,     0,     0,     0,   145,     0,     0,   145,   145,
-   145,   300,     8,     9,    10,     0,     0,     0,     0,     0,
-  1071,   104,  1073,     0,    83,     0,   528,   528,    83,   528,
-     0,   895,   897,     0,   145,    83,   578,   579,   580,   581,
-   582,   583,   584,   585,   586,   587,   588,   589,   590,    21,
-     0,     0,   145,   145,   145,     0,   251,     0,     0,     0,
-     0,     0,     0,     0,    27,   319,     0,     0,     0,     0,
-     0,     0,     0,     0,   203,   203,   203,   203,  1161,   127,
-   128,   145,   203,   215,   216,     0,     0,     0,   252,    14,
-     0,     0,     0,     0,  1107,  1108,    32,  1110,     0,   960,
-     0,   626,   630,     0,   633,  1161,  1161,  1161,     0,     0,
-     0,    20,     0,     0,     0,   724,     0,     0,   145,     0,
-    23,     0,   617,     0,     0,  1128,     0,     0,     0,    26,
-     0,   130,   131,     0,     8,     9,   203,   167,    12,    13,
-     0,   144,   730,     0,    14,   618,   630,     0,     0,     0,
-   300,     8,     9,    10,     0,   619,   248,   145,    16,     0,
-    17,    18,     0,     0,     0,   620,    20,     0,   621,   622,
-     0,     0,     0,     0,     0,    23,  1163,   617,     0,     0,
-   559,     0,     0,     0,    26,     0,   130,   131,    21,     0,
-     0,   203,   203,     0,   203,   251,     0,     0,     0,     0,
-   618,   248,     0,    27,   319,   616,     0,   145,   145,   632,
-   619,     0,     0,     0,   641,     0,     0,     0,    83,     0,
-   620,     0,     0,   621,   622,     0,     0,   519,     0,     0,
-   203,   962,   203,     0,   630,    32,     0,     7,   127,   128,
-    10,     0,  1206,   246,     0,     0,     0,     0,     0,   104,
-     0,     0,   678,   685,  1211,     0,     0,     0,     0,     0,
-     0,   248,     0,   145,   248,    18,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    21,     0,     0,   145,     0,
-     0,   145,     0,     0,     0,     0,     0,     0,    26,     0,
-    27,    28,     0,   145,     0,     0,     0,     0,     0,     0,
-     0,    83,     0,     0,    30,     0,     0,  1120,     0,  1121,
-     0,     0,     0,     0,    31,     0,     0,     0,     0,   732,
-  1127,     0,    32,     0,   895,   897,     0,    33,     0,   145,
-     0,   145,     0,   145,   145,   145,     0,     0,     0,   145,
-  1262,     0,  1161,     0,   145,     0,     0,   145,   579,   580,
-   581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
-     0,     0,   772,    83,     0,     0,     0,     0,   895,   897,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1275,
-     0,     7,   127,   128,    10,   814,     0,    13,   817,     0,
-     0,     0,   819,   820,   822,   823,   824,     0,     0,     0,
-     0,   248,   248,   248,   248,   559,     0,     0,     0,    18,
-     0,     0,  1161,  1161,  1161,     0,     0,     0,   841,    21,
-   166,     0,     7,     8,     9,    10,   167,    12,    13,     0,
-     0,   104,    26,    14,    27,    28,   203,     0,     0,     0,
-     0,     0,  1362,     0,     0,     0,  1363,    16,   149,    17,
-    18,    19,     0,     0,     0,    20,     0,     0,   150,     0,
-    21,   248,     0,   145,    23,     0,    32,   168,     0,     0,
-     0,   151,   898,    26,     0,    27,    28,   145,   145,   898,
-   632,  1379,     0,     0,     0,     0,     0,   919,     0,    30,
-     7,     8,     9,    10,   214,   215,   216,     0,     0,    31,
-   641,    14,     0,     0,     0,     0,   145,    32,     0,     0,
-     0,     0,    33,     0,     0,     0,     0,    34,    18,     0,
-     0,     0,     0,    20,     0,     0,     0,     0,    21,     0,
-   678,     0,    23,     0,   617,     0,     0,     0,   126,     0,
-     0,    26,     0,    27,    28,   145,   632,   145,   145,   238,
-   632,     0,     0,     0,     0,  1435,     0,   193,     0,  1436,
-     0,     0,     0,     0,     0,     0,     0,   194,  1120,  1121,
-   895,   897,     0,   772,     0,    32,  1127,     0,     0,     0,
-  1423,  1454,  1455,     0,     0,     0,     0,     0,   685,     0,
-     0,     0,   145,     0,     0,     0,   632,     0,     0,   895,
-   897,     0,     0,   145,   145,     0,   145,     0,     0,     0,
+   434,   442,   419,   422,   122,   486,   444,   443,    42,   981,
+    36,   391,   639,    57,   692,   723,   431,   513,   693,   629,
+   535,   538,   888,   638,   252,   255,   355,   752,   356,   888,
+    59,    72,   978,   760,   399,   182,   690,    59,   155,    42,
+   297,    36,   506,  1097,    57,   819,    42,   397,   398,   158,
+   669,   176,   209,   568,   103,   177,   858,   141,   146,   708,
+   953,    58,    72,   485,   174,   248,   396,   246,  1022,    72,
+  1024,   390,   493,   407,  1467,  1522,   451,  1051,  1017,   295,
+  1526,   153,   959,   348,   190,   348,    35,   348,  1411,   255,
+  1426,   525,    58,   989,   491,   494,   208,  1429,   170,    58,
+   171,  1527,   348,   348,   196,  1337,  1338,   607,   911,   516,
+  1172,   296,  1198,   458,   107,   716,   224,    35,  1536,  1358,
+  1554,   642,   607,   259,   169,    -1,   607,  -143,    -2,   719,
+   459,   405,   348,  -354,   348,   757,   779,   452,  1551,   137,
+   990,   294,  1199,   991,   525,   404,   363,    15,   255,   138,
+    88,  -413,    55,   782,   155,   155,   155,  -144,  1563,   460,
+    59,   740,   960,    72,    59,   158,   158,   158,   890,    86,
+   453,   209,   717,    42,    57,   402,   418,   421,   176,  1585,
+  -413,  1577,   177,    55,  -413,   190,  1173,   439,   257,   818,
+   175,   174,    72,    58,   224,   925,    72,  1593,   420,   423,
+   155,  1027,   489,  1059,  1564,   520,  1608,   804,   780,  1064,
+   224,   158,   257,  1178,   591,   208,  1556,  1554,    87,   705,
+   469,   471,    58,   966,   196,   170,    58,   171,  1052,  -413,
+   190,  1264,   163,   817,  1028,    15,  -354,   466,  1029,  -413,
+   452,   257,  -300,   153,   926,  1440,  1325,  1618,  -363,    93,
+    15,   169,   257,  1467,  1446,  1447,    89,  1448,   617,   613,
+   592,  1530,   178,  1179,  1589,  1524,   224,  -413,  -413,   222,
+   223,  1030,   164,   453,   224,  -293,    90,  1053,   612,   221,
+  1265,  -363,   514,   467,   403,  -363,   713,   259,  -300,  -300,
+   224,   246,   677,   645,    94,  1326,  1619,   604,  1130,   639,
+  1387,  1133,   888,  -293,   803,   643,   644,  1387,  1145,   591,
+  1561,   257,    91,    55,  1096,   938,  1123,   175,  -363,  1245,
+   967,   968,   969,   348,   108,   994,   419,   422,   515,   964,
+   965,   672,    92,    95,    96,    97,   295,   225,   226,   227,
+   755,   373,  1159,  1160,   246,   257,   888,   374,   929,  1388,
+   692,    38,   348,   648,  1000,   592,  1498,   698,   699,  1051,
+  1594,    18,   491,   494,   970,   109,   228,   404,   296,   257,
+   491,    26,   995,   971,   972,   996,   557,   513,    95,   110,
+   111,   634,    38,   494,    26,    72,    98,    99,   229,   178,
+   129,   982,   307,   888,   259,   989,   689,   646,   294,   209,
+    26,  -181,   494,  1406,   629,   680,  1539,  1540,    26,   135,
+   973,     7,     8,   249,    10,    58,   137,  -181,  1098,  -181,
+    95,   110,   111,  1148,   861,  1371,    39,   635,   691,   221,
+   137,   112,   113,   230,   231,   232,    59,   221,   221,  1202,
+   793,   862,   990,   161,  1125,   991,  -624,  -827,   772,    21,
+   176,  1207,   695,   939,   177,  1403,   250,    39,   688,   127,
+   128,   257,   733,   710,    27,    28,   221,   800,    72,   940,
+   863,   365,   369,   112,   113,   114,   420,   703,   155,   155,
+   155,   162,   978,    40,   758,  1226,   794,  1228,   251,   158,
+   158,   158,  -624,  -624,   691,   617,    32,   179,    58,    59,
+   744,   745,   183,   224,  -582,   138,   647,  -624,   188,    26,
+   376,   130,   131,   774,    40,   221,  1261,  1262,  1017,   257,
+     8,   518,   420,   423,   688,   139,   348,   127,   128,   348,
+    90,    72,   348,   222,   445,   963,   348,   809,   809,   809,
+   809,   803,  1194,   769,  1196,   876,   224,   187,  1200,   348,
+  -582,   189,   692,    18,   888,  1463,   693,  1208,   604,   348,
+  -302,    58,   348,  1409,   362,   639,   239,   861,   221,    88,
+   240,   677,   130,   131,   690,   137,   638,    26,   935,   130,
+   131,  -582,   557,   888,   862,   557,   766,   127,   128,   175,
+   243,   877,   934,   865,   138,   912,   519,   295,   215,   216,
+   298,   420,   814,   866,    14,   525,  -302,  -302,   257,   932,
+  -364,   896,    15,   863,  1370,   557,   689,   867,   359,  -302,
+   568,  -296,   371,   733,   878,   221,    20,  -582,   481,   296,
+   377,   362,   491,   880,  -302,    23,   257,   617,  -302,   130,
+   131,  1234,  1236,  -364,   400,   882,   884,  -364,   691,  1017,
+    92,  1250,   773,  1004,  -302,   691,  1171,   897,   898,   294,
+   122,   178,   361,   519,   127,   128,  -302,  -302,   348,  -302,
+   879,  -302,   259,    89,   642,  1441,   904,   378,   688,   881,
+  -364,  -141,   209,   803,   375,   688,   246,    88,   381,   382,
+   383,   379,   555,    90,   380,   979,   914,   137,   302,  1005,
+  -302,  -302,   127,   128,  -293,   221,   221,   516,   362,   424,
+   772,  1031,   772,   221,  1165,  -302,   130,   131,   772,   772,
+   508,  1060,  1061,   257,  1062,   772,   221,    91,  1167,  1331,
+  1332,  1333,   689,   384,  1236,   946,   189,   951,   952,   257,
+   251,   385,   386,  1321,  1323,   221,   432,    92,  1327,  -619,
+  1072,  1169,    26,    -7,   130,   131,   164,  1032,  1025,  1026,
+  1166,    59,   446,    59,   691,   431,   509,  1054,   526,   209,
+    59,   804,   447,   448,  1168,   774,    59,   774,   527,   689,
+   348,   348,   952,   348,   774,   689,   561,   450,   562,  1368,
+   774,   462,  1161,    72,   688,    72,  -120,  1170,    15,   791,
+  1469,   750,    72,     8,     9,   769,    91,   769,    72,   756,
+   463,   691,  1036,  1046,   769,  1572,   501,   691,     8,     9,
+   769,  1596,  1037,    58,   521,    58,    92,   522,   727,  -120,
+   589,   590,    58,  -120,     7,   127,   128,    10,    58,  1610,
+  -118,   688,    15,   523,    91,   792,  1470,   688,   766,   524,
+   766,   904,  -142,   348,   532,   130,   131,   766,  1100,  1586,
+   564,  1573,   362,   766,    92,   391,  -120,  1597,   221,   541,
+   130,   131,    21,  -118,   542,   564,   561,  -118,   562,   250,
+   127,   128,  1144,   543,  1432,  1611,   809,    27,    28,     8,
+     9,   544,   689,    12,    13,   255,   733,   545,   555,    14,
+   607,   555,    95,   110,   111,   806,   662,   663,   664,   221,
+  -118,   251,   653,    16,   773,    17,  1023,   657,   555,    32,
+   656,    20,   673,   773,   691,  1461,   882,   884,   691,   773,
+    23,   555,   130,   131,   689,   833,   809,   348,   659,    26,
+   689,   130,   131,   680,   214,   215,   216,   259,   420,   814,
+   155,    14,   660,   221,   688,   112,   113,    89,   688,   224,
+   661,   158,   674,   856,    90,  1209,   691,  1019,    18,   872,
+  1149,  1150,   691,    20,    91,   221,    92,    90,   859,   804,
+  1246,  1247,    23,  1249,   116,   117,   118,   733,   252,   255,
+   -52,   127,   128,   153,    92,   -52,   688,   155,     8,     9,
+   809,   772,   688,   702,   419,   422,   -52,    -6,   158,   706,
+  1221,  1222,  1223,  1020,   257,   689,   257,   479,   480,   691,
+   586,   587,   588,   589,   590,  1211,   728,   689,   751,   221,
+   746,  1213,  1214,   419,   422,  1211,  1216,   119,   120,  1214,
+  1184,    26,   362,   130,   131,  1253,   785,   691,    15,   688,
+   130,   131,    59,   786,   116,   117,   118,   526,   257,   691,
+   787,   689,  1036,   689,   215,   216,   774,   527,   795,  1473,
+    14,   788,  1037,   796,   251,     8,     9,   688,   487,   488,
+    76,    95,    96,    97,    72,  1490,   813,   539,   540,   688,
+   815,   809,    20,   691,   816,   691,   769,   127,  1355,   717,
+   255,    23,    89,   548,   348,    26,   549,   119,   120,   550,
+  1390,    76,   560,   818,    58,   875,   565,   873,    76,   362,
+   479,   711,    90,   688,   606,   688,   692,   130,   131,   889,
+  1547,   201,    26,   213,    98,    99,   100,  1419,  1417,   766,
+  1422,   362,  1069,  1070,  1071,   979,    91,   686,   689,   130,
+   131,   519,   257,   891,  1391,   893,   155,   155,   155,   520,
+   487,   712,   917,  1612,  1385,  1386,    92,   158,   158,   158,
+  1308,   479,  1492,   519,  1473,    89,   918,   733,  1267,  1268,
+   691,  1300,   927,  1442,  1307,   155,   155,   155,   804,   928,
+   348,   487,  1493,   931,  1473,    90,   158,   158,   158,    20,
+   420,   423,    72,  1375,   933,   773,   941,  1267,  1268,   691,
+   688,   942,   406,   686,   479,  1497,   409,    95,   110,   111,
+   510,   955,  -578,  1569,  -296,  -578,   961,   962,   452,   420,
+  1319,  1103,    58,   986,   987,   988,   257,   993,  -826,   688,
+  1002,    76,  1006,  1055,  1007,    76,   299,   393,   394,    10,
+    15,   201,   213,  1473,  -413,    21,  1073,  1299,  1074,  1075,
+   893,   719,  1076,   257,  1077,   555,   140,   140,  1078,   156,
+   112,   113,  -578,  1079,  -578,  -578,  1080,  -578,  1081,    95,
+    96,    97,  -413,  -413,    21,  1082,   147,  -413,  -578,  -140,
+  -578,   250,  1083,   212,  1308,   220,  1085,  1086,   201,    27,
+   318,   236,   209,  1088,  1308,  1090,  -578,  -578,  1307,  1089,
+  1091,  1308,  1105,   525,  1108,  1300,  1092,  1107,  1307,  1109,
+   809,  -578,  1300,   257,   362,  1307,    72,  1110,  1116,  1117,
+  1535,    32,    98,    99,   548,   549,    72,  1126,  1127,  1118,
+  1444,  1445,  1124,    72,  1136,  1129,  1143,   419,   422,  1009,
+   299,  1142,  1139,    10,  1164,  1416,    58,  1416,  1187,  1195,
+  1193,     7,     8,     9,    10,  1197,    58,   686,  1212,  1217,
+  1220,  1056,  1566,    58,   686,  1224,  1229,   140,    18,  1237,
+  1230,  1299,   140,  1231,  1232,   156,   156,   156,    21,  1248,
+  1239,  1299,  1240,  1241,  1252,  1172,   410,  1244,  1299,    21,
+  1254,   412,  1263,   425,   426,  1255,   250,   127,   128,   489,
+  1256,  1259,   212,   459,    27,    28,  1260,   427,   449,  1266,
+   299,   393,   394,    10,  1271,  1320,   155,   428,  1336,   140,
+   140,   156,  1340,  -661,   649,    32,  1362,   158,   251,  1363,
+   429,  1373,   381,   382,   383,   220,    32,   129,  1374,   147,
+  1369,  1379,  1380,   492,   220,  1382,  1381,    26,    21,   130,
+   131,  1389,  1398,  1412,  1399,  1517,    95,   413,   414,  1184,
+  1308,  1308,  1517,    27,   318,  1308,  1400,  1427,  1414,   201,
+  1430,  1300,  1433,   686,  1307,  1307,  1300,  1476,  1434,  1307,
+  1457,   348,  1458,    26,   140,   385,   386,   296,  1459,   155,
+   155,   155,    72,    72,   296,    32,  1460,    72,   689,  1481,
+   158,   158,   158,   517,  1465,  1308,  1477,    76,  1483,    98,
+   113,   744,   745,   374,  1308,  1484,  1300,   294,   221,  1307,
+   686,  1491,    58,    58,   294,  1300,   686,    58,  1307,  1570,
+   691,  1512,  1521,   420,  1319,  1513,   555,    72,  1531,  1532,
+  1541,  1558,  1517,  1543,  1549,   201,    72,  1299,  1299,  1329,
+  1580,  1559,  1299,   201,   156,  1567,  1584,  1550,  1568,   338,
+   688,   338,  1591,   338,  1308,  1592,  1595,    58,  1598,  1614,
+   778,    95,    96,    97,   296,  1300,    58,  1600,  1307,  1605,
+  1601,  1616,  1609,  1364,  1365,  1366,  1367,   116,   968,   969,
+  1613,  1621,  1299,  1622,  1624,  1625,    72,     1,     5,   160,
+   441,  1299,  1308,  1488,   294,   930,  1204,  1205,   338,  1146,
+   338,   709,  1565,  1300,  1011,  1047,  1307,   127,   128,  1272,
+   438,   215,   216,   440,    98,    99,    58,    14,   358,   408,
+   212,   220,  1472,   686,    72,  1218,  1620,   686,    26,  1372,
+   119,   120,   531,  1106,   140,   985,  1402,   140,  1435,    20,
+  1138,  1299,  1137,   156,   156,   156,   503,  1334,    23,   140,
+   617,  1049,  1057,   700,    58,  1357,   701,    26,   920,   130,
+   131,   548,   549,  1135,   860,   686,   482,   614,   704,   389,
+  1425,   686,  1599,   618,  1033,  1034,     9,    10,  1587,  1299,
+  1317,  1606,     0,   619,  1562,   140,  1604,   140,  1186,   156,
+   156,   156,  1431,   620,   449,     0,   628,   622,     0,     0,
+   140,   492,   220,   201,   410,   449,   412,     0,     0,   492,
+     0,     0,    21,     0,  1462,     0,     0,   221,   686,   517,
+     0,     0,     0,   449,     0,    26,     0,    27,    28,     0,
+     0,  1203,     0,  1035,     0,     0,     0,   636,     8,     9,
+    10,   193,   201,   949,   201,   201,   686,  1482,     0,     0,
+   156,   194,     0,   156,    95,   110,   111,     0,   686,    32,
+   127,   128,     0,     0,   195,   516,     0,     0,   156,   156,
+   156,     0,   307,   637,     0,    21,     0,   368,   370,     0,
+   546,  1343,  1344,   156,  1353,  1354,     0,  1356,    26,   201,
+   130,   131,   686,   998,   686,   116,   968,   969,     6,     0,
+     7,     8,     9,    10,    11,    12,    13,   112,   113,     0,
+    26,    14,   130,   131,  1515,     0,     0,     0,   338,     0,
+   833,  1515,   778,     0,   778,    16,   865,    17,    18,  1043,
+  1050,   778,     0,    20,     0,     0,   866,   778,    21,     0,
+   555,     0,    23,     0,   905,   437,     0,   593,   119,   120,
+   867,    26,     0,    27,    28,     0,     0,    29,     0,     0,
+     0,    95,   110,   111,   220,     0,     0,    30,     0,  1251,
+     0,     0,    95,   110,   111,     0,     0,    31,     0,   686,
+     7,     8,     9,    10,     0,    32,   594,   595,     0,     0,
+    33,   596,   597,   598,   599,     0,     0,     0,     0,     0,
+     0,  1515,     0,   212,     0,   220,   236,     0,   686,     0,
+     0,     0,  1438,  1439,   112,  1485,     0,  1590,    21,     0,
+   722,   726,     0,   127,   128,   112,  1487,     0,   726,     0,
+     0,    26,     0,    27,    28,     0,     0,   192,     0,  1603,
+     0,     0,   548,   549,     0,     0,   833,   193,     0,   220,
+    95,   110,   111,     0,   225,   226,   227,   194,     0,     0,
+   140,   140,     0,   140,     0,    32,   617,     0,     0,     0,
+   195,   492,     0,    26,   449,   130,   131,     0,    18,   700,
+   701,     0,   704,   228,     0,     0,     0,     0,     0,   618,
+   212,     0,   338,   726,     0,     0,   449,     0,   559,   619,
+     0,     0,     0,   112,   113,     0,     0,     0,     0,   620,
+     0,     0,   621,   622,  1504,  1505,  1506,     0,     0,   156,
+     0,   470,   472,   476,     0,   338,     0,   722,     0,     0,
+   830,   831,     0,   835,   836,   837,   838,   839,   840,   841,
+   842,   843,   844,   845,   846,   847,   848,   849,   850,   851,
+   852,   853,     0,   726,     0,     0,     0,     0,     0,   726,
+     0,   560,   582,   583,   584,   585,   586,   587,   588,   589,
+   590,   685,     0,  1537,  1538,     0,     0,     0,     0,  1043,
+     0,     0,     0,     0,     0,     7,     8,     9,    10,   726,
+     0,     0,     0,   101,     0,     0,   726,   127,   128,     0,
+     0,   115,    13,     0,     7,     8,     9,    10,     0,     0,
+    13,     0,     0,   778,     0,   156,   156,   905,   922,   924,
+     0,     0,     0,    21,     0,     0,     0,     0,     0,   617,
+     0,     0,    18,     0,   338,     0,    26,   732,    27,    28,
+   617,  1588,    21,     0,   233,     0,     0,    26,   617,   130,
+   131,     0,   943,     0,   236,    26,     0,    27,    28,   140,
+   140,   905,   944,   618,     0,     0,     0,     0,     0,     0,
+    32,   943,   620,   619,     0,   945,   622,     0,     0,   147,
+     0,   944,   722,   620,     0,     0,   621,   622,     0,    32,
+     0,   620,     0,     0,   945,   622,     0,     0,   299,     8,
+     9,    10,     0,   387,   802,     0,     0,   805,   905,     0,
+     0,   807,   808,   810,   811,   812,   214,   215,   216,     0,
+     0,     0,     0,    14,   559,     0,  1021,   415,   299,   393,
+   394,    10,     0,     0,     0,     0,    21,   829,     0,   686,
+    18,   449,   449,   250,     0,    20,   338,   338,     0,   338,
+     0,    27,   318,     0,    23,     0,   548,   549,     0,     0,
+     0,     0,     0,     0,   726,     0,    21,     0,  1352,   696,
+   449,     0,     0,  1352,     0,   251,     0,     0,     0,    26,
+   725,    27,   318,    32,     0,     0,  1084,   731,     0,     0,
+     0,   886,     0,     0,     0,     0,     0,   742,   886,   743,
+     0,   470,   472,   476,     8,     9,     0,     0,    12,   245,
+     0,     0,   754,    32,    14,     0,   497,   499,   726,   726,
+     0,     0,     0,   722,   726,     0,     0,     0,    16,   511,
+    17,     0,     0,     0,     0,     0,    20,     0,   726,     0,
+   726,     0,   726,     0,     0,    23,     0,   617,   214,   215,
+   216,     0,   801,     0,    26,    14,   130,   131,     0,     0,
+     0,     0,   201,  1420,   201,   140,   140,   156,   156,   905,
+   618,     0,    18,   140,     0,     0,     0,    20,  1134,     0,
+   619,     0,     0,     0,   410,   412,    23,     0,   726,     0,
+   620,     0,   517,   621,   622,     0,   156,   156,   905,   547,
+     0,   915,     0,   338,   490,   215,   216,   685,     0,     0,
+     0,    14,   854,     0,     0,     0,  1158,     0,   855,     0,
+     0,     0,     0,     0,     0,     0,   449,   449,    18,   449,
+   449,     0,   449,    20,   726,     0,     0,     0,     0,     0,
+     0,   655,    23,   584,   585,   586,   587,   588,   589,   590,
+   665,     0,     0,   726,   732,   909,     0,     0,     0,     0,
+   732,    80,     0,   655,     0,     0,     7,   127,   128,    10,
+     0,   104,    13,     0,     0,     0,     0,     0,     0,     0,
+     0,   133,     0,   140,   140,     0,   140,   144,   144,     0,
+   144,     0,    80,     0,    18,     0,  1210,     0,     0,    80,
+     0,     0,   700,   701,    21,   704,     0,     0,     0,     0,
+     0,     0,   203,     0,    80,     0,     0,    26,     0,    27,
+    28,     0,   237,   212,   220,     0,     0,     0,  1095,   104,
+     0,     0,     0,    30,   127,   128,     0,     0,     0,   245,
+   261,   104,     0,    31,     0,     0,   722,   722,     0,     0,
+  1238,    32,     0,     0,     0,     0,    33,   449,   449,     0,
+     0,   829,     0,   104,     0,     0,     0,   732,     0,     0,
+   338,   886,   742,   743,   201,   754,     0,   617,     0,   759,
+     0,     0,     0,     0,    26,     0,   130,   131,     0,     0,
+     0,   133,     0,    80,     0,     0,     0,   144,   144,     0,
+   618,  1042,   411,   144,     0,     0,   144,   144,   144,   685,
+   619,  1147,     0,     0,     0,   886,     0,     0,     0,     0,
+   620,     0,    80,   621,   622,     0,    80,   726,     0,   726,
+     0,   726,   203,    80,     0,     0,     0,   156,     0,   722,
+     0,     0,     0,     0,     0,   826,     0,     0,   722,   722,
+   203,   203,   203,   722,     7,   127,   128,    10,     0,   449,
+   449,   449,   886,     0,     0,     0,     0,     0,     0,  1341,
+  1342,     0,     0,     0,     0,  1189,     0,  1093,  1094,   203,
+     0,     0,    18,  1099,     0,     0,     0,     0,     0,   874,
+   732,     0,    21,     0,   722,   500,     0,  1111,     0,  1112,
+     0,  1113,   732,     0,   104,    26,     0,    27,    28,     0,
+   156,   156,   156,     0,     0,   144,     0,     0,   449,   449,
+     0,   149,     0,     0,     0,   726,     0,     0,     0,     0,
+     0,   150,     0,     0,     0,     0,   732,     0,   732,    32,
+     0,     0,     0,     0,   151,     0,     0,  1141,     0,  1397,
+     0,     0,     0,   104,   528,  1008,     0,     0,   937,     0,
+   116,   968,   969,     0,  1010,     0,  1243,     0,     0,   954,
+     0,   470,   472,   476,   299,     8,     9,    10,     0,     0,
+     0,     0,     0,     0,     0,  1058,   449,  1011,     0,   722,
+     0,  1063,     0,  1162,  1012,     0,     0,     0,   104,     0,
+   826,     0,   615,     0,   528,   528,   631,     0,  1443,     0,
+     0,    26,    21,   119,   120,    80,     0,     0,     0,   250,
+   476,     0,     0,   886,     0,     0,     0,    27,   318,     0,
+   722,   127,   128,     0,     0,   215,   216,     0,     0,     0,
+     0,    14,     0,     0,     0,     0,     0,     0,     0,   133,
+     0,  1042,   886,     0,     0,     0,     0,     0,   104,    32,
+   203,   104,     0,    20,     0,  1330,     0,     0,     0,     0,
+     0,     0,    23,     0,   617,   144,     0,     0,   144,     0,
+     0,    26,   726,   130,   131,     0,     0,     0,     0,     0,
+   144,     0,     0,     0,  1119,     0,  1120,   618,    80,     0,
+     0,     0,  1502,  1503,     0,     0,     0,   619,     0,     0,
+     0,  1508,   299,     8,     9,    10,     0,   620,     0,     0,
+   621,   622,   299,   127,   128,    10,   203,     0,   203,     0,
+   203,   203,   203,     0,     0,     0,   203,     0,     0,  1528,
+     0,   203,     0,     0,   203,     0,     0,     0,     0,     0,
+    21,     0,     0,     0,     0,     0,     0,   250,     0,     0,
+    21,    80,     0,     0,     0,    27,   318,   250,     7,   127,
+   128,    10,     0,     0,   245,    27,   318,   742,   743,   470,
+   472,   476,     0,     0,     0,   754,  1273,     0,  1274,   519,
+  1275,     0,     0,     0,     0,  1189,    18,    32,     0,   104,
+   104,   104,   104,     0,   665,     0,    21,    32,   470,   472,
+   476,     0,     0,     0,     0,     0,     0,   937,     0,    26,
+     0,    27,    28,     0,     0,     0,     7,     8,     9,    10,
+     0,     0,   245,     0,     0,    30,     0,     0,     0,     0,
+  1351,     0,     0,     0,     0,    31,   258,     0,   626,   630,
+   633,     0,     0,    32,    18,     0,     0,     0,    33,   104,
+     0,   528,     0,     0,    21,     0,     0,  1225,   722,  1227,
+   617,     0,     0,   615,     0,   528,   528,    26,   631,    27,
+    28,     0,     0,     0,  1378,   906,     0,     0,     0,   908,
+     0,     0,     0,   943,     0,   742,   743,     0,   754,     0,
+     0,     0,     0,   944,   203,     0,     0,     0,     0,     0,
+     0,    32,     0,   620,     0,     0,   945,   622,     0,     0,
+     0,     0,     0,   433,  1258,     0,     0,     0,   133,   127,
+   128,     0,     0,     0,   516,   133,     0,     0,     0,     0,
+     0,     0,     0,   203,   950,   203,   203,   237,   631,     0,
+     0,     0,     0,     0,     0,   468,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,  1235,   559,     0,   484,     0,
+     0,     0,   617,     0,     0,  1033,  1034,     9,    10,    26,
+     0,   130,   131,   685,     0,     0,     7,   127,   128,    10,
+   203,     0,    13,     0,   950,   618,     0,     0,     0,     0,
+     0,   203,   203,  1335,   203,   619,     0,     0,  1339,     0,
+     0,     0,     0,    21,    18,   620,     0,     0,   621,   622,
+   133,     0,     0,    80,    21,    80,    26,     0,    27,    28,
+  1044,    80,    80,     0,  1035,     0,     0,    26,    80,    27,
+    28,   104,   193,     0,     0,     0,     0,   104,     0,   476,
+     0,  1277,   194,   149,   528,   528,   528,  1235,     0,  1376,
+    32,     0,     0,   150,     0,   195,   528,     0,     0,     0,
+     0,    32,     0,     0,     0,     0,   151,     0,   608,    83,
+   299,   393,   394,    10,     0,   609,     0,     0,     0,   106,
+     0,     0,     0,     0,     0,     0,     0,     0,   126,   134,
+     0,     0,     0,     0,     0,   145,   145,     0,   145,     0,
+    83,     0,     0,     0,     0,     0,     0,    83,    21,   883,
+   885,     0,   470,   472,   476,   610,     0,     0,     0,     0,
+   145,    26,    83,    27,   318,     0,     0,     0,     0,   528,
+   238,   528,     0,     0,     0,     0,     0,   247,   104,     0,
+     0,     0,   528,     0,   104,     0,   906,   906,   906,   247,
+     0,     0,  1453,  1454,  1128,   611,     0,     0,     0,     0,
+     0,     0,  1404,  1405,     0,     0,     0,     0,     0,  1464,
+     0,     0,     0,     0,     0,     0,     0,   948,   724,   626,
+   630,     0,   633,     0,     0,   724,   104,     0,   104,     0,
+   203,   203,  1155,     0,     0,     0,     0,     0,     0,     0,
+     0,    83,     0,     0,     0,   145,   145,     0,     0,     0,
+     0,   145,     0,     0,   145,   145,   145,     0,     7,   127,
+   128,    10,     0,     0,   630,     0,     0,     0,  1500,  1501,
+    83,   747,     0,     0,    83,     0,   753,     0,     0,  1155,
+   145,    83,     0,     0,     0,     0,    18,  1510,  1511,     0,
+   724,     0,   104,     0,  1468,     0,    21,     0,   145,   145,
+   145,     0,   783,     0,     0,     0,     0,   104,   789,    26,
+  1044,    27,    28,     0,     0,     0,  1486,  1489,     0,   104,
+   797,   798,     0,   799,     0,    30,     0,   145,     0,     0,
+     0,     0,  1215,     0,     0,    31,     0,     0,     0,     0,
+   630,     0,     0,    32,    80,     0,     0,     0,    33,     0,
+   724,     0,     0,   104,     0,   104,   724,     0,     0,     0,
+     0,     0,     0,   145,   573,   574,   575,   576,   577,   578,
+   579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
+   589,   590,     0,   104,     0,     0,   724,     0,   528,   528,
+     0,   528,     0,   724,     0,     0,     0,  1533,     0,     0,
+     0,   247,   145,     0,     7,     8,     9,    10,     0,     0,
+    13,     0,     0,  1114,     0,  1115,     0,     0,   894,   895,
+     0,     0,     0,   894,     0,     0,  1121,     0,     0,     0,
+   883,   885,    18,     0,     0,     0,   203,   203,   203,   203,
+  1155,     0,    21,     0,   203,     0,   247,     0,   617,     0,
+   616,     0,   145,   145,   632,    26,     0,    27,    28,   641,
+     8,     9,     0,    83,    12,   245,     0,  1155,  1155,  1155,
+    14,  1151,     0,     0,   883,   885,     0,     0,     0,     0,
+     0,  1152,     0,     0,    16,     0,    17,     0,     0,    32,
+     0,   620,    20,     0,  1153,   622,     0,   678,     0,   203,
+     0,    23,     0,     0,   144,     0,   247,     0,   145,   247,
+    26,     0,   130,   131,  -385,     8,     9,  -385,  -385,    12,
+   245,     0,     0,   145,     0,    14,   145,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   145,    16,
+     0,    17,  -385,     0,     0,     0,    83,    20,     0,     0,
+     0,     0,  -385,     0,   203,   203,    23,   203,   617,     0,
+     0,   724,     0,     0,     0,    26,     0,   130,   131,     0,
+     0,     0,     0,     0,   145,     0,   145,     0,   145,   145,
+   145,   618,     0,     0,   145,  1065,     0,  1067,     0,   145,
+     0,   619,   145,   203,   950,   203,     0,     0,     0,  -385,
+     0,   620,     0,     0,   621,   622,     0,     0,     0,    83,
+     0,     0,   104,     0,     0,   724,   724,     0,     0,     0,
+     0,   724,     0,     0,     0,     7,     8,     9,    10,   214,
+   215,   216,     0,     0,     0,   724,    14,   724,     0,   724,
+     0,     0,     0,     0,     0,     0,     0,   247,   247,   247,
+   247,     0,     0,    18,     0,     0,     0,     0,    20,  1101,
+  1102,     0,  1104,    21,     0,     0,     0,    23,     0,   617,
+     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+  1114,  1115,   883,   885,     0,   724,     0,     0,  1121,     0,
+  1122,     0,   193,     0,     0,     0,   623,   623,   623,     0,
+     0,     0,   194,  1478,     0,     0,     0,   247,  1155,   145,
+    32,   883,   885,     0,     0,  1421,     0,     0,     0,     0,
+     0,     0,     0,   145,   145,     0,   632,     0,     0,     0,
+     0,   724,     0,   907,     0,     0,     0,     0,     0,     0,
+     0,  1157,     0,     0,     0,     0,   641,     0,     0,     0,
+   724,     0,   145,  1479,   569,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+   585,   586,   587,   588,   589,   590,   678,     0,     0,     0,
+     0,  1155,  1155,  1155,   126,     0,     0,     0,     0,     0,
+     0,   145,   632,   145,   145,   238,   632,     0,  1114,  1115,
+   104,  1121,     0,     0,     0,   203,     0,     0,     0,     0,
+     0,     0,     0,  1201,     0,     0,     0,     0,     0,   980,
+     0,     0,     0,     0,     0,  1206,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     8,     9,     0,   145,    12,
+    13,     0,   632,     0,     0,    14,     0,     0,     0,   145,
+   145,     0,   145,     0,     7,     8,     9,    10,     0,    16,
+   516,    17,     0,     0,     0,   980,     0,    20,   134,     0,
+     0,    83,     0,    83,     0,     0,    23,     0,  1045,    83,
+    83,     0,    18,     0,     0,    26,    83,   130,   131,   247,
+     0,     0,    21,     0,     0,   247,     0,     0,   617,     0,
+     0,     0,   145,   145,   145,    26,     0,    27,    28,     0,
+     0,  1257,     0,     0,   145,     0,     0,     0,     0,     0,
+     0,   943,    51,     0,   724,     0,   724,     0,   724,     0,
+     0,   944,     0,     0,     0,     0,     0,     0,     0,    32,
+     0,   620,     0,     0,   945,   622,     0,     0,    51,    51,
+  1270,   152,     0,    51,     0,     0,     0,     0,     0,     0,
+    51,     0,     0,     0,     0,     0,     0,   623,   623,     0,
+   623,     0,     0,    51,     0,    51,     0,   903,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   145,     0,   145,
+     0,     0,     0,     0,     0,     0,   247,     0,   253,     0,
+   145,     0,   247,     0,   907,   907,   907,     0,     0,     0,
+     0,     0,   641,     0,  1360,     0,     0,     0,  1361,     0,
+     0,     0,   724,   579,   580,   581,   582,   583,   584,   585,
+   586,   587,   588,   589,   590,   623,     0,   623,   623,     0,
+   623,     0,     0,     0,   247,     0,   247,     0,   145,   145,
+   632,   395,   395,  1377,    51,     0,     0,     0,    51,    51,
+     0,     0,   253,     0,    51,     0,     0,   152,   152,   152,
+     0,     0,     0,     0,   430,     0,     0,     0,     0,     0,
+     0,     0,   623,    51,     0,     0,     0,    51,     0,     0,
+     0,     0,     0,    51,    51,     0,     0,   907,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   247,    51,    51,   152,     0,     0,     0,     0,     0,     0,
+     0,   253,     0,     0,     0,   247,     0,     0,  1045,     0,
+  1436,     0,     0,     0,  1437,     0,     0,   247,     0,     0,
+    51,     0,     0,     0,     0,  1345,  1346,     9,    10,     7,
+     8,     9,    10,   214,   215,   216,  1455,  1456,   623,     0,
+    14,     0,    83,     0,     0,     0,     0,     0,     0,     0,
+     0,   247,     0,   247,     0,     0,    51,    18,     0,   724,
+     0,     0,    20,    21,     0,     0,     0,    21,     0,     0,
+     0,    23,     0,   617,     0,     0,    26,     0,    27,    28,
+    26,   247,    27,    28,  1347,     0,   145,   145,     0,   145,
+     0,     0,   193,     0,     0,     0,   943,     0,     0,     0,
+     0,     0,   194,     0,     0,     0,   944,     0,     0,     0,
+    32,   623,     0,   623,    32,   195,   620,     0,     0,   945,
+   622,     0,     0,     0,   623,     0,   556,     0,   903,   903,
+   903,     0,     0,     0,   145,   145,   145,   145,   632,     0,
+     0,     0,   145,   395,     0,     0,     0,     0,     0,   980,
+     0,   253,     0,     0,     0,     0,    51,     0,     0,     0,
+     0,     0,     0,     0,     0,   907,   907,   907,     0,     0,
+     0,     0,   623,   623,   623,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   980,     0,     0,     0,     0,
+   395,     0,     0,     0,     0,     0,     0,   145,     0,     0,
+     0,    51,   145,     0,     0,     0,     0,   166,     0,     7,
+     8,     9,    10,   167,    12,    13,    51,     0,     0,    51,
+    14,   903,     0,     0,     0,   430,   430,   430,     0,     0,
+     0,    51,     0,     0,    16,     0,    17,    18,    19,    51,
+     0,     0,    20,     0,     0,     0,     0,    21,     0,     0,
+     0,    23,   145,   145,   168,   145,     0,     0,     0,     0,
+    26,     0,    27,    28,     0,     0,     0,    51,     0,    51,
+     0,   152,   152,   152,     8,     9,    30,    51,    12,    13,
+  1408,     0,    51,     0,    14,    51,    31,     0,     0,     0,
+     0,   145,   632,   145,    32,     0,     0,     0,    16,    33,
+    17,     0,    51,     0,    34,     0,    20,     0,     0,     0,
+   247,     0,     0,     0,     0,    23,   980,     0,     0,     0,
+     0,     0,     0,     0,    26,     0,   130,   131,   600,     0,
+     0,     0,   556,     0,     0,   556,     0,     0,     7,     8,
+     9,    10,     0,     0,    13,     0,     0,     0,     0,     0,
+   556,   556,   556,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   601,     0,   556,    18,     0,     0,    78,
+     0,     0,     0,     0,     0,     0,    21,     0,   623,   623,
+   623,   623,   623,     0,     0,     0,   623,     0,     0,    26,
+     0,    27,    28,     0,     0,    78,    78,     0,    78,     0,
+    78,     0,     0,     0,     0,   193,   907,    78,     0,   903,
+   903,   903,     0,   253,    18,   194,     0,     0,     0,     0,
+    78,     0,    78,    32,     0,     0,   556,     0,   195,   575,
+   576,   577,   578,   579,   580,   581,   582,   583,   584,   585,
+   586,   587,   588,   589,   590,    51,   569,   570,   571,   572,
+   573,   574,   575,   576,   577,   578,   579,   580,   581,   582,
+   583,   584,   585,   586,   587,   588,   589,   590,     0,   395,
+     0,     0,     7,   127,   128,    10,   395,     0,   516,   907,
+   907,   907,     0,     0,    51,    51,    51,    51,     0,     0,
+     0,     0,     0,     0,     0,     0,   623,   623,   247,   623,
+    18,    78,     0,   145,     0,    78,    78,     0,     0,     0,
+    21,    78,     0,     0,    78,    78,    78,     0,     0,     0,
+     0,     0,     0,    26,     0,    27,    28,     0,     0,     0,
+    78,    51,     0,     0,    78,    51,     0,     0,     0,    30,
+    78,    78,    51,    51,     0,    51,     0,     0,     0,    31,
+     0,     0,     0,     0,     0,     0,     0,    32,    78,    78,
+    78,     0,    33,     0,    51,     0,    51,     0,     0,     0,
+     0,    51,    51,    51,     0,     0,     0,     0,     0,    51,
+     0,     0,     0,     0,     0,     0,     0,    78,     0,   159,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   832,   556,   299,     8,     9,    10,   167,    12,   300,   301,
+   302,   204,   303,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    78,     0,     0,     0,    16,   304,    17,
+    18,    19,     0,   305,   306,    20,     0,   307,   308,   309,
+    21,   310,   311,     0,    23,     0,     0,     0,   312,   313,
+   314,   315,   316,    26,     0,    27,   318,  1523,     0,  -787,
+   319,     0,     7,     8,     9,    10,   320,     0,   245,   321,
+     0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
+     0,     0,     0,     0,     0,   325,   326,   327,     0,     0,
+    18,     0,   328,     0,     0,     0,     0,   556,   556,   556,
+    21,     0,     0,   430,   253,   159,   159,   159,     0,   329,
+     0,     0,     0,    26,     0,    27,    28,     0,     0,   640,
+     0,     0,     0,    78,     0,     0,     0,     0,     0,   193,
+     0,   204,     0,     0,     0,     0,     0,     0,     0,   194,
+     0,    51,    51,   152,     0,     0,     0,    32,   253,   204,
+   204,   477,   195,     0,     0,     0,     0,     0,     0,     0,
+     0,     8,     9,     0,   167,    12,    13,     0,    78,   730,
+     0,    14,     0,     0,     0,     0,     0,     0,   204,     0,
+     0,     0,     0,    78,     0,    16,    78,    17,    18,     0,
+  1183,     0,     0,    20,   202,     0,     0,     0,    78,     0,
+     0,     0,    23,     0,   617,     0,    78,     0,     0,     0,
+     0,    26,     0,   130,   131,     0,     0,     0,     0,   256,
+     0,    51,   260,     0,     0,     0,     0,   618,     0,     0,
+     7,     8,     9,    10,    78,     0,    78,   619,    78,    78,
+    78,     0,   253,   256,    78,   364,     0,   620,     0,    78,
+   621,   622,    78,   529,     0,    51,     0,     0,    18,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    21,    78,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     7,     8,     9,    10,     0,     0,    13,     0,     0,     0,
-     0,     0,     0,     0,   134,     0,     0,    83,     0,    83,
-     0,     0,     0,     0,  1051,    83,    83,   732,    18,     0,
-     0,     0,    83,   732,     0,   248,     0,     0,    21,     0,
-     0,   248,     0,     0,     0,     0,     0,     0,   145,   145,
-   145,    26,     0,    27,    28,     0,     0,     0,     0,     0,
-   145,     0,     0,     0,     0,  1120,  1121,   193,  1127,     0,
-     0,     0,     0,     0,     0,     0,     0,   194,     7,     8,
-     9,    10,   167,    12,    13,    32,     0,   730,     0,    14,
-   195,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  1101,     0,    16,     0,    17,    18,   623,   623,   623,
+     0,    26,     0,    27,    28,     7,     8,     9,    10,   167,
+    12,    13,     0,     0,   730,     0,    14,   473,     0,     0,
+     0,     0,     0,   625,   625,   625,     0,   474,     0,     0,
+    16,     0,    17,    18,   202,    32,     0,     0,    20,     0,
+   475,     0,     0,    21,     0,     0,   253,    23,     0,   617,
+     0,     0,   202,   202,   202,     0,    26,     0,    27,    28,
+     0,     0,   483,     0,     0,     0,     0,    51,    51,   152,
+   152,   152,  1151,   253,     0,    51,     0,     0,     0,   204,
+     0,   202,  1152,     0,     0,     7,     8,     9,    10,     0,
+    32,    13,   620,     0,     0,  1153,   622,     0,  1183,  1183,
+  1183,   640,     0,     0,     0,     0,   260,     0,     0,     0,
+     0,     0,     0,    18,     0,     7,     8,     9,    10,     0,
+   256,   516,     0,    21,     0,     0,     7,     8,     9,    10,
+    51,     0,    78,     0,     0,    51,    26,     0,    27,    28,
+     0,     0,     0,    18,     0,   204,     0,   204,     0,   477,
+   477,   477,   473,    21,     0,   204,     0,     0,     0,     0,
+   204,     0,   474,   204,    21,     0,    26,     0,    27,    28,
+    32,    78,    78,    78,    78,   475,     0,    26,     0,    27,
+    28,     0,   193,  1415,     0,    51,    51,     0,    51,     0,
+     0,     0,   194,   193,     0,     0,     0,     0,     0,     0,
+    32,     0,     0,   194,     0,   195,     0,     0,     0,     0,
+     0,    32,   256,   260,     0,     0,   195,     0,    78,     0,
+     0,     0,    78,     0,    51,    51,    51,     0,     0,    78,
+    78,     0,    78,     0,     0,     0,     7,     8,     9,    10,
+   167,    12,    13,     0,     0,     0,     0,    14,     0,     0,
+     0,    78,     0,    78,     0,     0,     0,     0,    78,    78,
+    78,    16,   202,    17,    18,    19,    78,     0,     0,    20,
+     0,     0,     0,     0,    21,     0,     0,     0,    23,     0,
+   868,   168,     0,     0,     0,     0,     0,    26,     0,    27,
+    28,     0,     0,     0,   625,   625,     0,   625,     0,     0,
+     0,     0,     0,    30,   625,     0,     0,     0,     0,     0,
+     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+     0,    32,     0,   204,     0,     0,    33,     0,   202,     0,
+   202,    34,   202,   202,   202,     0,     0,     0,   202,  1183,
+     0,     0,     0,   202,     0,     0,   202,     0,     7,     8,
+     9,    10,   205,    12,   206,     0,     0,     0,     0,    14,
+     0,     0,   947,     0,   947,   947,     0,   625,     0,     0,
+     0,     0,     0,    16,     0,    17,    18,     0,     0,     0,
      0,    20,     0,     0,     0,     0,    21,     0,     0,     0,
-    23,     0,   617,     0,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,   145,   841,   145,     0,     0,     0,     0,
-   732,     0,   248,     0,   898,  1157,   145,     0,   248,    51,
-   919,   919,   919,     0,     0,  1158,     0,     0,   641,     0,
-     0,     0,     0,    32,     0,   620,     0,     0,  1159,   622,
-     0,     0,     0,     0,     0,    51,    51,     0,   152,     0,
-    51,     0,   685,     0,  1153,     0,     0,    51,   898,     0,
-   248,     0,   248,     0,   145,   145,   632,     0,     0,     0,
-    51,     0,    51,     0,     0,     0,     0,     7,     8,     9,
-    10,   205,    12,   206,     0,     0,     0,     0,    14,     0,
-     0,     0,     0,     0,     0,   254,     0,     0,     0,     0,
-     0,   898,    16,     0,    17,    18,     0,     0,     0,   919,
-    20,     0,     0,     0,  1195,    21,     0,     0,     0,    23,
-  1201,     0,   248,     0,     0,     0,     0,   732,    26,     0,
-    27,    28,     0,   772,   207,   248,     0,     0,  1051,   732,
-     0,     0,     0,     0,    30,     0,     0,   248,   396,   396,
-     0,    51,     0,     0,    31,    51,    51,     0,     0,   254,
-     0,    51,    32,     0,   152,   152,   152,    33,     0,     0,
-     0,   431,    83,   732,     0,   732,     0,     0,     0,     0,
-    51,   248,     0,   248,    51,     7,   127,   128,    10,     0,
-    51,    51,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  1248,     0,     0,     0,     0,    51,    51,
-   152,   248,     0,    18,     0,     0,   145,   145,   254,   145,
-     0,     0,     0,    21,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    26,    51,    27,    28,
-     0,     0,     0,     0,     0,     0,     0,   623,   623,     0,
-   623,     0,    30,     0,     0,     0,     0,   915,     0,     0,
-   898,     0,    31,     0,   145,   145,   145,   145,   632,     0,
-    32,     0,   145,     0,    51,    33,     0,     0,     0,   772,
-     0,  -385,     8,     9,  -385,  -385,    12,   246,     0,   898,
-     0,     0,    14,     0,     0,   919,   919,   919,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,     0,    17,  -385,
-     0,   772,     0,     0,    20,   623,     0,   623,   623,  -385,
-   623,     0,     0,    23,     0,   617,   145,     0,     0,     0,
-     0,   145,    26,     0,   130,   131,     0,     0,     0,     7,
-   127,   128,    10,     0,   556,   516,     0,     0,   618,     0,
-     7,     8,     9,    10,     0,     0,   246,     0,   619,     0,
-     0,   396,   623,     0,     0,     0,  -385,    18,   620,   254,
-     0,   621,   622,     0,    51,     0,     0,    21,    18,     0,
-     0,   145,   145,     0,   145,     0,     0,     0,    21,     0,
-    26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,    30,     0,   396,  1410,
-     0,     0,     0,     0,     0,     0,    31,   193,     0,    51,
-   145,   632,   145,     0,    32,     0,    18,   194,     0,    33,
-     0,  1195,     0,     0,    51,    32,     0,    51,     0,   248,
-   195,     0,     0,   431,   431,   431,     0,     0,     0,    51,
-   623,     0,     0,     0,     0,     0,     0,    51,   569,   570,
-   571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
-   581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
-     7,     8,     9,    10,     0,    51,    13,    51,     0,   152,
-   152,   152,     0,     0,     0,    51,     0,     0,     0,     0,
-    51,     0,     0,    51,     0,     0,     0,     0,    18,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    21,    51,
-     0,     0,     0,   623,    78,   623,     0,     0,     0,     0,
-     0,    26,   919,    27,    28,     0,   623,     0,     0,     0,
-   915,   915,   915,     0,     0,     0,     0,   474,     0,   556,
-    78,    78,   556,    78,     0,    78,     0,   475,     0,     0,
-     0,     0,    78,     0,     0,    32,     0,   556,   556,   556,
-   476,     0,     0,     0,     0,    78,     0,    78,     0,     0,
-     0,     0,   556,     0,   623,   623,   623,     7,     8,     9,
-    10,     0,     0,   516,     0,     0,   559,     0,  1039,  1040,
-     9,    10,   919,   919,   919,     0,     0,     0,     0,     0,
-     0,     0,     0,   685,     0,    18,     0,     0,     0,     0,
-     0,   248,     0,     0,     0,    21,   145,     0,     0,   915,
-   254,     0,     0,     0,     0,     0,    21,     0,    26,     0,
-    27,    28,     0,   556,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,     0,   193,     0,    78,  1041,     0,     0,
-    78,    78,    51,     0,   194,   193,    78,     0,     0,    78,
-    78,    78,    32,     0,     0,   194,     0,   195,     0,     7,
-     8,     9,    10,    32,     0,    78,   396,     0,   195,    78,
-     0,     0,     0,   396,     0,    78,    78,     0,     0,     0,
-     0,    51,    51,    51,    51,     0,     0,    18,     0,     0,
-     0,     0,     0,    78,    78,    78,     0,    21,     0,     0,
+    23,     0,   640,     0,     0,     0,     0,     0,     0,    26,
+     0,    27,    28,     0,     0,   207,     0,     0,     0,   947,
+     0,     0,  1183,  1183,  1183,    30,     0,     0,     0,     0,
+   204,   204,     0,   204,     0,    31,     0,     0,    78,    78,
+    78,     0,     0,    32,     0,     0,    51,     0,    33,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   204,
+     0,     0,     0,     0,     0,     0,     0,   761,     0,     7,
+     8,   762,    10,   167,    12,    13,     0,     0,     0,     0,
+    14,     0,     0,   529,   529,   529,     0,  1185,     0,     0,
+     0,     0,     0,     0,    16,   625,    17,    18,    19,     0,
+   256,   260,    20,  -524,     0,     0,     0,    21,     0,     0,
+     0,    23,   763,     0,   168,     0,   202,     0,    78,     0,
+    26,     0,    27,    28,     0,     0,   764,     0,   765,     0,
+     0,     0,     0,     0,     0,     0,    30,     0,     7,     8,
+     9,    10,   167,    12,    13,     0,    31,   997,     0,    14,
+     0,     0,    78,     0,    32,   202,     0,   202,   202,    33,
+     0,     0,     0,    16,     0,    17,    18,     0,   625,     0,
+   625,    20,     0,     0,     0,  -524,    21,     0,     0,     0,
+    23,   625,     0,     0,     0,   625,   625,   625,     0,    26,
+     0,    27,    28,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   202,     0,     0,    30,     0,     0,   102,     0,
+     0,     0,     0,   202,   202,    31,   202,   121,   102,     0,
+     0,     0,     0,    32,   102,   102,     0,   102,    33,   947,
+   947,  1156,     0,     0,  1345,   127,   128,    10,     0,     0,
+     0,     0,   202,     0,    78,    78,    78,    78,    78,     0,
+     0,     0,    78,     0,     0,     0,     0,     0,     0,   235,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
-     0,     0,    78,     0,     0,   159,   474,     0,    51,     0,
-     0,     0,    51,     0,     0,     0,   475,     0,     0,    51,
-    51,     0,    51,     0,    32,     0,     0,   204,     0,   476,
-     0,     0,     8,     9,     0,   167,    12,    13,     0,    78,
-   730,     0,    14,     0,   623,   623,   623,   623,   623,     0,
-     0,     0,   623,    51,     0,    51,    16,     0,    17,    18,
-    51,    51,    51,     0,    20,     0,     0,     0,    51,     0,
-     0,     0,     0,    23,     0,   915,   915,   915,     0,     0,
-     0,     0,    26,     0,   130,   131,     0,     0,     0,   773,
-   556,     7,     8,   774,    10,   167,    12,    13,     0,     0,
-     0,     0,    14,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,     0,    17,    18,
-    19,   159,   159,   159,    20,  -523,     0,     0,     0,    21,
-     0,     0,     0,    23,   775,   640,   168,     0,     0,    78,
-     0,     0,    26,     0,    27,    28,     0,   204,   776,     0,
-   777,     0,     0,     0,     0,     0,     0,     0,    30,     0,
-     0,   623,   623,     0,   623,   204,   204,   478,    31,     0,
-     0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,     0,     0,    78,     0,   556,   556,   556,     0,
-     0,     0,   431,   254,   204,     0,     0,  -523,     0,    78,
-     0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-  1347,  1348,     9,    10,    78,     0,     0,     0,     0,     0,
-     0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-    51,    51,   152,     0,     0,     0,     0,   254,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    21,     0,
-    78,     0,    78,     0,    78,    78,    78,     0,     0,     0,
-    78,    26,     0,    27,    28,    78,     0,     0,    78,  1349,
-   529,     0,     0,     0,     0,  1189,     0,   193,     0,     0,
-     0,     0,     0,     0,    78,     0,     0,   194,     0,     0,
-     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-   195,     0,     0,     0,    51,     0,   551,     0,   300,     8,
-     9,    10,   167,    12,   301,   302,   303,   730,   304,    14,
-   625,   625,   625,     0,     0,   254,     0,  1347,   127,   128,
-    10,     0,     0,    16,   305,    17,    18,    19,    51,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,   617,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,  -310,     0,    21,   320,     0,     7,     8,
-     9,    10,   321,     0,     0,   911,   204,     0,    26,     0,
-    27,    28,     0,   323,   324,   912,  1349,     0,     0,     0,
-     0,   326,   327,   328,    30,   620,   640,     0,   913,   622,
-     0,     0,     0,     0,    31,     0,    21,     0,     0,   254,
-     0,     0,    32,     0,     0,   330,     0,    33,     0,    26,
-     0,    27,    28,     0,     0,  1417,     0,    78,     0,     0,
-    51,    51,   152,   152,   152,   193,   254,     0,    51,     0,
-     0,     0,   204,     0,   204,   194,   478,   478,   478,     0,
-     0,     0,   204,    32,     0,     0,     0,   204,   195,     0,
-   204,  1189,  1189,  1189,     0,     0,    78,    78,    78,    78,
-     0,     0,     0,     0,     0,     0,   773,     0,     7,     8,
-   774,    10,   167,    12,    13,     0,     0,     0,     0,    14,
-     0,     0,    51,     0,     0,     0,     0,    51,     0,     0,
-     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
-     0,    20,  -524,    78,     0,     0,    21,    78,     0,     0,
-    23,   775,     0,   168,    78,    78,     0,    78,     0,    26,
-     0,    27,    28,     0,     0,   776,     0,   777,     0,     0,
-     0,     0,     0,     0,     0,    30,     0,    51,    51,     0,
-    51,     0,     0,     0,     0,    31,     0,     0,    78,     0,
-    78,     0,     0,    32,     0,    78,    78,    78,    33,     0,
-     0,     0,     0,    78,     0,     0,   880,     0,     0,     0,
-     0,     0,     0,     0,  -524,     0,    51,    51,    51,     0,
-   625,   625,   202,   625,     0,     0,     0,     0,     0,     0,
-   625,     0,     7,     8,     9,    10,   167,    12,    13,     0,
-     0,     0,     0,    14,     0,     0,     0,   257,     0,   204,
-   261,     0,     0,     0,     0,     0,     0,    16,     0,    17,
-    18,    19,     0,     0,     0,    20,     0,     0,     0,     0,
-    21,   257,     0,   365,    23,     0,     0,   168,     0,     0,
-     0,     0,     0,    26,     0,    27,    28,     0,   959,     0,
-   959,   959,     0,   625,     0,     0,     0,     0,     0,    30,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
-     0,     0,     0,     0,     0,     0,     0,    32,     0,     0,
-     0,     0,    33,     0,     0,     0,     0,    34,  1189,   640,
-     0,     0,     0,     0,     0,   959,     0,     0,     0,     0,
-     0,     0,   202,     0,     0,     0,   204,   204,     0,   204,
-     0,     0,     0,     7,     8,     9,    10,   214,   215,   216,
-   202,   202,   202,     0,    14,    78,    78,    78,     0,     0,
-   484,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    18,     0,     0,     0,     0,    20,   204,     0,   202,
-     0,    21,     0,     0,     0,    23,     0,   617,  1189,  1189,
-  1189,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-  1191,   529,   529,   529,     0,   261,     0,     0,     0,     0,
-   955,     0,    51,   625,     0,     0,     0,     0,     0,   257,
-   956,     0,     0,     0,     0,     0,     0,     0,    32,    78,
-   620,     0,     0,  1000,   622,     0,     0,     0,     0,     0,
-     0,   551,     0,     7,     8,     9,    10,   167,    12,   301,
-   302,   303,   730,   304,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,    78,     0,     0,     0,     0,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,   625,   617,   625,   313,
-   314,   315,   316,   317,    26,     0,    27,    28,  -310,   625,
-     0,   320,     0,   625,   625,   625,     0,   321,     0,     0,
-  1186,   257,   261,     0,     0,     0,     0,     0,   323,   324,
-  1187,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-   620,     0,     0,  1188,   622,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   959,   959,  1162,
-   330,     0,     0,     0,     0,    78,    78,    78,    78,    78,
-     0,   202,     0,    78,     0,     0,     0,     0,     0,     0,
-     0,     0,     7,     8,     9,    10,   167,    12,    13,     0,
-     0,     0,     0,    14,     0,     0,  1191,  1191,  1191,     0,
-     0,     0,  1162,     0,     0,     0,     0,    16,     0,    17,
-    18,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-    21,     0,     0,     0,    23,     0,     0,    78,     0,     0,
-     0,   204,    78,    26,     0,    27,    28,   202,     0,   202,
-     0,   202,   202,   202,     0,     0,     0,   202,     0,    30,
-     0,     0,   202,     0,     0,   202,     0,     0,     0,    31,
-     0,     0,   263,     0,     0,     8,     9,    32,     0,    12,
-    13,     0,    33,     0,     0,    14,     0,     0,     0,     0,
-     0,     0,    78,    78,     0,    78,     0,     0,     0,    16,
-     0,    17,     0,     0,     0,     0,     0,    20,     0,   264,
-   265,     0,     0,     0,     0,     0,    23,     0,   266,   880,
-   880,     0,   880,     0,     0,    26,     0,   130,   131,     0,
-   267,    78,    78,    78,   268,   269,   270,   271,   272,   273,
-   274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-   284,   285,   286,   287,   288,     0,     0,   289,   290,   291,
-     0,     0,   292,     0,     0,   293,     0,   959,   959,  1162,
-  1162,  1162,     0,     0,     0,   959,     0,     0,     0,     0,
-     0,   294,     0,   773,     0,     7,     8,   774,    10,   167,
-    12,    13,     0,     0,     0,     0,    14,     0,  1162,  1162,
-  1162,     0,     0,     0,     0,     0,     0,     0,   257,   261,
-    16,     0,    17,    18,    19,     0,   102,     0,    20,  -526,
-     0,     0,     0,    21,   202,   121,   102,    23,   775,   204,
-   168,     0,   102,   102,     0,   102,    26,     0,    27,    28,
-     0,     0,   776,  1191,   777,     8,     9,     0,     0,    12,
-    13,     0,    30,     0,     0,    14,     0,     0,     0,     0,
-     0,     0,    31,   202,     0,   202,   202,   235,     0,    16,
-    32,    17,     0,     0,     0,    33,     0,    20,     0,     0,
-     0,     0,     0,     0,   959,   959,    23,   959,     0,     0,
-     0,  -526,     0,     0,     0,    26,     0,   130,   131,     0,
+     0,     0,    21,     0,     0,  1185,  1185,  1185,  1156,     7,
+     8,     9,    10,     0,     0,    26,     0,    27,    28,     0,
+     0,     0,     0,  1347,     0,     0,     0,     0,     0,     0,
+     0,    30,     0,     0,     0,     0,     0,    78,     0,   204,
+     0,    31,    78,     0,     0,     0,     0,    21,   388,    32,
+   121,     0,     0,     0,    33,     0,     0,   102,   102,     0,
+    26,     0,    27,    28,   102,   102,     0,     0,   102,   102,
+   102,     0,   416,   102,   102,   102,   193,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   194,     0,     0,     0,
+     0,     0,    78,    78,    32,    78,     0,     0,     0,   195,
+     0,     0,     0,     0,     0,   256,   260,   256,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   868,   868,     0,
+   868,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    78,    78,    78,     0,     0,     0,     0,     0,     0,
+     0,     0,   202,   202,  1154,     0,     0,     0,     0,   256,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   202,     0,     0,  1191,  1191,  1191,     0,     0,     0,     0,
-     0,   202,   202,   204,   202,   204,   389,     0,   121,     0,
-     0,     0,     0,     0,   871,   102,   102,    78,     0,     0,
-     0,     0,   102,   102,     0,     0,   102,   102,   102,   261,
-   417,   102,   102,   102,     0,     0,     0,     0,     0,     0,
-     0,     0,   202,     0,  1425,     0,  1285,  1286,  1287,    10,
-   167,    12,   301,   302,   303,     0,   304,    14,  1288,     0,
-  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,  1297,  1298,
-    15,    16,   305,    17,    18,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,  1299,    23,  1300,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,  1301,
-   319,   717,     0,  1302,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,   478,     0,     0,     0,   499,
-   102,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,     0,   329,     0,  1303,     0,
-     0,   102,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  1426,   330,   573,   574,   575,   576,   577,   578,
+     0,   498,   102,     0,     0,   947,   947,  1156,  1156,  1156,
+     0,     0,     0,   947,     0,     0,     0,     0,     0,   260,
+     0,     0,   102,     0,     0,     0,     0,     0,     0,     0,
+     0,  1154,     0,     0,     0,     0,  1156,  1156,  1156,     0,
+     0,     0,     0,     7,     8,     9,    10,   214,   215,   216,
+     0,     0,     0,     0,    14,     0,     0,     0,     0,     0,
+     0,   102,   202,     0,     0,     0,     0,     0,   204,     0,
+     0,    18,     0,     0,     0,     0,    20,     0,     0,     0,
+     0,    21,     0,   483,     0,    23,  1185,   617,     0,     0,
+     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   102,
+   943,   102,   102,     0,     0,     0,     0,     0,     0,     0,
+   944,     0,     0,   947,   947,     0,   947,     0,    32,     0,
+   620,     0,     0,   992,   622,   574,   575,   576,   577,   578,
    579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
-   589,   590,     0,     0,     0,   257,   261,   257,     0,     0,
-   102,     0,  1477,     0,     0,   478,   478,   478,   574,   575,
-   576,   577,   578,   579,   580,   581,   582,   583,   584,   585,
-   586,   587,   588,   589,   590,     0,     0,     0,     0,   204,
-     0,     0,   202,   202,  1160,     0,     0,     0,     0,   257,
-     0,     0,     0,     0,     0,     0,     0,     0,   102,     0,
-   102,   102,  1478,   569,   570,   571,   572,   573,   574,   575,
-   576,   577,   578,   579,   580,   581,   582,   583,   584,   585,
-   586,   587,   588,   589,   590,     0,     0,  1160,     0,     0,
-     0,     0,     0,     0,     0,  1448,     0,  -477,  -477,  -477,
-  -477,  -477,  -477,  -477,     0,   102,  -477,     0,  -477,     0,
-     0,     0,     0,     0,     0,     0,   202,     0,     0,  -477,
-     0,  -477,     0,     0,   102,  -477,     0,     0,     0,     0,
-  -477,   102,     0,     0,   102,  -477,     0,   484,     0,  -477,
-     0,  -477,     0,     0,     0,     0,   102,     0,  -477,     0,
-  -477,  -477,  -477,  -477,  -477,     0,  -477,  -477,  -477,  -477,
+   589,   590,     0,     0,     0,     0,   102,     0,     0,  1185,
+  1185,  1185,   204,     0,   204,     0,     0,   256,     0,     0,
+     0,     0,     0,     0,     0,   102,     8,     9,     0,   167,
+    12,    13,   102,    78,   730,   102,    14,     0,   202,   202,
+   202,   202,  1154,     0,  1269,     0,   202,   102,     0,     0,
+    16,     0,    17,    18,     0,     0,     0,     0,    20,     0,
+     0,     0,     0,     0,     0,     0,     0,    23,     0,  1154,
+  1154,  1154,     0,     0,     0,     0,    26,     0,   130,   131,
+     0,     0,     0,     0,   720,     0,   820,   821,   822,    10,
+     0,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,   202,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   304,    17,   102,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,   477,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,   823,
+   824,   721,   102,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,   202,   202,     0,   202,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,     0,   328,   825,     0,     0,
+     0,  1449,     0,  -477,  -477,  -477,  -477,  -477,  -477,  -477,
+     0,     0,  -477,   329,  -477,   202,     0,   202,     0,     0,
+   477,   477,   477,     0,     0,  -477,     0,  -477,     0,     0,
+     0,  -477,     0,     0,     0,     0,  -477,     0,   102,     0,
+     0,  -477,     0,     0,   204,  -477,     0,  -477,     0,   102,
+   102,     0,   102,   102,  -477,     0,  -477,  -477,  -477,  -477,
+  -477,     0,  -477,  -477,  -477,  -477,  -477,  -477,  -477,  -477,
   -477,  -477,  -477,  -477,  -477,  -477,  -477,  -477,  -477,  -477,
-  -477,  -477,  -477,  -477,  -477,  -477,  -477,  -477,  -477,     0,
-  -477,  -477,  -477,     0,  -477,  -477,  -477,  -477,  -477,  -477,
-     0,  -477,     0,     0,     0,     0,  1449,     0,     0,     0,
-     0,  -477,  -477,  -477,     0,  -477,     0,     0,     0,     0,
-     0,     0,     0,   102,     0,   765,     0,     0,     0,     0,
-     0,   257,   575,   576,   577,   578,   579,   580,   581,   582,
-   583,   584,   585,   586,   587,   588,   589,   590,     0,     0,
-   102,     0,   202,   202,   202,   202,  1160,     0,  1274,     0,
-   202,     0,     0,     0,     0,     0,     0,   729,     0,   300,
-     8,     9,    10,   167,    12,   301,   302,   303,   730,   304,
-    14,     0,     0,  1160,  1160,  1160,     0,     0,     0,     0,
-     0,     0,     0,     0,    16,   305,    17,    18,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,     0,   202,   313,   314,   315,   316,   317,
-    26,     0,    27,   319,     0,     0,   102,   320,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,   102,   102,     0,
-   102,   102,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,     0,     0,     0,     0,   329,
-     0,     0,     0,     8,     9,     0,   167,    12,    13,   202,
-   202,     0,   202,    14,  -796,     0,   330,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,     0,    17,
-    18,     0,     0,   102,     0,    20,     0,     0,     0,     0,
-   102,   121,     0,     0,   679,     0,     0,   168,   202,     0,
-   202,     0,   235,    26,     0,   130,   131,     0,     0,     0,
-     0,  1284,     0,  1285,  1286,  1287,    10,   167,    12,   301,
-   302,   303,     0,   304,    14,  1288,   765,  1289,  1290,  1291,
-  1292,  1293,  1294,  1295,  1296,  1297,  1298,    15,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,  1299,    23,  1300,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,  1301,   319,   717,     0,
-  1302,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,   765,     0,     0,   102,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,     0,  1303,     0,     0,     0,     0,
-  1160,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   330,   102,   102,   102,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   102,     0,   569,   570,   571,   572,   573,
-   574,   575,   576,   577,   578,   579,   580,   581,   582,   583,
-   584,   585,   586,   587,   588,   589,   590,     0,     0,     0,
-     0,   844,     0,   300,     8,     9,    10,   167,    12,   301,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
-  1160,  1160,  1160,  1238,     0,     0,     0,     0,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,   202,    23,   102,     0,   102,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,  1522,   102,
-  -786,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,   720,   329,   832,   833,   834,    10,     0,    12,
-   533,   302,   303,     0,   304,    14,     0,     0,     0,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,   835,   836,   721,
-     0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,   765,   326,   327,   328,
-     0,     0,     0,     0,   329,   837,   551,     0,   300,     8,
-     9,    10,     0,    12,   301,   302,   303,     0,   304,    14,
-   992,   330,     0,   102,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,  -310,     8,     9,   320,     0,    12,   246,
-     0,     0,   321,     0,    14,   552,     0,     0,     0,   102,
-   102,     0,   102,   323,   324,   553,     0,     0,    16,     0,
-    17,   326,   327,   328,     0,     0,    20,     0,   554,     0,
-     0,     0,     0,     0,     0,    23,     0,     0,     0,     0,
-     0,     0,     0,     0,    26,   330,   130,   131,     0,     0,
-   720,     0,   832,   833,   834,    10,     0,    12,   533,   302,
-   303,     0,   304,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,   765,     0,     0,     0,     0,    16,   305,    17,
-     0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,   765,   835,   836,   721,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   322,
-     0,     0,   102,     0,   102,     0,     0,   323,   324,   325,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,     0,   329,   837,   720,     0,   832,   833,   834,    10,
-     0,    12,   533,   302,   303,     0,   304,    14,     0,   330,
+  -477,  -477,  -477,  -477,  -477,     0,  -477,  -477,  -477,     0,
+  -477,  -477,  -477,  -477,  -477,  -477,     0,  -477,     0,     0,
+     0,     0,  1450,     0,     0,   102,     0,  -477,  -477,  -477,
+     0,  -477,   102,   121,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   235,     0,     0,     0,     0,   551,
+  1154,   299,     8,     9,    10,   167,    12,   300,   301,   302,
+   730,   303,    14,     0,     0,     0,     0,     0,   977,     0,
+     0,     0,     0,     0,     0,     0,    16,   304,    17,    18,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,   617,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,   318,  -310,     0,     0,   319,
+     0,     0,     0,     0,   977,   320,     0,   102,   899,     0,
+     0,     0,     0,  1154,  1154,  1154,   322,   323,   900,     0,
+     0,     0,     0,     0,   325,   326,   327,     0,   620,     0,
+     0,   901,   622,     0,     0,     0,     0,   202,     0,     0,
+     0,   102,   102,   102,     0,     0,     0,     0,   329,     0,
+     0,     0,     0,   102,     0,  1423,     0,  1280,  1281,  1282,
+    10,   167,    12,   300,   301,   302,     0,   303,    14,  1283,
+     0,  1284,  1285,  1286,  1287,  1288,  1289,  1290,  1291,  1292,
+  1293,    15,    16,   304,    17,    18,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,  1294,    23,
+  1295,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+  1296,   318,   717,     0,  1297,   319,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,   102,     0,   102,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,   102,
+   325,   326,   327,     0,     0,     0,     0,   328,     0,  1298,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,  1424,   329,     0,  1279,     0,  1280,  1281,
+  1282,    10,   167,    12,   300,   301,   302,     0,   303,    14,
+  1283,     0,  1284,  1285,  1286,  1287,  1288,  1289,  1290,  1291,
+  1292,  1293,    15,    16,   304,    17,    18,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,  1294,
+    23,  1295,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,  1296,   318,   717,   977,  1297,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,     0,     0,     0,   328,     0,
+  1298,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   551,   329,     7,     8,     9,    10,
+   167,    12,   300,   301,   302,   730,   303,    14,     0,   102,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,   835,
-   836,   721,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,   720,   329,   832,   833,   834,
-    10,     0,    12,   533,   302,   303,     0,   304,    14,     0,
-     0,     0,  -481,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-   835,   836,   721,     0,     0,   320,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,   720,   329,   300,     8,
-     9,    10,     0,    12,   533,   302,   303,     0,   304,    14,
-     0,     0,     0,  1323,   330,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,   721,     0,     0,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,     0,   329,     0,
-   551,     0,     7,     8,     9,    10,  1327,    12,   301,   302,
-   303,     0,   304,    14,     0,   330,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,    28,  -310,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,  1493,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,  1494,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,   720,  1495,   300,     8,     9,    10,     0,    12,   533,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
-    17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,   721,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,   844,   329,   300,     8,     9,    10,     0,    12,
-   533,   302,   303,     0,   304,    14,     0,     0,     0,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
-     0,     0,   320,  -786,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,     0,     0,  1574,   329,   300,     8,     9,    10,     0,
-    12,   301,   302,   303,     0,   304,    14,     0,     0,     0,
-     0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,  -194,   320,     0,     0,     0,     0,     0,   321,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,   844,   329,   300,     8,     9,    10,
-     0,    12,   533,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,   933,   329,   300,     8,     9,
-    10,     0,    12,   533,   302,   303,     0,   304,    14,     0,
-     0,  -786,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,   319,     0,     0,     0,   320,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,   935,   329,   300,     8,
-     9,    10,     0,    12,   533,   302,   303,     0,   304,    14,
-     0,     0,     0,     0,   330,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,     0,     0,     0,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,  1506,   329,   300,
-     8,     9,    10,     0,    12,   533,   302,   303,     0,   304,
-    14,     0,     0,     0,     0,   330,     0,     0,     0,     0,
-     0,     0,     0,     0,    16,   305,    17,     0,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,    27,   319,     0,     0,     0,   320,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,   300,     8,     9,    10,   329,
-    12,   533,   302,   303,     0,   304,    14,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   330,     0,     0,     0,
-    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
-     0,   773,   322,     7,     8,   774,    10,   167,    12,    13,
-   323,   324,   325,     0,    14,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,     0,   329,     0,     0,    16,     0,
-    17,    18,    19,     0,     0,     0,    20,  -525,     0,     0,
-     0,    21,   330,   883,     0,    23,   775,     0,   168,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-   776,     0,   777,     0,     0,     0,     0,     0,     0,     0,
-    30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    31,     0,     0,     0,     0,     0,     0,     0,    32,     0,
-     0,     0,     0,    33,     0,     0,  1285,  1286,  1287,    10,
-   167,    12,   301,   302,   303,     0,   304,    14,  1288,  -525,
-  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,  1297,  1298,
-    15,    16,   305,    17,    18,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,  1299,    23,  1300,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,  1301,
-   319,   717,     0,  1302,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,     0,   329,     0,  1303,     0,
+     0,    16,   304,    17,    18,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+   617,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+    28,  -310,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,  1180,     0,   102,   102,     0,   102,     0,
+     0,   322,   323,  1181,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,   620,     0,     0,  1182,   622,   576,   577,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,   329,     0,   729,     0,   299,     8,     9,
+    10,   167,    12,   300,   301,   302,   730,   303,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   977,     0,
+     0,     0,    16,   304,    17,    18,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,   977,   319,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,   102,
+     0,   102,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,     0,     0,     0,   720,   328,   820,   821,
+   822,    10,     0,    12,   533,   301,   302,     0,   303,    14,
+     0,     0,  -797,     0,   329,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,   304,    17,     0,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,   823,   824,   721,     0,     0,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,     0,     0,     0,   328,   825,
+     0,     0,     0,     0,     0,   977,     0,     0,     0,     0,
+     0,     0,     0,     0,   984,   329,   551,     0,   299,     8,
+     9,    10,     0,    12,   300,   301,   302,     0,   303,    14,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  1430,   330,  1285,  1286,  1287,    10,   167,    12,
-   301,   302,   303,     0,   304,    14,  1288,     0,  1289,  1290,
-  1291,  1292,  1293,  1294,  1295,  1296,  1297,  1298,    15,    16,
-   305,    17,    18,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,  1299,    23,  1300,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,  1301,   319,   717,
-     0,  1302,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,     0,     0,     0,   329,     0,  1303,     0,  1285,  1286,
-  1287,    10,   167,    12,   301,   302,   303,     0,   304,    14,
-  1288,   330,  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,
-  1297,  1298,    15,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,  1299,
-    23,  1300,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,  1301,   319,  1551,     0,  1302,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,     0,   329,     0,
-  1303,     0,  1285,  1286,  1287,    10,   167,    12,   301,   302,
-   303,     0,   304,    14,  1288,   330,  1289,  1290,  1291,  1292,
-  1293,  1294,  1295,  1296,  1297,  1298,    15,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,  1299,    23,  1300,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,  1301,   319,     0,     0,  1302,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   322,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   325,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,     0,   329,     0,  1303,   300,     8,     9,    10,   167,
-    12,   301,   302,   303,   730,   304,    14,     0,     0,   330,
+     0,     0,     0,    16,   304,    17,    18,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,   318,  -310,     0,     0,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,   552,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   553,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,     0,     0,   720,   554,   820,
+   821,   822,    10,     0,    12,   533,   301,   302,     0,   303,
+    14,     0,     0,     0,     0,   329,     0,     0,     0,     0,
+     0,     0,     0,     0,    16,   304,    17,     0,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,   823,   824,   721,     0,     0,   319,     0,     0,
+     0,     0,     0,   320,     0,     0,   321,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,   324,     0,     0,     0,
+     0,     0,   325,   326,   327,     0,     0,     0,   720,   328,
+   820,   821,   822,    10,     0,    12,   533,   301,   302,     0,
+   303,    14,     0,     0,     0,  -481,   329,     0,     0,     0,
+     0,     0,     0,     0,     0,    16,   304,    17,     0,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,   823,   824,   721,     0,     0,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,     0,     0,   720,
+   328,   299,     8,     9,    10,     0,    12,   533,   301,   302,
+     0,   303,    14,     0,     0,     0,  1318,   329,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   304,    17,     0,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,     0,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,   318,   721,     0,     0,   319,
+     0,     0,     0,     0,     0,   320,     0,     0,   321,     0,
+     0,     0,     0,     0,     0,     0,   322,   323,   324,     0,
+     0,     0,     0,     0,   325,   326,   327,     0,     0,     0,
+     0,   328,     0,   551,     0,     7,     8,     9,    10,  1322,
+    12,   300,   301,   302,     0,   303,    14,     0,   329,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,   305,    17,    18,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,   617,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
-     0,     0,   911,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   912,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,   620,     0,     0,   913,   622,     7,     8,     9,
-    10,   167,    12,   301,   302,   303,   730,   304,    14,     0,
-     0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,    18,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,   617,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,    28,     0,     0,     0,   320,     0,     0,     0,     0,
-     0,   321,     0,     0,  1186,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,  1187,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,   620,     0,     0,  1188,   622,   300,
-     8,     9,    10,     0,    12,   301,   302,   303,     0,   304,
-    14,     0,     0,     0,   330,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    16,   305,    17,    18,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,   617,     0,   313,   314,   315,   316,   317,
-    26,     0,    27,   319,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   321,     0,     0,   911,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   912,     0,     0,     0,
-     0,     0,   326,   327,   328,     0,   620,     0,     0,   913,
-   622,     7,     8,     9,    10,     0,    12,   301,   302,   303,
-     0,   304,    14,     0,     0,     0,   330,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   305,    17,    18,
-    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,     0,    23,     0,   617,     0,   313,   314,   315,
-   316,   317,    26,     0,    27,    28,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   321,     0,     0,  1186,     0,
-     0,     0,     0,     0,     0,     0,   323,   324,  1187,     0,
-     0,     0,     0,     0,   326,   327,   328,     0,   620,     0,
-     0,  1188,   622,   300,     8,     9,    10,     0,    12,   533,
-   302,   303,     0,   304,    14,     0,     0,     0,   330,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,     0,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   552,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   553,     0,     0,     0,     0,     0,   326,   327,   328,   300,
-     8,     9,    10,   554,    12,   533,   302,   303,     0,   304,
-    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   330,     0,     0,     0,    16,   305,    17,     0,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,    27,   319,     0,     0,  1403,   320,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,     0,     0,     0,     0,   329,
-   300,     8,     9,    10,   167,    12,   301,   302,   303,     0,
-   304,    14,     0,     0,     0,     0,   330,     0,     0,     0,
-     0,     0,     0,     0,     0,    16,   305,    17,    18,    19,
-     0,   306,   307,    20,     0,   308,   309,   310,    21,   311,
-   312,     0,    23,     0,     0,     0,   313,   314,   315,   316,
-   317,    26,     0,    27,   319,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   321,     0,     0,   322,     0,     0,
-     0,     0,     0,     0,     0,   323,   324,   325,     0,     0,
-     0,     0,     0,   326,   327,   328,     7,     8,     9,    10,
-   329,    12,   533,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,    16,   305,    17,    18,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-    28,     0,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,  1493,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,  1494,     0,     0,     0,     0,     0,   326,
-   327,   328,   300,     8,     9,    10,  1495,    12,   301,   302,
-   303,     0,   304,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,    16,   305,    17,
-     0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,   318,   319,     0,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   322,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   325,
-     0,     0,     0,     0,     0,   326,   327,   328,   300,     8,
-     9,    10,   329,    12,   301,   302,   303,     0,   304,    14,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,     0,     0,     0,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,   300,     8,     9,    10,   329,    12,
-   533,   302,   303,     0,   304,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
-     0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-   300,     8,     9,    10,   329,    12,   533,   302,   303,     0,
-   304,    14,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   330,     0,     0,     0,    16,   305,    17,     0,    19,
-     0,   306,   307,    20,     0,   308,   309,   310,    21,   311,
-   312,     0,    23,     0,     0,     0,   313,   314,   315,   316,
-   317,    26,     0,    27,   319,   566,     0,     0,     0,     0,
-     0,     0,     0,     0,   321,     0,     0,   322,     0,     0,
-     0,     0,     0,     0,     0,   323,   324,   325,     0,     0,
-     0,     0,     0,   326,   327,   328,   300,     8,     9,    10,
-   567,    12,   533,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,     0,   329,   605,   300,     8,
-     9,    10,     0,    12,   533,   302,   303,     0,   304,    14,
-     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   321,     0,     0,   552,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   553,     0,     0,     0,     0,
-     0,   326,   327,   328,  1146,     8,     9,    10,   554,    12,
-   533,   302,   303,     0,   304,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   330,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
-     0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-     7,     8,     9,    10,   329,    12,   301,   302,   303,     0,
-   304,    14,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   330,     0,     0,     0,    16,   305,    17,    18,    19,
-     0,   306,   307,    20,     0,   308,   309,   310,    21,   311,
-   312,     0,    23,     0,     0,     0,   313,   314,   315,   316,
-   317,    26,     0,    27,    28,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   321,     0,     0,  1493,     0,     0,
-     0,     0,     0,     0,     0,   323,   324,  1494,     0,     0,
-     0,     0,     0,   326,   327,   328,   300,     8,     9,    10,
-  1495,    12,   533,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,   300,     8,     9,    10,   534,    12,   533,   302,
-   303,     0,   304,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,    16,   305,    17,
-     0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,   319,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   321,     0,     0,   322,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   325,
-     0,     0,     0,     0,     0,   326,   327,   328,   300,     8,
-     9,    10,   537,    12,   533,   302,   303,     0,   304,    14,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   330,
-     0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   321,     0,     6,   322,     7,     8,     9,    10,
-    11,    12,    13,   323,   324,   325,     0,    14,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,     0,   329,     0,
-    15,    16,     0,    17,    18,    19,     0,     0,     0,    20,
-     0,     0,     0,     0,    21,   330,     0,    22,    23,    24,
-     0,    25,     0,     0,     0,     0,     0,    26,     0,    27,
-    28,     0,     0,    29,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
-     0,     0,   773,    31,     7,     8,   774,    10,   167,    12,
-    13,    32,     0,     0,     0,    14,    33,     0,     0,     0,
-     0,    34,     0,     0,     0,     0,     0,     0,     0,    16,
-     0,    17,    18,    19,     0,     0,     0,    20,     0,     0,
-     0,     0,    21,     0,     0,     0,    23,   775,     0,   168,
+    16,   304,    17,    18,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,     0,    23,     0,     0,
+     0,   312,   313,   314,   315,   316,    26,     0,    27,    28,
+  -310,     0,     0,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,  1494,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,  1495,     0,     0,     0,     0,     0,   325,   326,
+   327,     0,     0,     0,   720,  1496,   299,     8,     9,    10,
+     0,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,     0,   329,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   304,    17,     0,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,   721,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,   832,   328,   299,     8,     9,
+    10,     0,    12,   533,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,   329,     0,     0,     0,     0,     0,     0,
+     0,     0,    16,   304,    17,     0,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,     0,   319,  -787,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,     0,     0,     0,  1575,   328,   299,     8,
+     9,    10,     0,    12,   300,   301,   302,     0,   303,    14,
+     0,     0,     0,     0,   329,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,   304,    17,     0,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,   318,     0,     0,  -194,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,     0,     0,   832,   328,   299,
+     8,     9,    10,     0,    12,   533,   301,   302,     0,   303,
+    14,     0,     0,     0,     0,   329,     0,     0,     0,     0,
+     0,     0,     0,     0,    16,   304,    17,     0,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,   318,     0,     0,     0,   319,     0,     0,
+     0,     0,     0,   320,   262,     0,   321,     8,     9,     0,
+     0,    12,    13,     0,   322,   323,   324,    14,     0,     0,
+     0,     0,   325,   326,   327,     0,     0,     0,     0,   328,
+     0,    16,     0,    17,     0,     0,     0,     0,     0,    20,
+     0,   263,   264,     0,  -787,     0,   329,     0,    23,     0,
+   265,     0,     0,     0,     0,     0,     0,    26,     0,   130,
+   131,     0,   266,     0,     0,     0,   267,   268,   269,   270,
+   271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+   281,   282,   283,   284,   285,   286,   287,     0,     0,   288,
+   289,   290,     0,     0,   291,     0,   921,   292,   299,     8,
+     9,    10,     0,    12,   533,   301,   302,     0,   303,    14,
+     0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,   304,    17,     0,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,   318,     0,     0,     0,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,     0,     0,   923,   328,   299,
+     8,     9,    10,     0,    12,   533,   301,   302,     0,   303,
+    14,     0,     0,     0,     0,   329,     0,     0,     0,     0,
+     0,     0,     0,     0,    16,   304,    17,     0,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,   318,     0,     0,     0,   319,     0,     0,
+     0,     0,     0,   320,     0,     0,   321,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,   324,     0,     0,     0,
+     0,     0,   325,   326,   327,     0,     0,     0,  1507,   328,
+   299,     8,     9,    10,     0,    12,   533,   301,   302,     0,
+   303,    14,     0,     0,     0,     0,   329,     0,     0,     0,
+     0,     0,     0,     0,     0,    16,   304,    17,     0,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,    27,   318,     0,     0,     0,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,   299,     8,     9,    10,
+   328,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   329,     0,     0,
+     0,    16,   304,    17,     0,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,     0,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,   761,   321,     7,     8,   762,    10,   167,    12,
+    13,   322,   323,   324,     0,    14,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,     0,   328,     0,     0,    16,
+     0,    17,    18,    19,     0,     0,     0,    20,  -525,     0,
+     0,     0,    21,   329,   871,     0,    23,   763,     0,   168,
      0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
-     0,   776,     0,   777,     0,     0,     0,     0,     0,     0,
-     0,    30,  1039,     8,   774,    10,   205,    12,   206,     0,
-     0,    31,     0,    14,     0,     0,     0,     0,     0,    32,
-     0,     0,     0,     0,    33,     0,     0,    16,     0,    17,
-    18,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-    21,     0,     0,     0,    23,     0,     0,     0,     0,     0,
-     0,     0,     0,    26,     0,    27,    28,     0,     0,     0,
-     0,  1041,     0,     0,     0,     0,     0,     0,     0,    30,
-     7,     8,     9,    10,   205,    12,   206,     0,     0,    31,
-     0,    14,     0,     0,     0,     0,     0,    32,     0,     0,
-     0,     0,    33,     0,     0,    16,     0,    17,    18,     0,
-     0,     0,     0,    20,     0,     0,     0,     0,    21,     0,
-     0,     0,    23,     0,     0,     0,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,     0,  1420,     0,     7,
-     8,     9,    10,   205,    12,   206,     0,    30,     0,     0,
-    14,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-     0,     0,     0,     0,    16,    32,    17,    18,     0,     0,
-    33,     0,    20,     0,     0,     0,     0,    21,     0,     0,
-     0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     8,     9,     0,   167,    12,    13,
-     0,     0,  1545,     0,    14,     0,    30,     8,     9,     0,
-   205,    12,   206,     0,     0,     0,    31,    14,    16,     0,
-    17,    18,     0,     0,    32,     0,    20,     0,     0,    33,
-     0,    16,     0,    17,    18,    23,     0,     0,     0,    20,
-     0,     0,     0,     0,    26,     0,   130,   131,    23,     0,
-     0,     8,     9,     0,     0,    12,    13,    26,     0,   130,
-   131,    14,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    16,     0,    17,     0,     0,
-     0,     0,     0,    20,     0,     0,     0,     0,     0,     0,
+     0,   764,     0,   765,     0,     0,     0,     0,     0,     0,
+     0,    30,   761,     0,     7,     8,   762,    10,   167,    12,
+    13,    31,     0,     0,     0,    14,     0,     0,     0,    32,
+     0,     0,     0,     0,    33,     0,     0,     0,     0,    16,
+     0,    17,    18,    19,     0,     0,     0,    20,  -527,     0,
+  -525,     0,    21,     0,     0,     0,    23,   763,     0,   168,
+     0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
+     0,   764,     0,   765,     0,     0,     0,     0,     0,     0,
+     0,    30,   761,     0,     7,     8,   762,    10,   167,    12,
+    13,    31,     0,     0,     0,    14,     0,     0,     0,    32,
+     0,     0,     0,     0,    33,     0,     0,     0,     0,    16,
+     0,    17,    18,    19,     0,     0,     0,    20,  -526,     0,
+  -527,     0,    21,     0,     0,     0,    23,   763,     0,   168,
+     0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
+     0,   764,     0,   765,     0,     0,     0,     0,     0,     0,
+     0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    31,     0,     0,     0,     0,     0,     0,     0,    32,
+     0,     0,     0,     0,    33,     0,     0,  1280,  1281,  1282,
+    10,   167,    12,   300,   301,   302,     0,   303,    14,  1283,
+  -526,  1284,  1285,  1286,  1287,  1288,  1289,  1290,  1291,  1292,
+  1293,    15,    16,   304,    17,    18,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,  1294,    23,
+  1295,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+  1296,   318,   717,     0,  1297,   319,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,     0,     0,     0,     0,   328,     0,  1298,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  1428,   329,  1280,  1281,  1282,    10,   167,
+    12,   300,   301,   302,     0,   303,    14,  1283,     0,  1284,
+  1285,  1286,  1287,  1288,  1289,  1290,  1291,  1292,  1293,    15,
+    16,   304,    17,    18,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,  1294,    23,  1295,     0,
+     0,   312,   313,   314,   315,   316,    26,     0,  1296,   318,
+   717,     0,  1297,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,   321,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,   324,     0,     0,     0,     0,     0,   325,   326,
+   327,     0,     0,     0,     0,   328,     0,  1298,     0,  1280,
+  1281,  1282,    10,   167,    12,   300,   301,   302,     0,   303,
+    14,  1283,   329,  1284,  1285,  1286,  1287,  1288,  1289,  1290,
+  1291,  1292,  1293,    15,    16,   304,    17,    18,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+  1294,    23,  1295,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,  1296,   318,  1552,     0,  1297,   319,     0,     0,
+     0,     0,     0,   320,     0,     0,   321,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,   324,     0,     0,     0,
+     0,     0,   325,   326,   327,     0,     0,     0,     0,   328,
+     0,  1298,     0,  1280,  1281,  1282,    10,   167,    12,   300,
+   301,   302,     0,   303,    14,  1283,   329,  1284,  1285,  1286,
+  1287,  1288,  1289,  1290,  1291,  1292,  1293,    15,    16,   304,
+    17,    18,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,  1294,    23,  1295,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,  1296,   318,     0,     0,
+  1297,   319,     0,     0,     0,     0,     0,   320,     0,     0,
+   321,     0,     0,     0,     0,     0,     0,     0,   322,   323,
+   324,     0,     0,     0,     0,     0,   325,   326,   327,     0,
+     0,     0,     0,   328,     0,  1298,   299,     8,     9,    10,
+   167,    12,   300,   301,   302,   730,   303,    14,     0,     0,
+   329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   304,    17,    18,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+   617,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,     0,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   899,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   900,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,   620,     0,     0,   901,   622,     7,     8,
+     9,    10,   167,    12,   300,   301,   302,   730,   303,    14,
+     0,     0,     0,   329,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,   304,    17,    18,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,   617,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,    28,     0,     0,     0,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,  1180,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,  1181,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,   620,     0,     0,  1182,   622,
+   299,     8,     9,    10,     0,    12,   300,   301,   302,     0,
+   303,    14,     0,     0,     0,   329,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    16,   304,    17,    18,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,   617,     0,   312,   313,   314,   315,
+   316,    26,     0,    27,   318,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   320,     0,     0,   899,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   900,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,   620,     0,     0,
+   901,   622,     7,     8,     9,    10,     0,    12,   300,   301,
+   302,     0,   303,    14,     0,     0,     0,   329,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    16,   304,    17,
+    18,    19,     0,   305,   306,    20,     0,   307,   308,   309,
+    21,   310,   311,     0,    23,     0,   617,     0,   312,   313,
+   314,   315,   316,    26,     0,    27,    28,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   320,     0,     0,  1180,
+     0,     0,     0,     0,     0,     0,     0,   322,   323,  1181,
+     0,     0,     0,     0,     0,   325,   326,   327,     0,   620,
+     0,     0,  1182,   622,   299,     8,     9,    10,     0,    12,
+   533,   301,   302,     0,   303,    14,     0,     0,     0,   329,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
+   304,    17,    18,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,    27,   318,     0,
+     0,     0,   319,     0,     0,     0,     0,     0,   320,     0,
+     0,   552,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,   553,     0,     0,     0,     0,     0,   325,   326,   327,
+   299,     8,     9,    10,   554,    12,   533,   301,   302,     0,
+   303,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   329,     0,     0,     0,    16,   304,    17,     0,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,    27,   318,     0,     0,  1401,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,     0,     0,     0,
+   328,   299,     8,     9,    10,   167,    12,   300,   301,   302,
+     0,   303,    14,     0,     0,     0,     0,   329,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   304,    17,    18,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,     0,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,   318,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   320,     0,     0,   321,     0,
+     0,     0,     0,     0,     0,     0,   322,   323,   324,     0,
+     0,     0,     0,     0,   325,   326,   327,     7,     8,     9,
+    10,   328,    12,   533,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   329,     0,
+     0,     0,    16,   304,    17,    18,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,    28,     0,     0,     0,   319,     0,     0,     0,     0,
+     0,   320,     0,     0,  1494,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,  1495,     0,     0,     0,     0,     0,
+   325,   326,   327,   299,     8,     9,    10,  1496,    12,   300,
+   301,   302,     0,   303,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   329,     0,     0,     0,    16,   304,
+    17,     0,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,     0,    23,     0,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,   317,   318,     0,     0,
+     0,   319,     0,     0,     0,     0,     0,   320,     0,     0,
+   321,     0,     0,     0,     0,     0,     0,     0,   322,   323,
+   324,     0,     0,     0,     0,     0,   325,   326,   327,   299,
+     8,     9,    10,   328,    12,   300,   301,   302,     0,   303,
+    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   329,     0,     0,     0,    16,   304,    17,     0,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,   318,     0,     0,     0,   319,     0,     0,
+     0,     0,     0,   320,     0,     0,   321,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,   324,     0,     0,     0,
+     0,     0,   325,   326,   327,   299,     8,     9,    10,   328,
+    12,   533,   301,   302,     0,   303,    14,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   329,     0,     0,     0,
+    16,   304,    17,     0,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,     0,    23,     0,     0,
+     0,   312,   313,   314,   315,   316,    26,     0,    27,   318,
+     0,     0,     0,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,   321,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,   324,     0,     0,     0,     0,     0,   325,   326,
+   327,   299,     8,     9,    10,   328,    12,   533,   301,   302,
+     0,   303,    14,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   329,     0,     0,     0,    16,   304,    17,     0,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,     0,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,   318,   566,     0,     0,     0,
+     0,     0,     0,     0,     0,   320,     0,     0,   321,     0,
+     0,     0,     0,     0,     0,     0,   322,   323,   324,     0,
+     0,     0,     0,     0,   325,   326,   327,   299,     8,     9,
+    10,   567,    12,   533,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   329,     0,
+     0,     0,    16,   304,    17,     0,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,     0,     0,     0,     0,   328,   605,   299,
+     8,     9,    10,     0,    12,   533,   301,   302,     0,   303,
+    14,     0,     0,     0,   329,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    16,   304,    17,    18,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,   318,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   320,     0,     0,   552,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,   553,     0,     0,     0,
+     0,     0,   325,   326,   327,  1140,     8,     9,    10,   554,
+    12,   533,   301,   302,     0,   303,    14,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   329,     0,     0,     0,
+    16,   304,    17,     0,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,     0,    23,     0,     0,
+     0,   312,   313,   314,   315,   316,    26,     0,    27,   318,
+     0,     0,     0,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,   321,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,   324,     0,     0,     0,     0,     0,   325,   326,
+   327,     7,     8,     9,    10,   328,    12,   300,   301,   302,
+     0,   303,    14,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   329,     0,     0,     0,    16,   304,    17,    18,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,     0,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,    28,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   320,     0,     0,  1494,     0,
+     0,     0,     0,     0,     0,     0,   322,   323,  1495,     0,
+     0,     0,     0,     0,   325,   326,   327,   299,     8,     9,
+    10,  1496,    12,   533,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   329,     0,
+     0,     0,    16,   304,    17,     0,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,   299,     8,     9,    10,   534,    12,   533,
+   301,   302,     0,   303,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   329,     0,     0,     0,    16,   304,
+    17,     0,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,     0,    23,     0,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,    27,   318,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   320,     0,     0,
+   321,     0,     0,     0,     0,     0,     0,     0,   322,   323,
+   324,     0,     0,     0,     0,     0,   325,   326,   327,   299,
+     8,     9,    10,   537,    12,   533,   301,   302,     0,   303,
+    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   329,     0,     0,     0,    16,   304,    17,     0,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,   318,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   320,     0,     6,   321,     7,     8,     9,
+    10,    11,    12,    13,   322,   323,   324,     0,    14,     0,
+     0,     0,   325,   326,   327,     0,     0,     0,     0,   328,
+     0,    15,    16,     0,    17,    18,    19,     0,     0,     0,
+    20,     0,     0,     0,     0,    21,   329,     0,    22,    23,
+    24,     0,    25,     0,     0,     0,     0,     0,    26,     0,
+    27,    28,     0,     0,    29,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
+     0,     0,     0,   761,    31,     7,     8,   762,    10,   167,
+    12,    13,    32,     0,     0,     0,    14,    33,     0,     0,
+     0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
+    16,     0,    17,    18,    19,     0,     0,     0,    20,     0,
+     0,     0,     0,    21,     0,     0,     0,    23,   763,     0,
+   168,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     0,     0,   764,     0,   765,     0,     0,     0,     0,     0,
+     0,     0,    30,  1033,     8,   762,    10,   205,    12,   206,
+     0,     0,    31,     0,    14,     0,     0,     0,     0,     0,
+    32,     0,     0,     0,     0,    33,     0,     0,    16,     0,
+    17,    18,     0,     0,     0,     0,    20,     0,     0,     0,
+     0,    21,     0,     0,     0,    23,     0,     0,     0,     0,
+     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
+     0,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
+    30,     7,     8,     9,    10,   205,    12,   206,     0,     0,
+    31,     0,    14,     0,     0,     0,     0,     0,    32,     0,
+     0,     0,     0,    33,     0,     0,    16,     0,    17,    18,
+     0,     0,     0,     0,    20,     0,     0,     0,     0,    21,
+     0,     0,     0,    23,     0,     0,     0,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,  1418,     0,
+     7,     8,     9,    10,   167,    12,    13,     0,    30,     0,
+     0,    14,     0,     0,     0,     0,     0,     0,    31,     0,
+     0,     0,     0,     0,     0,    16,    32,    17,    18,     0,
+     0,    33,     0,    20,     0,     0,     0,     0,    21,     0,
      0,     0,    23,     0,     0,     0,     0,     0,     0,     0,
-     0,    26,     0,   130,   131,   569,   570,   571,   572,   573,
-   574,   575,   576,   577,   578,   579,   580,   581,   582,   583,
-   584,   585,   586,   587,   588,   589,   590,   576,   577,   578,
-   579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
-   589,   590,     0,     0,     0,     0,   658,     0,     0,  1541,
-   569,   570,   571,   572,   573,   574,   575,   576,   577,   578,
-   579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
-   589,   590,  1559,   569,   570,   571,   572,   573,   574,   575,
+     0,    26,     0,    27,    28,     7,     8,     9,    10,   205,
+    12,   206,     0,     0,     0,     0,    14,    30,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+    16,     0,    17,    18,     0,    32,     0,     0,    20,     0,
+    33,     0,     0,    21,     0,     0,     0,    23,     0,     0,
+     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     8,     9,     0,   167,    12,    13,     0,     0,     0,     0,
+    14,     0,    30,     8,     9,     0,   167,    12,    13,     0,
+     0,  1546,    31,    14,    16,     0,    17,    18,     0,     0,
+    32,     0,    20,     0,     0,    33,     0,    16,     0,    17,
+    18,   679,     0,     0,   168,    20,     0,     0,     0,     0,
+    26,     0,   130,   131,    23,     0,     0,     8,     9,     0,
+   205,    12,   206,    26,     0,   130,   131,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,     0,    17,    18,     0,     0,     0,     0,    20,
+     0,     0,     0,     0,     0,     0,     0,     0,    23,     0,
+     0,     0,     0,     0,     0,     0,     0,    26,     0,   130,
+   131,   569,   570,   571,   572,   573,   574,   575,   576,   577,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,   569,   570,   571,   572,   573,   574,   575,
+   576,   577,   578,   579,   580,   581,   582,   583,   584,   585,
+   586,   587,   588,   589,   590,     0,     0,     0,     0,  1233,
+   577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
+   587,   588,   589,   590,   658,     0,     0,  1542,   569,   570,
+   571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
+   581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
+  1560,   569,   570,   571,   572,   573,   574,   575,   576,   577,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,   569,   570,   571,   572,   573,   574,   575,
    576,   577,   578,   579,   580,   581,   582,   583,   584,   585,
    586,   587,   588,   589,   590,   569,   570,   571,   572,   573,
-   574,   575,   576,   577,   578,   579,   580,   581,   582,   583,
-   584,   585,   586,   587,   588,   589,   590,   569,   570,   571,
-   572,   573,   574,   575,   576,   577,   578,   579,   580,     0,
-   582,   583,   584,   585,   586,   587,   588,   589,   590
+   574,   575,   576,   577,   578,   579,   580,     0,   582,   583,
+   584,   585,   586,   587,   588,   589,   590
 };
 
 static const short yycheck[] = {     4,
-   161,   174,   149,   150,    23,     4,   175,   209,   156,    80,
-   176,   251,     4,     4,   349,    55,    90,   715,    92,   126,
-    14,    57,   564,   402,   355,   402,   355,   482,    80,   503,
-    35,    62,    33,   455,     4,   402,    35,    42,   440,    30,
-    31,   872,     4,    35,    35,   247,   460,    31,   304,   305,
-    42,    42,    57,   133,   134,   621,   242,   134,   373,    84,
-   209,    42,   628,   137,   124,    35,    42,    72,     4,   218,
-   697,   601,    42,    35,  1385,   690,   133,  1474,    11,    84,
-    42,   337,   778,    88,   780,    90,     4,    92,  1314,    83,
-  1304,   787,   144,    84,   296,  1321,   217,   218,    42,    35,
-   136,  1475,   107,   108,   796,    42,    42,    11,    37,   140,
-   802,    46,   106,    54,    84,   355,    11,    35,  1476,    59,
-    33,    42,  1519,     4,    42,   156,     1,     9,    33,    62,
-    58,   136,   137,     0,   139,   175,   558,  1522,    59,   490,
-   176,    76,    59,  1498,    47,   136,     0,   349,   149,   150,
-   151,   203,   644,    62,    35,     1,   507,   141,   149,   150,
-   165,    12,   146,  1518,   169,    74,   136,   622,   108,     1,
-    98,   176,    60,    12,   165,   108,   182,   169,   169,    61,
-   109,   212,    47,    58,   165,  1570,     4,     5,   169,   220,
-    93,   262,   109,   169,   195,   165,   109,    74,  1556,   169,
-   136,   536,   193,   194,   108,   236,   698,   169,    59,    59,
-   194,    62,    58,   108,   155,    60,    62,   909,   136,  1616,
-    59,   109,  1577,    62,    59,   169,    58,  1601,    93,   165,
-    62,    47,   169,   169,    47,    25,    54,    27,    56,    57,
-   714,    74,    59,   108,   149,   150,   151,   165,   169,    95,
-  1561,   169,    70,  1479,   248,     4,  1209,  1210,   108,   200,
-    47,  1475,    80,    95,   109,    60,   346,    27,    58,   108,
-  1223,    31,    62,   108,    47,   259,    94,    93,   213,     7,
-    93,    94,    48,    47,   358,    93,    35,   448,   209,   346,
-   195,   108,   297,    47,   716,   108,   217,   218,   925,    60,
-    60,   928,  1528,    38,    64,    95,    93,   709,   710,    37,
-   641,    58,    58,   680,   109,    62,   393,   342,    64,    54,
-    93,   108,    93,   359,   329,   385,   247,   474,   475,    93,
-     3,     4,     5,    47,  1026,   950,    54,   342,   487,    93,
-    47,   871,   969,   970,    62,   350,  1038,   913,   109,   109,
-    47,   342,  1578,   358,   359,   670,    74,    54,   737,    93,
-   737,   355,     4,     5,   404,   486,   487,  1063,   359,    74,
-   610,    47,   342,   494,    47,   296,    25,    74,    27,    93,
-  1072,    54,  1074,    56,    57,   506,    93,    94,    25,   359,
-    27,   957,    75,  1346,    77,    62,    93,   402,   733,    74,
-   405,   108,  1355,  1356,   525,  1358,    47,    74,    47,    58,
-   402,   402,   954,    62,    56,    57,  1247,    93,    94,   450,
-    93,    58,    93,   359,    60,    62,     4,     5,   349,   356,
-   357,     9,   402,   504,  1000,   419,    54,   442,   422,   107,
-     1,   359,     3,     4,     5,     6,    95,     8,    47,    25,
-   434,   442,    93,    94,    93,   910,    74,   531,    95,    47,
-   874,   442,   493,   468,    60,    64,   442,   108,   504,   107,
-   108,    25,   442,   474,   475,   476,    54,   468,    56,    57,
-    41,   408,   409,   474,   475,   406,   470,    48,   472,     4,
-    54,    59,    70,    54,    93,    56,    57,    31,   468,   504,
-    47,   485,    80,    62,    58,    93,   442,    75,    62,    47,
-  1137,  1138,    47,   504,    47,    74,    94,     8,     9,    62,
-    35,   442,    54,    14,   442,   480,   531,    88,    54,   534,
-    62,    64,   537,   488,   504,   708,   541,   542,   543,   544,
-   545,    95,   504,  1374,    54,    36,    93,    94,    74,   554,
-  1024,  1504,  1505,    12,    45,    93,    47,    58,    93,   564,
-    93,   496,   567,    74,    74,   486,   487,   989,   504,   474,
-   475,   476,   951,   494,   951,    54,   762,   602,   764,    47,
-    25,    54,    27,   769,   951,   506,   504,    47,   919,    47,
-   919,     4,     5,  1159,   671,    74,    64,   602,   678,   673,
-    59,   678,    93,    62,   525,    64,    62,   647,     3,     4,
-     5,   602,   109,    58,    83,    84,   621,    62,    74,   821,
-     4,     5,  1188,   628,    47,    93,    94,   618,   619,    47,
-   621,    44,   602,    93,   755,    93,    94,   628,   632,    59,
-    93,    54,    58,    56,    57,    54,   686,    54,   688,   689,
-    95,   621,    12,     4,     5,    75,  1111,    77,   628,   915,
-   679,    56,    57,    54,    48,   772,   108,    27,   673,    75,
-    93,    31,    56,    57,    47,    93,   108,  1091,  1092,   919,
-    94,    54,   687,     4,     5,    80,   691,    47,     4,     5,
-   109,   329,    11,   733,    98,   714,  1170,    47,    44,    59,
-    60,    74,    62,    54,    64,    56,    57,   778,    54,   780,
-    47,    57,     3,     4,     5,   786,   787,    54,   645,    70,
-    93,   108,   793,   797,   798,   108,   800,   648,  1202,    80,
-    47,    47,   737,    93,    94,    56,    57,    74,    54,    47,
-    56,    57,   778,    93,   780,   785,   737,    60,   108,   785,
-   786,   787,   758,    93,    70,     3,    93,   793,    59,    60,
-   744,   745,    60,   747,    80,    56,    57,   737,   689,   917,
-  1184,  1106,   111,   778,    90,   780,    93,    93,    94,  1193,
-  1194,   786,   787,    94,  1198,    93,   792,   778,   793,   780,
-    94,   796,   797,   798,    54,   800,   787,   802,    62,     3,
-     4,     5,   793,    62,   977,   796,     4,     5,   778,   111,
-   780,   802,   733,    54,    74,    62,   778,   787,   780,    93,
-     3,     4,     5,   793,  1238,   787,   796,   465,     4,     5,
-    93,   793,   802,    74,   755,  1021,  1022,  1023,     3,     4,
-     5,     6,   778,    74,   780,    74,   781,   782,    54,   108,
-    48,   787,    56,    57,    58,   790,    62,   793,    56,    57,
-   778,   108,   780,    74,    54,   870,  1564,    47,    74,   787,
-   875,    54,    62,    56,    57,   793,    41,    74,    54,    11,
-    56,    57,    80,   109,    74,   812,   917,  1107,  1108,    54,
-  1110,    56,    57,    59,    60,    60,   534,    62,   903,   537,
-   821,     4,     5,   541,   909,    70,    86,    87,   913,    59,
-   962,    91,    92,    93,    94,    80,   554,   108,   909,  1333,
-   911,   912,   913,    88,    54,   919,    59,    60,    93,   567,
-     4,     5,    62,   571,     8,     9,    59,    27,   108,   909,
-    14,    31,    59,   913,    74,    48,   951,    64,   953,   954,
-    59,    60,   957,    56,    57,    54,   957,  1371,    75,   951,
-   951,   599,    36,    62,   955,   956,   957,   605,    54,    59,
-    60,    45,   956,    47,  1396,    74,    62,    80,  1313,  1050,
-    54,   951,    56,    57,     4,     5,   108,   957,    74,  1029,
-  1412,    74,  1063,  1029,   108,  1000,    70,    59,  1050,  1000,
-     7,     8,     9,   809,   810,   811,    80,    14,  1013,  1000,
-  1157,  1158,    74,    75,  1019,    77,    90,   944,    54,    93,
-    94,  1026,     4,     5,    31,  1031,  1032,  1063,    48,    36,
-  1000,    59,    60,  1038,    74,  1026,    56,    57,    45,  1186,
-  1187,  1115,    59,    60,    74,     8,     9,  1038,    59,    60,
-   108,    14,   957,    60,  1060,   109,  1026,    27,  1063,   109,
-    80,    31,    59,    60,    59,    60,    48,  1072,  1038,  1074,
-    59,    60,  1063,    36,    56,    57,  1498,     3,     4,     5,
-     6,  1072,    45,  1074,     3,     4,     5,     6,   111,    59,
-    60,    27,   108,  1063,    64,  1000,  1518,  1102,    80,   111,
-    74,  1063,  1072,    74,  1074,    54,    74,  1042,   111,  1161,
-  1115,   111,   108,  1048,  1049,    41,   108,  1052,  1053,    58,
-   108,  1056,    41,   108,    54,  1547,     8,  1063,    54,    48,
-    56,    57,   111,  1512,    93,  1512,    47,    56,    57,  1066,
-  1067,  1068,  1311,    64,  1313,  1063,  1312,    59,    93,  1220,
-    54,  1170,   109,    60,  1159,  1577,  1157,  1158,  1159,    36,
-   108,    80,    88,  1585,    64,    64,  1157,  1158,  1159,    88,
-    64,  1155,  1156,     4,     5,   108,  1181,    60,     9,  1163,
-   108,  1516,  1181,  1188,    62,  1186,  1187,  1188,   108,  1159,
-  1181,   108,  1606,   108,    64,  1186,  1187,  1188,     4,     5,
-    64,    64,   111,     4,     5,    93,    62,    59,    75,  1215,
-  1216,  1181,  1218,  1219,    75,  1221,    47,   108,  1188,  1181,
-    75,   108,   108,    54,   108,    56,    57,    80,    81,    82,
-    83,    84,     3,     4,     5,     6,   108,    30,    31,    70,
-    33,   879,    48,    75,    62,  1181,   108,    48,   108,    80,
-    56,    57,  1157,  1158,  1159,    56,    57,    62,   108,    90,
-    59,   108,    93,    94,    57,    62,    59,   108,   111,    94,
-    41,  1311,    65,  1313,    80,   913,   111,    48,    88,    80,
-    47,  1186,  1187,  1188,    74,    56,    57,   108,  1272,  1273,
-   109,  1275,   108,   108,    88,   108,    90,   111,    92,  1304,
-   111,     3,     4,     5,     6,   108,   108,  1312,    60,  1314,
-    59,   109,    59,  1304,  1516,  1314,  1321,    88,    64,     3,
-     4,     5,  1321,  1314,    64,  1330,    59,     4,     5,  1490,
-  1321,  1258,     9,   108,  1304,   108,    93,  1343,  1344,    41,
-    93,   109,  1304,   137,  1314,   139,  1493,  1494,   141,    93,
-    93,  1321,  1314,   146,    56,    57,   149,   150,   151,  1321,
-     9,   109,     8,    12,   109,    33,   108,   108,  1304,   108,
-    54,  1544,    56,    57,    58,   111,   108,    54,  1314,    56,
-    57,  1019,   108,   176,   108,  1321,    88,   108,   111,   182,
-   108,   108,  1313,    70,   108,   108,   108,   108,    47,    64,
-   193,   194,   195,    80,     3,     4,     5,     6,   108,     4,
-    59,    54,    61,    62,   108,    64,   209,   108,  1353,  1354,
-    62,   111,  1423,    47,   217,   218,    75,   108,    77,   108,
-   108,    62,    96,    62,    60,    60,  1442,  1443,  1444,     9,
-    35,    60,    41,    16,    93,    94,   108,    42,   108,    48,
-    78,    79,    80,    81,    82,    83,    84,    56,    57,   108,
-    55,   108,    57,   108,  1469,    54,   259,   108,   108,  1474,
-  1475,  1476,    93,    93,  1479,  1474,    60,  1517,  1469,    60,
-  1479,    80,    64,  1474,  1475,  1476,    93,  1422,  1479,    88,
-  1495,    93,  1493,  1494,  1495,  1501,  1502,   111,    17,  1469,
-    54,    60,  1493,  1494,  1474,  1475,  1476,  1512,   108,  1479,
-   107,    97,  1474,  1475,  1519,    60,   108,  1479,  1423,    11,
-  1519,  1512,    60,  1528,    60,   108,   320,    60,  1519,  1528,
-   108,     3,     4,     5,     6,    93,   329,  1528,  1474,  1475,
-    64,   136,  1512,  1479,    59,   140,   108,    60,    11,  1519,
-  1188,  1556,   108,     7,     8,     9,   108,  1519,  1528,    60,
-    14,    11,    60,  1569,   358,  1556,  1528,     0,     0,    41,
-   165,     0,   170,  1578,   169,     2,    35,    31,   671,  1578,
-   175,   176,    36,  1519,    56,    57,  1556,  1578,  1493,  1494,
-  1495,    45,  1528,   951,   169,  1516,  1234,  1235,  1236,  1237,
-  1410,   165,   442,  1170,     3,     4,     5,   786,  1578,  1543,
-    94,  1616,   405,   406,  1549,  1395,  1578,  1616,     3,     4,
-     5,     6,     3,     4,     5,  1616,   419,   222,   139,   422,
-  1616,    30,  1248,   299,   937,   428,   429,   430,   932,   721,
-   241,   434,  1578,  1024,  1202,    33,  1616,   793,   786,  1222,
-   654,   930,   602,   200,  1616,    54,    41,    56,    57,  1297,
-   346,  1314,    47,   124,  1182,  1585,   460,   461,  1564,    54,
-  1533,    56,    57,    54,   468,    56,    57,   470,  1597,   472,
-  1616,   474,   475,   476,  1595,    70,   479,  1330,  1008,     3,
-     4,     5,   485,   486,   487,    80,    -1,   490,    -1,    -1,
-    -1,   494,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,     7,     8,     9,   507,     3,     4,     5,    14,     7,
-     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   306,
-   307,    -1,    -1,    -1,  1372,    31,    -1,   531,   532,   461,
-    36,   534,    56,    57,   537,   322,   468,    -1,   325,    45,
-    -1,   328,    -1,    -1,   331,    -1,    -1,    -1,   335,   552,
-   553,   554,   150,   151,   359,    -1,   343,  1405,    56,    57,
-   564,    -1,   566,    -1,   567,   569,   570,    -1,   572,   573,
-   574,   575,   576,   577,   578,   579,   580,   581,   582,   583,
-   584,   585,   586,   587,   588,   589,   590,    -1,   592,    -1,
-    -1,    -1,    -1,    -1,   598,    -1,    -1,   195,    -1,   404,
-   532,    -1,     3,     4,     5,    -1,     7,     8,     9,    -1,
-    -1,    -1,    -1,    -1,     3,     4,     5,    -1,    -1,    -1,
-    -1,  1469,    -1,    -1,   628,   628,    -1,  1475,  1476,    -1,
-    31,   635,   402,    -1,    -1,    36,    -1,   442,    -1,     4,
-     5,    -1,    -1,     8,     9,   648,    -1,  1495,    -1,    14,
-    -1,    14,    -1,   657,   658,    56,    57,    80,    -1,    22,
-   592,    -1,    -1,    28,    -1,    30,   598,    56,    57,   673,
-    -1,    36,    -1,     3,    -1,   480,     6,    -1,    -1,    -1,
-    45,   104,    47,   488,   687,    -1,   689,   690,    -1,    54,
-    -1,    56,    57,    -1,     3,     4,     5,     6,   468,   504,
-    -1,    31,    65,   635,    -1,    70,    -1,    -1,  1556,    -1,
-   133,    41,    -1,    -1,    -1,    80,    -1,   721,    -1,    -1,
-    -1,   144,    -1,    -1,  1572,    90,    56,    57,    93,    94,
-   733,   329,    41,     3,     4,     5,    -1,     7,    -1,    48,
-    70,   744,   745,    -1,   747,    -1,  1594,    56,    57,    -1,
-    80,    -1,   755,  1601,    -1,   758,    -1,    -1,    88,    -1,
-    30,   124,    -1,    93,    -1,   552,   553,    37,    -1,     3,
-     4,     5,     6,   777,    -1,     9,     3,     4,     5,    88,
-   203,    -1,    -1,   786,    54,   148,    56,    57,    -1,   792,
-     3,     4,     5,   797,   798,    -1,   800,    31,    -1,    -1,
-   193,   194,   195,    -1,    -1,    -1,    -1,    41,     3,     4,
-     5,   815,   815,    47,   237,     3,     4,     5,    -1,    -1,
-    54,    48,    56,    57,    -1,    -1,     3,     4,     5,    56,
-    57,   429,   430,   837,    -1,    48,    70,    -1,    -1,   262,
-    -1,    -1,   647,    56,    57,    -1,    80,     3,     4,     5,
-    -1,   621,    -1,    -1,    88,    -1,    90,    -1,   628,    93,
-    94,    56,    57,    -1,    -1,   869,   870,    -1,    56,    57,
-   874,   875,    -1,    -1,   237,   238,    -1,   475,   476,    56,
-    57,   686,   687,   688,   689,   889,    -1,   891,   251,   893,
-    -1,     3,     4,     5,    -1,     7,     8,     9,    -1,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,   911,   912,
-   913,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,
-    -1,    -1,    -1,    -1,    36,   929,    -1,    -1,   733,    -1,
-    -1,   354,   737,    -1,    -1,   939,   534,   869,   870,   537,
-    -1,    -1,    54,   875,    56,    57,    58,   950,    -1,    -1,
-   954,    -1,   955,   956,   957,   553,   554,   889,   321,   891,
-    -1,   893,    -1,   967,    -1,    -1,    -1,   737,    -1,   567,
-    -1,    -1,    -1,   778,    -1,   780,    -1,    -1,    -1,   983,
-   785,   786,   787,    -1,    -1,    -1,    -1,    -1,   793,   412,
-    -1,   103,   104,   105,    -1,    -1,  1000,  1000,    -1,    -1,
-   363,    -1,    -1,    -1,    -1,    -1,    -1,   939,    -1,   372,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,    -1,   385,     9,    -1,    -1,   796,    -1,  1031,  1032,
-   628,    -1,   802,    -1,    -1,    -1,    -1,  1041,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    31,    -1,     4,     5,    -1,
-    -1,   983,     9,    -1,    -1,    41,    -1,  1060,    -1,    -1,
-    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -1,   470,   501,   472,
-    -1,   474,   475,   476,    70,    -1,    -1,  1091,  1092,    -1,
-    47,  1095,   485,    -1,    80,    -1,   883,    54,    -1,    56,
-    57,    -1,    88,    -1,    90,   528,    -1,    93,    94,    -1,
-    -1,  1115,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-     7,     8,     9,    80,   911,   912,    -1,    14,    -1,    -1,
-    -1,    -1,    -1,    90,    -1,    -1,    93,    94,   501,   909,
-    -1,    -1,    -1,   913,    31,    -1,    -1,    -1,    -1,    36,
-    -1,    -1,  1155,  1156,  1157,  1158,  1159,    -1,    45,    -1,
-  1163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1172,    -1,
-  1174,    -1,  1176,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-  1184,   951,    -1,  1186,  1187,  1188,    -1,   957,    -1,  1193,
-  1194,    -1,   615,    -1,  1198,    -1,     4,     5,    -1,    -1,
-     8,     9,    -1,   566,    -1,    -1,    14,    -1,   631,  1213,
-  1214,    -1,  1215,  1216,    -1,  1218,  1219,   815,  1221,    -1,
-    28,    -1,    30,    -1,  1029,    -1,    -1,    -1,    36,    -1,
-  1000,    -1,    -1,     4,  1238,    -1,    -1,    45,    -1,    -1,
-  1172,    -1,  1174,    14,  1176,    -1,    54,   610,    56,    57,
-    58,    -1,    -1,    24,    -1,    -1,  1026,    -1,  1063,    30,
-    31,    -1,    33,    -1,    35,  1269,    -1,    -1,  1038,  1272,
-  1273,    42,  1275,    -1,    -1,    -1,    -1,   753,    -1,     3,
-     4,     5,     6,    -1,    55,    93,    57,    -1,    -1,  1293,
-    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-    -1,    72,  1072,    -1,  1074,    -1,    -1,    -1,    -1,  1312,
-  1313,    -1,    83,    84,   912,   913,   679,    41,    -1,   795,
-    -1,    -1,    -1,    -1,    48,   801,  1113,   690,    -1,  1333,
-    -1,    -1,    56,    57,    -1,   106,    -1,  1269,    -1,    -1,
-  1343,  1344,    -1,    -1,    -1,  1349,    -1,    -1,    -1,    -1,
-    -1,   744,   745,    -1,   747,    -1,    80,    -1,   721,   957,
-    -1,    -1,    -1,   134,    88,   136,    -1,  1371,    -1,   140,
-   141,    -1,    -1,    -1,   145,   146,    -1,    -1,   149,   150,
-   151,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1159,
-    -1,    -1,   785,    -1,   165,    -1,    -1,    -1,   169,  1186,
-  1187,    -1,  1000,    -1,   175,   176,    -1,    -1,    -1,    -1,
-    -1,    -1,  1217,    -1,    -1,    -1,    -1,  1222,  1188,  1423,
-  1423,    -1,   193,   194,   195,    -1,    -1,    -1,   904,    -1,
-   906,     3,     4,     5,     6,    -1,  1440,  1441,    -1,  1442,
-  1443,  1444,    -1,    -1,    -1,  1449,    -1,    -1,    -1,    -1,
-    -1,   222,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-     5,     6,    -1,   461,     9,    -1,    -1,   238,    -1,    41,
-   468,    -1,    -1,  1477,    -1,    -1,    48,   248,    -1,    -1,
-    -1,    -1,    -1,    -1,    56,    57,    31,    -1,   259,    -1,
-  1493,  1494,  1495,    -1,    -1,   918,    41,   920,  1501,  1502,
-    -1,    -1,    47,    -1,    -1,    -1,  1311,  1312,  1313,    54,
-    -1,    56,    57,    -1,    -1,    -1,    88,  1304,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    70,   297,   298,    -1,     3,
-     4,     5,     6,    -1,   532,    80,    -1,    -1,    -1,   962,
-    -1,    -1,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,    -1,
-  1158,  1159,   955,   956,   957,    -1,  1569,    41,    -1,    -1,
-    -1,   342,    -1,    -1,   937,   346,    -1,   348,   349,   350,
-    54,    -1,    56,    57,    -1,    -1,    -1,   950,   359,  1187,
-  1188,    -1,    -1,    -1,   592,  1071,    70,  1073,    -1,    -1,
-   598,    -1,  1606,     4,     5,    -1,    80,  1000,     9,    82,
-    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,
-    -1,    -1,   393,     3,     4,     5,     6,  1050,    -1,    -1,
-   628,   402,    -1,   404,   405,    -1,  1029,   635,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    47,    -1,   419,    -1,
-    -1,   422,  1128,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,    41,    -1,   434,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,   442,    -1,    -1,    54,    -1,    56,    57,    -1,    80,
-    60,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    90,
-    70,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,   470,
-    80,   472,    -1,   474,   475,   476,  1493,  1494,    88,   480,
-    -1,  1134,  1517,    93,   485,    -1,    -1,   488,   191,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    -1,  1092,
-  1206,   204,    -1,   504,    -1,  1211,    -1,    -1,  1161,    -1,
-    -1,    -1,  1512,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,
-    -1,    -1,  1155,  1156,  1157,  1158,  1159,    -1,    -1,    -1,
-  1163,   542,   543,   544,   545,    -1,    -1,    -1,    -1,    -1,
-    31,    -1,    -1,    -1,    -1,    -1,  1262,    -1,    -1,    -1,
-    41,    -1,    -1,  1186,  1187,  1188,    47,  1220,     3,     4,
-     5,     6,    -1,    54,     9,    56,    57,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,  1178,    -1,   815,    -1,    70,
-    -1,  1184,    -1,    -1,  1217,  1423,    31,    -1,    -1,    80,
-    -1,   602,    -1,   604,    -1,    -1,    41,    88,    -1,    90,
-    -1,    -1,    93,    94,    -1,   616,    -1,   618,   619,    54,
-   621,    56,    57,    -1,    -1,    -1,    -1,   628,    -1,    -1,
-    -1,   632,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,   869,   870,    -1,    -1,    80,   647,   875,    -1,  1272,
-  1273,    -1,  1275,    88,    -1,    -1,  1362,  1363,    93,    -1,
-    -1,   889,    -1,   891,    -1,   893,  1494,  1495,    -1,    -1,
-   671,    -1,    -1,  1379,    -1,    -1,    -1,   678,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   686,   687,   688,   689,   690,
-   691,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,  1298,  1299,    -1,    -1,    -1,
-    -1,   939,     1,    -1,     3,     4,     5,     6,     7,     8,
-     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,  1435,
-  1436,    -1,   733,    -1,    -1,    -1,   737,    -1,    -1,    28,
-    -1,    30,    31,   744,   745,    -1,   747,    36,  1454,  1455,
-    -1,    -1,    41,    -1,    -1,   983,    45,    -1,    -1,    48,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,    60,  1000,    -1,   775,   478,    -1,   778,    -1,   780,
-   483,    70,    -1,    -1,   785,   786,   787,    -1,    -1,    -1,
-    -1,    80,   793,    -1,  1387,   796,    -1,    -1,    -1,    88,
-  1423,   802,    -1,    -1,    93,   508,    -1,    -1,   809,   810,
-   811,   514,    -1,    -1,    -1,    -1,  1409,  1410,    -1,    -1,
-   821,    -1,    -1,   526,   527,    -1,   529,     3,     4,     5,
-     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   348,   349,   350,    -1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
-    -1,    -1,    38,    39,    -1,    41,    -1,    -1,    -1,    -1,
-  1493,  1494,  1495,    -1,    31,    -1,    -1,    -1,    54,    36,
-    56,    57,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,
-    47,    -1,    -1,   894,  1487,   896,    -1,    54,    -1,    56,
-    57,    -1,   903,    -1,    -1,    -1,   907,    -1,   909,    -1,
-   911,   912,   913,    70,    -1,    -1,    -1,    -1,   919,    -1,
-    -1,   624,   625,    80,    -1,    -1,   629,    -1,    -1,    -1,
+   161,   174,   149,   150,    23,   209,   176,   175,     4,   715,
+     4,   126,   354,     4,   401,   459,   156,   250,   401,   348,
+   303,   304,   621,   354,    80,    80,    90,   481,    92,   628,
+    35,     4,   714,   501,   134,    46,   401,    42,    33,    35,
+    84,    35,   246,   860,    35,   564,    42,   133,   134,    33,
+   372,    42,    57,   336,    14,    42,   601,    30,    31,   439,
+   690,     4,    35,   209,    42,    76,   133,    72,   766,    42,
+   768,   124,   218,   137,  1383,  1475,     1,   775,   760,    84,
+  1476,    33,   697,    88,    54,    90,     4,    92,  1299,   144,
+  1309,   295,    35,    12,   217,   218,    57,  1316,    42,    42,
+    42,  1477,   107,   108,    55,  1204,  1205,    11,   644,     9,
+    33,    84,     7,    47,    93,     1,    62,    35,  1499,  1218,
+  1520,   354,    11,    83,    42,     0,    11,    62,     0,   454,
+    64,   136,   137,    58,   139,   489,    37,    62,  1519,    74,
+    59,    84,    37,    62,   348,   136,   106,    27,   203,    54,
+    74,    31,     4,   507,   149,   150,   151,    62,    62,    93,
+   165,    61,   698,   136,   169,   149,   150,   151,   622,    60,
+    95,   176,    58,   169,   165,   136,   149,   150,   169,     1,
+    60,  1557,   169,    35,    64,   155,   109,   165,    80,   108,
+    42,   169,   165,   136,   140,    59,   169,  1578,   150,   151,
+   195,    25,   213,   784,   108,   261,  1602,   536,   109,   790,
+   156,   195,   104,    59,    47,   176,  1523,  1617,   109,   108,
+   193,   194,   165,   108,   175,   169,   169,   169,    60,   109,
+   200,    59,    58,   558,    58,    27,    58,    47,    62,    31,
+    62,   133,    47,   195,   108,  1344,    59,    59,    25,    74,
+    27,   169,   144,  1562,  1353,  1354,    54,  1356,    47,   345,
+    93,  1480,    42,   109,  1571,  1476,   212,    59,    60,    59,
+    60,    95,    98,    95,   220,   108,    74,   109,   345,    59,
+   108,    58,    47,    93,   136,    62,   447,   247,    93,    94,
+   236,   296,   392,   357,    48,   108,   108,   341,   913,   641,
+    60,   916,   901,   108,    93,   355,   356,    60,   938,    47,
+  1529,   203,    54,   165,   859,   680,   897,   169,    95,   108,
+     3,     4,     5,   328,    93,    12,   473,   474,    93,   709,
+   710,   384,    74,     3,     4,     5,   341,     7,     8,     9,
+   486,    58,   957,   958,   349,   237,   945,    64,   670,   109,
+   737,     4,   357,   358,   737,    93,   109,   407,   408,  1057,
+  1579,    31,   485,   486,    47,    93,    36,   358,   341,   261,
+   493,    54,    59,    56,    57,    62,   328,   610,     3,     4,
+     5,    47,    35,   506,    54,   358,    56,    57,    58,   169,
+    44,   716,    38,   992,   354,    12,   401,   358,   341,   404,
+    54,    59,   525,    57,   733,   401,  1505,  1506,    54,    74,
+    93,     3,     4,     5,     6,   358,    74,    75,   862,    77,
+     3,     4,     5,   942,    47,  1242,     4,    93,   401,   209,
+    74,    56,    57,   103,   104,   105,   441,   217,   218,  1020,
+    47,    64,    59,    93,   898,    62,    47,    64,   504,    41,
+   441,  1032,   403,    59,   441,    80,    48,    35,   401,     4,
+     5,   353,   467,   441,    56,    57,   246,   531,   441,    75,
+    93,   107,   108,    56,    57,    58,   428,   429,   473,   474,
+   475,    60,  1164,     4,   495,  1066,    93,  1068,    80,   473,
+   474,   475,    93,    94,   467,    47,    88,   107,   441,   504,
+   473,   474,    25,   449,    47,    54,   358,   108,    54,    54,
+    54,    56,    57,   504,    35,   295,  1131,  1132,  1200,   411,
+     4,     5,   474,   475,   467,    74,   531,     4,     5,   534,
+    74,   504,   537,    59,    60,   708,   541,   542,   543,   544,
+   545,    93,  1010,   504,  1012,    47,   492,    60,  1016,   554,
+    93,    94,   939,    31,  1153,  1372,   939,    62,   602,   564,
+    47,   504,   567,    62,    48,   907,    58,    47,   348,    74,
+    62,   671,    56,    57,   939,    74,   907,    54,   678,    56,
+    57,    47,   534,  1182,    64,   537,   504,     4,     5,   441,
+    58,    93,   678,    70,    54,   645,    80,   602,     8,     9,
+    74,   553,   554,    80,    14,   809,    93,    94,   500,   673,
+    25,    47,    27,    93,    94,   567,   621,    94,   109,    12,
+   903,   108,    93,   628,    47,   405,    36,    93,    94,   602,
+    54,    48,   755,    47,    27,    45,   528,    47,    31,    56,
+    57,  1085,  1086,    58,    75,   618,   619,    62,   621,  1331,
+    74,  1105,   504,    47,    47,   628,   981,    93,    94,   602,
+   679,   441,    58,    80,     4,     5,    59,    60,   673,    62,
+    93,    64,   632,    54,   907,    62,   628,    54,   621,    93,
+    95,    62,   687,    93,    54,   628,   691,    74,     3,     4,
+     5,    54,   328,    74,    54,   714,   647,    74,    11,    93,
+    93,    94,     4,     5,   108,   485,   486,     9,    48,   108,
+   766,    47,   768,   493,    47,   108,    56,    57,   774,   775,
+    47,   785,   786,   615,   788,   781,   506,    54,    47,  1197,
+  1198,  1199,   737,    48,  1178,   686,    94,   688,   689,   631,
+    80,    56,    57,  1187,  1188,   525,   108,    74,  1192,   108,
+   800,    47,    54,   109,    56,    57,    98,    93,   769,   770,
+    93,   766,    60,   768,   737,   905,    93,   778,    70,   774,
+   775,  1100,    93,   182,    93,   766,   781,   768,    80,   784,
+   785,   786,   733,   788,   775,   790,    75,     3,    77,  1233,
+   781,    60,   965,   766,   737,   768,    25,    93,    27,    47,
+    47,   479,   775,     4,     5,   766,    54,   768,   781,   487,
+   111,   784,   773,   774,   775,    47,    62,   790,     4,     5,
+   781,    62,   773,   766,    94,   768,    74,    94,   464,    58,
+    83,    84,   775,    62,     3,     4,     5,     6,   781,    62,
+    25,   784,    27,    62,    54,    93,    93,   790,   766,   111,
+   768,   803,    62,   858,    93,    56,    57,   775,   863,  1565,
+    59,    93,    48,   781,    74,   980,    95,   108,   648,    93,
+    56,    57,    41,    58,    74,    59,    75,    62,    77,    48,
+     4,     5,   932,    74,  1328,   108,   891,    56,    57,     4,
+     5,    74,   897,     8,     9,   950,   901,    74,   534,    14,
+    11,   537,     3,     4,     5,   541,     7,     8,     9,   689,
+    95,    80,   109,    28,   766,    30,   768,    59,   554,    88,
+   108,    36,    74,   775,   897,  1369,   899,   900,   901,   781,
+    45,   567,    56,    57,   939,   571,   941,   942,   108,    54,
+   945,    56,    57,   939,     7,     8,     9,   907,   900,   901,
+   945,    14,   108,   733,   897,    56,    57,    54,   901,   905,
+   108,   945,    54,   599,    74,    62,   939,    47,    31,   605,
+   943,   944,   945,    36,    54,   755,    74,    74,    93,  1308,
+  1101,  1102,    45,  1104,     3,     4,     5,   992,  1044,  1044,
+    59,     4,     5,   945,    74,    64,   939,   992,     4,     5,
+  1005,  1057,   945,   108,  1151,  1152,    75,   109,   992,   109,
+  1060,  1061,  1062,    93,   906,  1020,   908,    59,    60,   992,
+    80,    81,    82,    83,    84,  1036,   111,  1032,   111,   809,
+   108,  1042,  1043,  1180,  1181,  1046,  1047,    56,    57,  1050,
+   992,    54,    48,    56,    57,  1109,    74,  1020,    27,   992,
+    56,    57,  1057,    74,     3,     4,     5,    70,   950,  1032,
+    54,  1066,  1023,  1068,     8,     9,  1057,    80,   111,  1394,
+    14,    74,  1023,   111,    80,     4,     5,  1020,    59,    60,
+     4,     3,     4,     5,  1057,  1410,   108,   305,   306,  1032,
+   108,  1096,    36,  1066,   108,  1068,  1057,     4,     5,    58,
+  1155,    45,    54,   321,  1109,    54,   324,    56,    57,   327,
+    62,    35,   330,   108,  1057,     8,   334,    54,    42,    48,
+    59,    60,    74,  1066,   342,  1068,  1513,    56,    57,   111,
+  1513,    55,    54,    57,    56,    57,    58,  1307,  1306,  1057,
+  1308,    48,   797,   798,   799,  1164,    54,   401,  1153,    56,
+    57,    80,  1044,    93,    62,    47,  1151,  1152,  1153,  1215,
+    59,    60,    64,  1607,    59,    60,    74,  1151,  1152,  1153,
+  1175,    59,    60,    80,  1499,    54,    59,  1182,  1151,  1152,
+  1153,  1175,    93,    62,  1175,  1180,  1181,  1182,  1517,   109,
+  1195,    59,    60,    54,  1519,    74,  1180,  1181,  1182,    36,
+  1152,  1153,  1175,  1253,    60,  1057,    64,  1180,  1181,  1182,
+  1153,    64,   136,   467,    59,    60,   140,     3,     4,     5,
+     6,    64,     9,  1548,   108,    12,   108,    60,    62,  1181,
+  1182,   867,  1175,   108,   108,   108,  1128,   108,    64,  1182,
+    64,   165,    64,    62,   111,   169,     3,     4,     5,     6,
+    27,   175,   176,  1578,    31,    41,   108,  1175,   108,   108,
+    47,  1586,   108,  1155,   108,   901,    30,    31,    75,    33,
+    56,    57,    59,    75,    61,    62,    75,    64,    75,     3,
+     4,     5,    59,    60,    41,   108,    31,    64,    75,    62,
+    77,    48,   108,    57,  1299,    59,    62,    59,   222,    56,
+    57,    65,  1307,   108,  1309,   108,    93,    94,  1299,    62,
+   108,  1316,    94,  1517,    88,  1309,   111,   111,  1309,    74,
+  1325,   108,  1316,  1215,    48,  1316,  1299,    47,   108,   108,
+  1491,    88,    56,    57,   552,   553,  1309,   108,   108,   111,
+  1351,  1352,   111,  1316,   109,   108,    60,  1494,  1495,   758,
+     3,   109,   108,     6,    59,  1306,  1299,  1308,    64,    93,
+    64,     3,     4,     5,     6,    59,  1309,   621,    59,    59,
+   108,   780,  1545,  1316,   628,   108,    93,   141,    31,   109,
+    93,  1299,   146,    93,    93,   149,   150,   151,    41,   111,
+   109,  1309,   108,   108,     8,    33,   141,   108,  1316,    41,
+   108,   146,   109,    56,    57,   108,    48,     4,     5,  1420,
+   108,   108,   176,    64,    56,    57,   111,    70,   182,   108,
+     3,     4,     5,     6,   108,   108,  1421,    80,   108,   193,
+   194,   195,   108,    54,   358,    88,   108,  1421,    80,   108,
+    93,   111,     3,     4,     5,   209,    88,    44,    47,   194,
+    62,   108,   108,   217,   218,    96,   108,    54,    41,    56,
+    57,    62,    62,     9,    60,  1470,     3,     4,     5,  1421,
+  1475,  1476,  1477,    56,    57,  1480,    60,    16,    60,   403,
+   108,  1475,   108,   737,  1475,  1476,  1480,    93,   108,  1480,
+   108,  1496,   108,    54,   258,    56,    57,  1470,   108,  1494,
+  1495,  1496,  1475,  1476,  1477,    88,   108,  1480,  1513,    60,
+  1494,  1495,  1496,   258,   108,  1520,    93,   441,    60,    56,
+    57,  1494,  1495,    64,  1529,    54,  1520,  1470,  1308,  1520,
+   784,    93,  1475,  1476,  1477,  1529,   790,  1480,  1529,  1550,
+  1513,   111,    17,  1495,  1496,    93,  1182,  1520,    60,    54,
+   107,    60,  1557,    97,   108,   479,  1529,  1475,  1476,  1195,
+    11,   108,  1480,   487,   328,   108,    60,  1518,   108,    88,
+  1513,    90,    60,    92,  1579,    60,    93,  1520,    59,    11,
+   504,     3,     4,     5,  1557,  1579,  1529,    64,  1579,    60,
+   108,    60,   108,  1229,  1230,  1231,  1232,     3,     4,     5,
+   108,    11,  1520,    60,     0,     0,  1579,     0,     2,    35,
+   170,  1529,  1617,  1408,  1557,   671,  1025,  1026,   137,   939,
+   139,   441,  1544,  1617,    30,   774,  1617,     4,     5,  1164,
+   165,     8,     9,   169,    56,    57,  1579,    14,    94,   139,
+   404,   405,  1393,   897,  1617,  1054,  1617,   901,    54,  1243,
+    56,    57,   298,   871,   418,   721,  1292,   421,  1331,    36,
+   925,  1579,   920,   427,   428,   429,   242,  1200,    45,   433,
+    47,   774,   781,   418,  1617,  1217,   421,    54,   654,    56,
+    57,   899,   900,   918,   602,   939,   200,   345,   433,   124,
+  1309,   945,  1586,    70,     3,     4,     5,     6,  1565,  1617,
+  1176,  1598,    -1,    80,  1534,   469,  1596,   471,  1000,   473,
+   474,   475,  1325,    90,   478,    -1,    93,    94,    -1,    -1,
+   484,   485,   486,   647,   469,   489,   471,    -1,    -1,   493,
+    -1,    -1,    41,    -1,  1370,    -1,    -1,  1517,   992,   484,
+    -1,    -1,    -1,   507,    -1,    54,    -1,    56,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,     3,     4,     5,
+     6,    70,   686,   687,   688,   689,  1020,  1403,    -1,    -1,
+   534,    80,    -1,   537,     3,     4,     5,    -1,  1032,    88,
+     4,     5,    -1,    -1,    93,     9,    -1,    -1,   552,   553,
+   554,    -1,    38,    39,    -1,    41,    -1,   107,   108,    -1,
+   319,  1210,  1211,   567,  1213,  1214,    -1,  1216,    54,   733,
+    56,    57,  1066,   737,  1068,     3,     4,     5,     1,    -1,
+     3,     4,     5,     6,     7,     8,     9,    56,    57,    -1,
+    54,    14,    56,    57,  1470,    -1,    -1,    -1,   357,    -1,
+  1476,  1477,   766,    -1,   768,    28,    70,    30,    31,   773,
+   774,   775,    -1,    36,    -1,    -1,    80,   781,    41,    -1,
+  1496,    -1,    45,    -1,   628,    48,    -1,    47,    56,    57,
+    94,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    -1,
+    -1,     3,     4,     5,   648,    -1,    -1,    70,    -1,  1107,
+    -1,    -1,     3,     4,     5,    -1,    -1,    80,    -1,  1153,
+     3,     4,     5,     6,    -1,    88,    86,    87,    -1,    -1,
+    93,    91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,
+    -1,  1557,    -1,   687,    -1,   689,   690,    -1,  1182,    -1,
+    -1,    -1,  1341,  1342,    56,    57,    -1,  1573,    41,    -1,
+   459,   460,    -1,     4,     5,    56,    57,    -1,   467,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,  1595,
+    -1,    -1,  1180,  1181,    -1,    -1,  1602,    70,    -1,   733,
+     3,     4,     5,    -1,     7,     8,     9,    80,    -1,    -1,
+   744,   745,    -1,   747,    -1,    88,    47,    -1,    -1,    -1,
+    93,   755,    -1,    54,   758,    56,    57,    -1,    31,   744,
+   745,    -1,   747,    36,    -1,    -1,    -1,    -1,    -1,    70,
+   774,    -1,   531,   532,    -1,    -1,   780,    -1,   328,    80,
+    -1,    -1,    -1,    56,    57,    -1,    -1,    -1,    -1,    90,
+    -1,    -1,    93,    94,  1443,  1444,  1445,    -1,    -1,   803,
+    -1,   193,   194,   195,    -1,   564,    -1,   566,    -1,    -1,
+   569,   570,    -1,   572,   573,   574,   575,   576,   577,   578,
+   579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
+   589,   590,    -1,   592,    -1,    -1,    -1,    -1,    -1,   598,
+    -1,  1299,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,   401,    -1,  1502,  1503,    -1,    -1,    -1,    -1,  1023,
+    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,   628,
+    -1,    -1,    -1,    14,    -1,    -1,   635,     4,     5,    -1,
+    -1,    22,     9,    -1,     3,     4,     5,     6,    -1,    -1,
+     9,    -1,    -1,  1057,    -1,   899,   900,   901,   657,   658,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,
+    -1,    -1,    31,    -1,   673,    -1,    54,   467,    56,    57,
+    47,  1570,    41,    -1,    65,    -1,    -1,    54,    47,    56,
+    57,    -1,    70,    -1,   938,    54,    -1,    56,    57,   943,
+   944,   945,    80,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    88,    70,    90,    80,    -1,    93,    94,    -1,    -1,   944,
+    -1,    80,   721,    90,    -1,    -1,    93,    94,    -1,    88,
+    -1,    90,    -1,    -1,    93,    94,    -1,    -1,     3,     4,
+     5,     6,    -1,   124,   534,    -1,    -1,   537,   992,    -1,
+    -1,   541,   542,   543,   544,   545,     7,     8,     9,    -1,
+    -1,    -1,    -1,    14,   554,    -1,   765,   148,     3,     4,
+     5,     6,    -1,    -1,    -1,    -1,    41,   567,    -1,  1513,
+    31,  1025,  1026,    48,    -1,    36,   785,   786,    -1,   788,
+    -1,    56,    57,    -1,    45,    -1,  1494,  1495,    -1,    -1,
+    -1,    -1,    -1,    -1,   803,    -1,    41,    -1,  1212,    60,
+  1054,    -1,    -1,  1217,    -1,    80,    -1,    -1,    -1,    54,
+   460,    56,    57,    88,    -1,    -1,   825,   467,    -1,    -1,
+    -1,   621,    -1,    -1,    -1,    -1,    -1,   469,   628,   471,
+    -1,   473,   474,   475,     4,     5,    -1,    -1,     8,     9,
+    -1,    -1,   484,    88,    14,    -1,   237,   238,   857,   858,
+    -1,    -1,    -1,   862,   863,    -1,    -1,    -1,    28,   250,
+    30,    -1,    -1,    -1,    -1,    -1,    36,    -1,   877,    -1,
+   879,    -1,   881,    -1,    -1,    45,    -1,    47,     7,     8,
+     9,    -1,   532,    -1,    54,    14,    56,    57,    -1,    -1,
+    -1,    -1,  1306,  1307,  1308,  1149,  1150,  1151,  1152,  1153,
+    70,    -1,    31,  1157,    -1,    -1,    -1,    36,   917,    -1,
+    80,    -1,    -1,    -1,  1149,  1150,    45,    -1,   927,    -1,
+    90,    -1,  1157,    93,    94,    -1,  1180,  1181,  1182,   320,
+    -1,    60,    -1,   942,     7,     8,     9,   737,    -1,    -1,
+    -1,    14,   592,    -1,    -1,    -1,   955,    -1,   598,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1210,  1211,    31,  1213,
+  1214,    -1,  1216,    36,   973,    -1,    -1,    -1,    -1,    -1,
+    -1,   362,    45,    78,    79,    80,    81,    82,    83,    84,
+   371,    -1,    -1,   992,   784,   635,    -1,    -1,    -1,    -1,
+   790,     4,    -1,   384,    -1,    -1,     3,     4,     5,     6,
+    -1,    14,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    24,    -1,  1267,  1268,    -1,  1270,    30,    31,    -1,
+    33,    -1,    35,    -1,    31,    -1,  1035,    -1,    -1,    42,
+    -1,    -1,  1267,  1268,    41,  1270,    -1,    -1,    -1,    -1,
+    -1,    -1,    55,    -1,    57,    -1,    -1,    54,    -1,    56,
+    57,    -1,    65,  1307,  1308,    -1,    -1,    -1,   858,    72,
+    -1,    -1,    -1,    70,     4,     5,    -1,    -1,    -1,     9,
+    83,    84,    -1,    80,    -1,    -1,  1085,  1086,    -1,    -1,
+  1089,    88,    -1,    -1,    -1,    -1,    93,  1341,  1342,    -1,
+    -1,   891,    -1,   106,    -1,    -1,    -1,   897,    -1,    -1,
+  1109,   901,   744,   745,  1518,   747,    -1,    47,    -1,   500,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
+    -1,   134,    -1,   136,    -1,    -1,    -1,   140,   141,    -1,
+    70,   773,   145,   146,    -1,    -1,   149,   150,   151,   939,
+    80,   941,    -1,    -1,    -1,   945,    -1,    -1,    -1,    -1,
+    90,    -1,   165,    93,    94,    -1,   169,  1166,    -1,  1168,
+    -1,  1170,   175,   176,    -1,    -1,    -1,  1421,    -1,  1178,
+    -1,    -1,    -1,    -1,    -1,   566,    -1,    -1,  1187,  1188,
+   193,   194,   195,  1192,     3,     4,     5,     6,    -1,  1443,
+  1444,  1445,   992,    -1,    -1,    -1,    -1,    -1,    -1,  1208,
+  1209,    -1,    -1,    -1,    -1,  1005,    -1,   857,   858,   222,
+    -1,    -1,    31,   863,    -1,    -1,    -1,    -1,    -1,   610,
+  1020,    -1,    41,    -1,  1233,   238,    -1,   877,    -1,   879,
+    -1,   881,  1032,    -1,   247,    54,    -1,    56,    57,    -1,
+  1494,  1495,  1496,    -1,    -1,   258,    -1,    -1,  1502,  1503,
+    -1,    70,    -1,    -1,    -1,  1264,    -1,    -1,    -1,    -1,
+    -1,    80,    -1,    -1,    -1,    -1,  1066,    -1,  1068,    88,
+    -1,    -1,    -1,    -1,    93,    -1,    -1,   927,    -1,  1288,
+    -1,    -1,    -1,   296,   297,   753,    -1,    -1,   679,    -1,
+     3,     4,     5,    -1,     7,    -1,  1096,    -1,    -1,   690,
+    -1,   943,   944,   945,     3,     4,     5,     6,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   783,  1570,    30,    -1,  1328,
+    -1,   789,    -1,   973,    37,    -1,    -1,    -1,   341,    -1,
+   721,    -1,   345,    -1,   347,   348,   349,    -1,  1347,    -1,
+    -1,    54,    41,    56,    57,   358,    -1,    -1,    -1,    48,
+   992,    -1,    -1,  1153,    -1,    -1,    -1,    56,    57,    -1,
+  1369,     4,     5,    -1,    -1,     8,     9,    -1,    -1,    -1,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   392,
+    -1,  1023,  1182,    -1,    -1,    -1,    -1,    -1,   401,    88,
+   403,   404,    -1,    36,    -1,  1195,    -1,    -1,    -1,    -1,
+    -1,    -1,    45,    -1,    47,   418,    -1,    -1,   421,    -1,
+    -1,    54,  1421,    56,    57,    -1,    -1,    -1,    -1,    -1,
+   433,    -1,    -1,    -1,   892,    -1,   894,    70,   441,    -1,
+    -1,    -1,  1441,  1442,    -1,    -1,    -1,    80,    -1,    -1,
+    -1,  1450,     3,     4,     5,     6,    -1,    90,    -1,    -1,
+    93,    94,     3,     4,     5,     6,   469,    -1,   471,    -1,
+   473,   474,   475,    -1,    -1,    -1,   479,    -1,    -1,  1478,
+    -1,   484,    -1,    -1,   487,    -1,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,
+    41,   504,    -1,    -1,    -1,    56,    57,    48,     3,     4,
+     5,     6,    -1,    -1,     9,    56,    57,  1149,  1150,  1151,
+  1152,  1153,    -1,    -1,    -1,  1157,  1166,    -1,  1168,    80,
+  1170,    -1,    -1,    -1,    -1,  1325,    31,    88,    -1,   542,
+   543,   544,   545,    -1,   925,    -1,    41,    88,  1180,  1181,
+  1182,    -1,    -1,    -1,    -1,    -1,    -1,   938,    -1,    54,
+    -1,    56,    57,    -1,    -1,    -1,     3,     4,     5,     6,
+    -1,    -1,     9,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+  1212,    -1,    -1,    -1,    -1,    80,    82,    -1,   347,   348,
+   349,    -1,    -1,    88,    31,    -1,    -1,    -1,    93,   602,
+    -1,   604,    -1,    -1,    41,    -1,    -1,  1065,  1607,  1067,
+    47,    -1,    -1,   616,    -1,   618,   619,    54,   621,    56,
+    57,    -1,    -1,    -1,  1264,   628,    -1,    -1,    -1,   632,
+    -1,    -1,    -1,    70,    -1,  1267,  1268,    -1,  1270,    -1,
+    -1,    -1,    -1,    80,   647,    -1,    -1,    -1,    -1,    -1,
     -1,    88,    -1,    90,    -1,    -1,    93,    94,    -1,    -1,
-    -1,    -1,    -1,     4,  1172,    -1,  1174,    -1,  1176,    -1,
-   951,    -1,   953,    14,   955,   956,   957,    -1,    -1,    -1,
-    -1,    -1,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
-    31,    -1,    33,    -1,    35,    -1,     3,     4,     5,     6,
-    -1,    42,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    12,    -1,    14,    55,    -1,    57,    -1,    -1,  1000,
-    -1,    -1,    -1,    -1,    65,    -1,    -1,    28,    -1,    30,
-    31,    72,  1013,    -1,    41,    36,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    84,    45,  1026,    -1,    54,  1029,    56,
-    57,    -1,    -1,    54,    -1,    56,    57,  1038,   107,   108,
-    -1,  1269,    -1,    70,    -1,    -1,    -1,    -1,    -1,    70,
-  1051,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    88,  1063,    -1,    -1,    -1,    93,    88,    -1,    -1,
-    -1,  1072,    93,  1074,    -1,   136,    -1,    -1,    -1,   140,
-   141,    -1,    -1,    -1,    -1,   146,    -1,    -1,   149,   150,
-   151,     3,     4,     5,     6,    -1,    -1,    -1,    -1,    -1,
-   803,  1102,   805,    -1,   165,    -1,  1107,  1108,   169,  1110,
-    -1,   618,   619,    -1,   175,   176,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    41,
-    -1,    -1,   193,   194,   195,    -1,    48,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    56,    57,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1155,  1156,  1157,  1158,  1159,     4,
-     5,   222,  1163,     8,     9,    -1,    -1,    -1,    80,    14,
-    -1,    -1,    -1,    -1,   877,   878,    88,   880,    -1,   686,
-    -1,   688,   689,    -1,   691,  1186,  1187,  1188,    -1,    -1,
-    -1,    36,    -1,    -1,    -1,  1423,    -1,    -1,   259,    -1,
-    45,    -1,    47,    -1,    -1,   908,    -1,    -1,    -1,    54,
-    -1,    56,    57,    -1,     4,     5,  1217,     7,     8,     9,
-    -1,  1222,    12,    -1,    14,    70,   733,    -1,    -1,    -1,
-     3,     4,     5,     6,    -1,    80,   297,   298,    28,    -1,
-    30,    31,    -1,    -1,    -1,    90,    36,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    -1,    45,   959,    47,    -1,    -1,
-   329,    -1,    -1,    -1,    54,    -1,    56,    57,    41,    -1,
-    -1,  1272,  1273,    -1,  1275,    48,    -1,    -1,    -1,    -1,
-    70,   342,    -1,    56,    57,   346,    -1,   348,   349,   350,
-    80,    -1,    -1,    -1,   355,    -1,    -1,    -1,   359,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    80,    -1,    -1,
-  1311,  1312,  1313,    -1,   821,    88,    -1,     3,     4,     5,
-     6,    -1,  1025,     9,    -1,    -1,    -1,    -1,    -1,  1330,
-    -1,    -1,   393,   402,  1037,    -1,    -1,    -1,    -1,    -1,
-    -1,   402,    -1,   404,   405,    31,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,   419,    -1,
-    -1,   422,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,    -1,   434,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   442,    -1,    -1,    70,    -1,    -1,   894,    -1,   896,
-    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,   468,
-   907,    -1,    88,    -1,   911,   912,    -1,    93,    -1,   470,
-    -1,   472,    -1,   474,   475,   476,    -1,    -1,    -1,   480,
-  1123,    -1,  1423,    -1,   485,    -1,    -1,   488,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    -1,    -1,   503,   504,    -1,    -1,    -1,    -1,   955,   956,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1162,
-    -1,     3,     4,     5,     6,   534,    -1,     9,   537,    -1,
-    -1,    -1,   541,   542,   543,   544,   545,    -1,    -1,    -1,
-    -1,   542,   543,   544,   545,   554,    -1,    -1,    -1,    31,
-    -1,    -1,  1493,  1494,  1495,    -1,    -1,    -1,   567,    41,
-     1,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,  1512,    54,    14,    56,    57,  1517,    -1,    -1,    -1,
-    -1,    -1,  1225,    -1,    -1,    -1,  1229,    28,    70,    30,
-    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    80,    -1,
-    41,   602,    -1,   604,    45,    -1,    88,    48,    -1,    -1,
-    -1,    93,   621,    54,    -1,    56,    57,   618,   619,   628,
-   621,  1264,    -1,    -1,    -1,    -1,    -1,   628,    -1,    70,
-     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    80,
-   641,    14,    -1,    -1,    -1,    -1,   647,    88,    -1,    -1,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    98,    31,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,
-   671,    -1,    45,    -1,    47,    -1,    -1,    -1,   679,    -1,
-    -1,    54,    -1,    56,    57,   686,   687,   688,   689,   690,
-   691,    -1,    -1,    -1,    -1,  1338,    -1,    70,    -1,  1342,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,  1155,  1156,
-  1157,  1158,    -1,   714,    -1,    88,  1163,    -1,    -1,    -1,
-    93,  1364,  1365,    -1,    -1,    -1,    -1,    -1,   737,    -1,
-    -1,    -1,   733,    -1,    -1,    -1,   737,    -1,    -1,  1186,
-  1187,    -1,    -1,   744,   745,    -1,   747,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     3,     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   775,    -1,    -1,   778,    -1,   780,
-    -1,    -1,    -1,    -1,   785,   786,   787,   796,    31,    -1,
-    -1,    -1,   793,   802,    -1,   796,    -1,    -1,    41,    -1,
-    -1,   802,    -1,    -1,    -1,    -1,    -1,    -1,   809,   810,
-   811,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
-   821,    -1,    -1,    -1,    -1,  1272,  1273,    70,  1275,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,     3,     4,
-     5,     6,     7,     8,     9,    88,    -1,    12,    -1,    14,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   870,    -1,    28,    -1,    30,    31,   348,   349,   350,
-    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,   894,   903,   896,    -1,    -1,    -1,    -1,
-   909,    -1,   903,    -1,   913,    70,   907,    -1,   909,     4,
-   911,   912,   913,    -1,    -1,    80,    -1,    -1,   919,    -1,
-    -1,    -1,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
+    -1,    -1,    -1,   159,  1122,    -1,    -1,    -1,   671,     4,
+     5,    -1,    -1,    -1,     9,   678,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   686,   687,   688,   689,   690,   691,    -1,
+    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1086,  1496,    -1,   204,    -1,
+    -1,    -1,    47,    -1,    -1,     3,     4,     5,     6,    54,
+    -1,    56,    57,  1513,    -1,    -1,     3,     4,     5,     6,
+   733,    -1,     9,    -1,   737,    70,    -1,    -1,    -1,    -1,
+    -1,   744,   745,  1201,   747,    80,    -1,    -1,  1206,    -1,
+    -1,    -1,    -1,    41,    31,    90,    -1,    -1,    93,    94,
+   763,    -1,    -1,   766,    41,   768,    54,    -1,    56,    57,
+   773,   774,   775,    -1,    62,    -1,    -1,    54,   781,    56,
+    57,   784,    70,    -1,    -1,    -1,    -1,   790,    -1,  1421,
+    -1,  1172,    80,    70,   797,   798,   799,  1178,    -1,  1257,
+    88,    -1,    -1,    80,    -1,    93,   809,    -1,    -1,    -1,
+    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,     1,     4,
+     3,     4,     5,     6,    -1,     8,    -1,    -1,    -1,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,    24,
     -1,    -1,    -1,    -1,    -1,    30,    31,    -1,    33,    -1,
-    35,    -1,   951,    -1,   953,    -1,    -1,    42,   957,    -1,
-   951,    -1,   953,    -1,   955,   956,   957,    -1,    -1,    -1,
-    55,    -1,    57,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,
-    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-    -1,  1000,    28,    -1,    30,    31,    -1,    -1,    -1,  1000,
-    36,    -1,    -1,    -1,  1013,    41,    -1,    -1,    -1,    45,
-  1019,    -1,  1013,    -1,    -1,    -1,    -1,  1026,    54,    -1,
-    56,    57,    -1,  1024,    60,  1026,    -1,    -1,  1029,  1038,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,  1038,   133,   134,
-    -1,   136,    -1,    -1,    80,   140,   141,    -1,    -1,   144,
-    -1,   146,    88,    -1,   149,   150,   151,    93,    -1,    -1,
-    -1,   156,  1063,  1072,    -1,  1074,    -1,    -1,    -1,    -1,
-   165,  1072,    -1,  1074,   169,     3,     4,     5,     6,    -1,
-   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1102,    -1,    -1,    -1,    -1,   193,   194,
-   195,  1102,    -1,    31,    -1,    -1,  1107,  1108,   203,  1110,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    54,   222,    56,    57,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   618,   619,    -1,
-   621,    -1,    70,    -1,    -1,    -1,    -1,   628,    -1,    -1,
-  1159,    -1,    80,    -1,  1155,  1156,  1157,  1158,  1159,    -1,
-    88,    -1,  1163,    -1,   259,    93,    -1,    -1,    -1,  1170,
-    -1,     3,     4,     5,     6,     7,     8,     9,    -1,  1188,
-    -1,    -1,    14,    -1,    -1,  1186,  1187,  1188,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,
-    -1,  1202,    -1,    -1,    36,   686,    -1,   688,   689,    41,
-   691,    -1,    -1,    45,    -1,    47,  1217,    -1,    -1,    -1,
-    -1,  1222,    54,    -1,    56,    57,    -1,    -1,    -1,     3,
-     4,     5,     6,    -1,   329,     9,    -1,    -1,    70,    -1,
-     3,     4,     5,     6,    -1,    -1,     9,    -1,    80,    -1,
-    -1,   346,   733,    -1,    -1,    -1,    88,    31,    90,   354,
-    -1,    93,    94,    -1,   359,    -1,    -1,    41,    31,    -1,
-    -1,  1272,  1273,    -1,  1275,    -1,    -1,    -1,    41,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,    -1,    70,    -1,   393,  1300,
-    -1,    -1,    -1,    -1,    -1,    -1,    80,    70,    -1,   404,
-  1311,  1312,  1313,    -1,    88,    -1,    31,    80,    -1,    93,
-    -1,  1330,    -1,    -1,   419,    88,    -1,   422,    -1,  1330,
-    93,    -1,    -1,   428,   429,   430,    -1,    -1,    -1,   434,
-   821,    -1,    -1,    -1,    -1,    -1,    -1,   442,    63,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-     3,     4,     5,     6,    -1,   470,     9,   472,    -1,   474,
-   475,   476,    -1,    -1,    -1,   480,    -1,    -1,    -1,    -1,
-   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,    31,    -1,
+    35,    -1,    -1,    -1,    -1,    -1,    -1,    42,    41,   618,
+   619,    -1,  1494,  1495,  1496,    48,    -1,    -1,    -1,    -1,
+    55,    54,    57,    56,    57,    -1,    -1,    -1,    -1,   882,
+    65,   884,    -1,    -1,    -1,    -1,    -1,    72,   891,    -1,
+    -1,    -1,   895,    -1,   897,    -1,   899,   900,   901,    84,
+    -1,    -1,  1360,  1361,   907,    88,    -1,    -1,    -1,    -1,
+    -1,    -1,  1293,  1294,    -1,    -1,    -1,    -1,    -1,  1377,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   686,   460,   688,
+   689,    -1,   691,    -1,    -1,   467,   939,    -1,   941,    -1,
+   943,   944,   945,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   136,    -1,    -1,    -1,   140,   141,    -1,    -1,    -1,
+    -1,   146,    -1,    -1,   149,   150,   151,    -1,     3,     4,
+     5,     6,    -1,    -1,   733,    -1,    -1,    -1,  1436,  1437,
+   165,   477,    -1,    -1,   169,    -1,   482,    -1,    -1,   992,
+   175,   176,    -1,    -1,    -1,    -1,    31,  1455,  1456,    -1,
+   532,    -1,  1005,    -1,  1385,    -1,    41,    -1,   193,   194,
+   195,    -1,   508,    -1,    -1,    -1,    -1,  1020,   514,    54,
+  1023,    56,    57,    -1,    -1,    -1,  1407,  1408,    -1,  1032,
+   526,   527,    -1,   529,    -1,    70,    -1,   222,    -1,    -1,
+    -1,    -1,  1045,    -1,    -1,    80,    -1,    -1,    -1,    -1,
+   809,    -1,    -1,    88,  1057,    -1,    -1,    -1,    93,    -1,
+   592,    -1,    -1,  1066,    -1,  1068,   598,    -1,    -1,    -1,
+    -1,    -1,    -1,   258,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,    -1,  1096,    -1,    -1,   628,    -1,  1101,  1102,
+    -1,  1104,    -1,   635,    -1,    -1,    -1,  1488,    -1,    -1,
+    -1,   296,   297,    -1,     3,     4,     5,     6,    -1,    -1,
+     9,    -1,    -1,   882,    -1,   884,    -1,    -1,   624,   625,
+    -1,    -1,    -1,   629,    -1,    -1,   895,    -1,    -1,    -1,
+   899,   900,    31,    -1,    -1,    -1,  1149,  1150,  1151,  1152,
+  1153,    -1,    41,    -1,  1157,    -1,   341,    -1,    47,    -1,
+   345,    -1,   347,   348,   349,    54,    -1,    56,    57,   354,
+     4,     5,    -1,   358,     8,     9,    -1,  1180,  1181,  1182,
+    14,    70,    -1,    -1,   943,   944,    -1,    -1,    -1,    -1,
+    -1,    80,    -1,    -1,    28,    -1,    30,    -1,    -1,    88,
+    -1,    90,    36,    -1,    93,    94,    -1,   392,    -1,  1212,
+    -1,    45,    -1,    -1,  1217,    -1,   401,    -1,   403,   404,
+    54,    -1,    56,    57,     3,     4,     5,     6,     7,     8,
+     9,    -1,    -1,   418,    -1,    14,   421,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   433,    28,
+    -1,    30,    31,    -1,    -1,    -1,   441,    36,    -1,    -1,
+    -1,    -1,    41,    -1,  1267,  1268,    45,  1270,    47,    -1,
+    -1,   803,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    -1,    -1,    -1,   469,    -1,   471,    -1,   473,   474,
+   475,    70,    -1,    -1,   479,   791,    -1,   793,    -1,   484,
+    -1,    80,   487,  1306,  1307,  1308,    -1,    -1,    -1,    88,
+    -1,    90,    -1,    -1,    93,    94,    -1,    -1,    -1,   504,
+    -1,    -1,  1325,    -1,    -1,   857,   858,    -1,    -1,    -1,
+    -1,   863,    -1,    -1,    -1,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    -1,   877,    14,   879,    -1,   881,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   542,   543,   544,
+   545,    -1,    -1,    31,    -1,    -1,    -1,    -1,    36,   865,
+   866,    -1,   868,    41,    -1,    -1,    -1,    45,    -1,    47,
+    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+  1149,  1150,  1151,  1152,    -1,   927,    -1,    -1,  1157,    -1,
+   896,    -1,    70,    -1,    -1,    -1,   347,   348,   349,    -1,
+    -1,    -1,    80,    12,    -1,    -1,    -1,   602,  1421,   604,
+    88,  1180,  1181,    -1,    -1,    93,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   618,   619,    -1,   621,    -1,    -1,    -1,
+    -1,   973,    -1,   628,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   947,    -1,    -1,    -1,    -1,   641,    -1,    -1,    -1,
+   992,    -1,   647,    62,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,   671,    -1,    -1,    -1,
+    -1,  1494,  1495,  1496,   679,    -1,    -1,    -1,    -1,    -1,
+    -1,   686,   687,   688,   689,   690,   691,    -1,  1267,  1268,
+  1513,  1270,    -1,    -1,    -1,  1518,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,  1019,    -1,    -1,    -1,    -1,    -1,   714,
+    -1,    -1,    -1,    -1,    -1,  1031,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,   733,     8,
+     9,    -1,   737,    -1,    -1,    14,    -1,    -1,    -1,   744,
+   745,    -1,   747,    -1,     3,     4,     5,     6,    -1,    28,
+     9,    30,    -1,    -1,    -1,   760,    -1,    36,   763,    -1,
+    -1,   766,    -1,   768,    -1,    -1,    45,    -1,   773,   774,
+   775,    -1,    31,    -1,    -1,    54,   781,    56,    57,   784,
+    -1,    -1,    41,    -1,    -1,   790,    -1,    -1,    47,    -1,
+    -1,    -1,   797,   798,   799,    54,    -1,    56,    57,    -1,
+    -1,  1117,    -1,    -1,   809,    -1,    -1,    -1,    -1,    -1,
+    -1,    70,     4,    -1,  1166,    -1,  1168,    -1,  1170,    -1,
+    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+    -1,    90,    -1,    -1,    93,    94,    -1,    -1,    30,    31,
+  1156,    33,    -1,    35,    -1,    -1,    -1,    -1,    -1,    -1,
+    42,    -1,    -1,    -1,    -1,    -1,    -1,   618,   619,    -1,
+   621,    -1,    -1,    55,    -1,    57,    -1,   628,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   882,    -1,   884,
+    -1,    -1,    -1,    -1,    -1,    -1,   891,    -1,    80,    -1,
+   895,    -1,   897,    -1,   899,   900,   901,    -1,    -1,    -1,
+    -1,    -1,   907,    -1,  1220,    -1,    -1,    -1,  1224,    -1,
+    -1,    -1,  1264,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,   686,    -1,   688,   689,    -1,
+   691,    -1,    -1,    -1,   939,    -1,   941,    -1,   943,   944,
+   945,   133,   134,  1259,   136,    -1,    -1,    -1,   140,   141,
+    -1,    -1,   144,    -1,   146,    -1,    -1,   149,   150,   151,
+    -1,    -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   733,   165,    -1,    -1,    -1,   169,    -1,    -1,
+    -1,    -1,    -1,   175,   176,    -1,    -1,   992,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+  1005,   193,   194,   195,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   203,    -1,    -1,    -1,  1020,    -1,    -1,  1023,    -1,
+  1336,    -1,    -1,    -1,  1340,    -1,    -1,  1032,    -1,    -1,
+   222,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     3,
+     4,     5,     6,     7,     8,     9,  1362,  1363,   809,    -1,
+    14,    -1,  1057,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1066,    -1,  1068,    -1,    -1,   258,    31,    -1,  1421,
+    -1,    -1,    36,    41,    -1,    -1,    -1,    41,    -1,    -1,
+    -1,    45,    -1,    47,    -1,    -1,    54,    -1,    56,    57,
+    54,  1096,    56,    57,    62,    -1,  1101,  1102,    -1,  1104,
+    -1,    -1,    70,    -1,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,    -1,    80,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+    88,   882,    -1,   884,    88,    93,    90,    -1,    -1,    93,
+    94,    -1,    -1,    -1,   895,    -1,   328,    -1,   899,   900,
+   901,    -1,    -1,    -1,  1149,  1150,  1151,  1152,  1153,    -1,
+    -1,    -1,  1157,   345,    -1,    -1,    -1,    -1,    -1,  1164,
+    -1,   353,    -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1180,  1181,  1182,    -1,    -1,
+    -1,    -1,   943,   944,   945,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1200,    -1,    -1,    -1,    -1,
+   392,    -1,    -1,    -1,    -1,    -1,    -1,  1212,    -1,    -1,
+    -1,   403,  1217,    -1,    -1,    -1,    -1,     1,    -1,     3,
+     4,     5,     6,     7,     8,     9,   418,    -1,    -1,   421,
+    14,   992,    -1,    -1,    -1,   427,   428,   429,    -1,    -1,
+    -1,   433,    -1,    -1,    28,    -1,    30,    31,    32,   441,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,
+    -1,    45,  1267,  1268,    48,  1270,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    -1,    -1,    -1,   469,    -1,   471,
+    -1,   473,   474,   475,     4,     5,    70,   479,     8,     9,
+  1295,    -1,   484,    -1,    14,   487,    80,    -1,    -1,    -1,
+    -1,  1306,  1307,  1308,    88,    -1,    -1,    -1,    28,    93,
+    30,    -1,   504,    -1,    98,    -1,    36,    -1,    -1,    -1,
+  1325,    -1,    -1,    -1,    -1,    45,  1331,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    58,    -1,
+    -1,    -1,   534,    -1,    -1,   537,    -1,    -1,     3,     4,
+     5,     6,    -1,    -1,     9,    -1,    -1,    -1,    -1,    -1,
+   552,   553,   554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    93,    -1,   567,    31,    -1,    -1,     4,
+    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,  1149,  1150,
+  1151,  1152,  1153,    -1,    -1,    -1,  1157,    -1,    -1,    54,
+    -1,    56,    57,    -1,    -1,    30,    31,    -1,    33,    -1,
+    35,    -1,    -1,    -1,    -1,    70,  1421,    42,    -1,  1180,
+  1181,  1182,    -1,   615,    31,    80,    -1,    -1,    -1,    -1,
+    55,    -1,    57,    88,    -1,    -1,   628,    -1,    93,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,   647,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    -1,   671,
+    -1,    -1,     3,     4,     5,     6,   678,    -1,     9,  1494,
+  1495,  1496,    -1,    -1,   686,   687,   688,   689,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1267,  1268,  1513,  1270,
+    31,   136,    -1,  1518,    -1,   140,   141,    -1,    -1,    -1,
+    41,   146,    -1,    -1,   149,   150,   151,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
+   165,   733,    -1,    -1,   169,   737,    -1,    -1,    -1,    70,
+   175,   176,   744,   745,    -1,   747,    -1,    -1,    -1,    80,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,   193,   194,
+   195,    -1,    93,    -1,   766,    -1,   768,    -1,    -1,    -1,
+    -1,   773,   774,   775,    -1,    -1,    -1,    -1,    -1,   781,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   222,    -1,    33,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     1,   803,     3,     4,     5,     6,     7,     8,     9,    10,
+    11,    55,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   258,    -1,    -1,    -1,    28,    29,    30,
+    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    60,
+    61,    -1,     3,     4,     5,     6,    67,    -1,     9,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
+    31,    -1,    93,    -1,    -1,    -1,    -1,   899,   900,   901,
+    41,    -1,    -1,   905,   906,   149,   150,   151,    -1,   110,
+    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,   354,
+    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,    70,
+    -1,   175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
+    -1,   943,   944,   945,    -1,    -1,    -1,    88,   950,   193,
+   194,   195,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,     4,     5,    -1,     7,     8,     9,    -1,   403,    12,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,   222,    -1,
+    -1,    -1,    -1,   418,    -1,    28,   421,    30,    31,    -1,
+   992,    -1,    -1,    36,    55,    -1,    -1,    -1,   433,    -1,
+    -1,    -1,    45,    -1,    47,    -1,   441,    -1,    -1,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    80,
+    -1,  1023,    83,    -1,    -1,    -1,    -1,    70,    -1,    -1,
+     3,     4,     5,     6,   469,    -1,   471,    80,   473,   474,
+   475,    -1,  1044,   104,   479,   106,    -1,    90,    -1,   484,
+    93,    94,   487,   297,    -1,  1057,    -1,    -1,    31,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,   504,
-    -1,    -1,    -1,   894,     4,   896,    -1,    -1,    -1,    -1,
-    -1,    54,  1423,    56,    57,    -1,   907,    -1,    -1,    -1,
-   911,   912,   913,    -1,    -1,    -1,    -1,    70,    -1,   534,
-    30,    31,   537,    33,    -1,    35,    -1,    80,    -1,    -1,
-    -1,    -1,    42,    -1,    -1,    88,    -1,   552,   553,   554,
-    93,    -1,    -1,    -1,    -1,    55,    -1,    57,    -1,    -1,
-    -1,    -1,   567,    -1,   955,   956,   957,     3,     4,     5,
-     6,    -1,    -1,     9,    -1,    -1,  1495,    -1,     3,     4,
-     5,     6,  1493,  1494,  1495,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1512,    -1,    31,    -1,    -1,    -1,    -1,
-    -1,  1512,    -1,    -1,    -1,    41,  1517,    -1,    -1,  1000,
-   615,    -1,    -1,    -1,    -1,    -1,    41,    -1,    54,    -1,
-    56,    57,    -1,   628,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,    -1,    70,    -1,   136,    62,    -1,    -1,
-   140,   141,   647,    -1,    80,    70,   146,    -1,    -1,   149,
-   150,   151,    88,    -1,    -1,    80,    -1,    93,    -1,     3,
-     4,     5,     6,    88,    -1,   165,   671,    -1,    93,   169,
-    -1,    -1,    -1,   678,    -1,   175,   176,    -1,    -1,    -1,
-    -1,   686,   687,   688,   689,    -1,    -1,    31,    -1,    -1,
-    -1,    -1,    -1,   193,   194,   195,    -1,    41,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   222,    -1,    -1,    33,    70,    -1,   733,    -1,
-    -1,    -1,   737,    -1,    -1,    -1,    80,    -1,    -1,   744,
-   745,    -1,   747,    -1,    88,    -1,    -1,    55,    -1,    93,
-    -1,    -1,     4,     5,    -1,     7,     8,     9,    -1,   259,
-    12,    -1,    14,    -1,  1155,  1156,  1157,  1158,  1159,    -1,
-    -1,    -1,  1163,   778,    -1,   780,    28,    -1,    30,    31,
-   785,   786,   787,    -1,    36,    -1,    -1,    -1,   793,    -1,
-    -1,    -1,    -1,    45,    -1,  1186,  1187,  1188,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,     1,
-   815,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,
-    32,   149,   150,   151,    36,    37,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    46,   355,    48,    -1,    -1,   359,
-    -1,    -1,    54,    -1,    56,    57,    -1,   175,    60,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,  1272,  1273,    -1,  1275,   193,   194,   195,    80,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,   404,    -1,   911,   912,   913,    -1,
-    -1,    -1,   917,   918,   222,    -1,    -1,   109,    -1,   419,
-    -1,    -1,   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     3,     4,     5,     6,   434,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   442,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   955,   956,   957,    -1,    -1,    -1,    -1,   962,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
-   470,    -1,   472,    -1,   474,   475,   476,    -1,    -1,    -1,
-   480,    54,    -1,    56,    57,   485,    -1,    -1,   488,    62,
-   298,    -1,    -1,    -1,    -1,  1000,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,   504,    -1,    -1,    80,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,
-    93,    -1,    -1,    -1,  1029,    -1,     1,    -1,     3,     4,
-     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-   348,   349,   350,    -1,    -1,  1050,    -1,     3,     4,     5,
-     6,    -1,    -1,    28,    29,    30,    31,    32,  1063,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    47,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,    -1,    41,    61,    -1,     3,     4,
-     5,     6,    67,    -1,    -1,    70,   404,    -1,    54,    -1,
-    56,    57,    -1,    78,    79,    80,    62,    -1,    -1,    -1,
-    -1,    86,    87,    88,    70,    90,   616,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    80,    -1,    41,    -1,    -1,  1134,
-    -1,    -1,    88,    -1,    -1,   110,    -1,    93,    -1,    54,
-    -1,    56,    57,    -1,    -1,    60,    -1,   647,    -1,    -1,
-  1155,  1156,  1157,  1158,  1159,    70,  1161,    -1,  1163,    -1,
-    -1,    -1,   470,    -1,   472,    80,   474,   475,   476,    -1,
-    -1,    -1,   480,    88,    -1,    -1,    -1,   485,    93,    -1,
-   488,  1186,  1187,  1188,    -1,    -1,   686,   687,   688,   689,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
+    -1,    54,    -1,    56,    57,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    12,    -1,    14,    70,    -1,    -1,
+    -1,    -1,    -1,   347,   348,   349,    -1,    80,    -1,    -1,
+    28,    -1,    30,    31,   175,    88,    -1,    -1,    36,    -1,
+    93,    -1,    -1,    41,    -1,    -1,  1128,    45,    -1,    47,
+    -1,    -1,   193,   194,   195,    -1,    54,    -1,    56,    57,
+    -1,    -1,   203,    -1,    -1,    -1,    -1,  1149,  1150,  1151,
+  1152,  1153,    70,  1155,    -1,  1157,    -1,    -1,    -1,   403,
+    -1,   222,    80,    -1,    -1,     3,     4,     5,     6,    -1,
+    88,     9,    90,    -1,    -1,    93,    94,    -1,  1180,  1181,
+  1182,   616,    -1,    -1,    -1,    -1,   247,    -1,    -1,    -1,
+    -1,    -1,    -1,    31,    -1,     3,     4,     5,     6,    -1,
+   261,     9,    -1,    41,    -1,    -1,     3,     4,     5,     6,
+  1212,    -1,   647,    -1,    -1,  1217,    54,    -1,    56,    57,
+    -1,    -1,    -1,    31,    -1,   469,    -1,   471,    -1,   473,
+   474,   475,    70,    41,    -1,   479,    -1,    -1,    -1,    -1,
+   484,    -1,    80,   487,    41,    -1,    54,    -1,    56,    57,
+    88,   686,   687,   688,   689,    93,    -1,    54,    -1,    56,
+    57,    -1,    70,    60,    -1,  1267,  1268,    -1,  1270,    -1,
+    -1,    -1,    80,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    80,    -1,    93,    -1,    -1,    -1,    -1,
+    -1,    88,   353,   354,    -1,    -1,    93,    -1,   733,    -1,
+    -1,    -1,   737,    -1,  1306,  1307,  1308,    -1,    -1,   744,
+   745,    -1,   747,    -1,    -1,    -1,     3,     4,     5,     6,
+     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
+    -1,   766,    -1,   768,    -1,    -1,    -1,    -1,   773,   774,
+   775,    28,   403,    30,    31,    32,   781,    -1,    -1,    36,
+    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,
+   604,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
+    57,    -1,    -1,    -1,   618,   619,    -1,   621,    -1,    -1,
+    -1,    -1,    -1,    70,   628,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    88,    -1,   647,    -1,    -1,    93,    -1,   469,    -1,
+   471,    98,   473,   474,   475,    -1,    -1,    -1,   479,  1421,
+    -1,    -1,    -1,   484,    -1,    -1,   487,    -1,     3,     4,
      5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
-    -1,    -1,  1217,    -1,    -1,    -1,    -1,  1222,    -1,    -1,
-    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
-    -1,    36,    37,   733,    -1,    -1,    41,   737,    -1,    -1,
-    45,    46,    -1,    48,   744,   745,    -1,   747,    -1,    54,
-    -1,    56,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    70,    -1,  1272,  1273,    -1,
-  1275,    -1,    -1,    -1,    -1,    80,    -1,    -1,   778,    -1,
-   780,    -1,    -1,    88,    -1,   785,   786,   787,    93,    -1,
-    -1,    -1,    -1,   793,    -1,    -1,   604,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   109,    -1,  1311,  1312,  1313,    -1,
-   618,   619,    55,   621,    -1,    -1,    -1,    -1,    -1,    -1,
-   628,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    -1,    -1,    14,    -1,    -1,    -1,    80,    -1,   647,
-    83,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    41,   104,    -1,   106,    45,    -1,    -1,    48,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,    -1,   686,    -1,
-   688,   689,    -1,   691,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    98,  1423,   919,
-    -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,    -1,    -1,
-    -1,    -1,   175,    -1,    -1,    -1,   744,   745,    -1,   747,
-    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-   193,   194,   195,    -1,    14,   955,   956,   957,    -1,    -1,
-   203,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    31,    -1,    -1,    -1,    -1,    36,   785,    -1,   222,
-    -1,    41,    -1,    -1,    -1,    45,    -1,    47,  1493,  1494,
-  1495,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-  1000,   809,   810,   811,    -1,   248,    -1,    -1,    -1,    -1,
-    70,    -1,  1517,   821,    -1,    -1,    -1,    -1,    -1,   262,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,  1029,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,
-    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1063,    -1,    -1,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,   894,    47,   896,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,   907,
-    -1,    61,    -1,   911,   912,   913,    -1,    67,    -1,    -1,
-    70,   354,   355,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   955,   956,   957,
-   110,    -1,    -1,    -1,    -1,  1155,  1156,  1157,  1158,  1159,
-    -1,   404,    -1,  1163,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    -1,    -1,    14,    -1,    -1,  1186,  1187,  1188,    -1,
-    -1,    -1,  1000,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    45,    -1,    -1,  1217,    -1,    -1,
-    -1,  1029,  1222,    54,    -1,    56,    57,   470,    -1,   472,
-    -1,   474,   475,   476,    -1,    -1,    -1,   480,    -1,    70,
-    -1,    -1,   485,    -1,    -1,   488,    -1,    -1,    -1,    80,
-    -1,    -1,     1,    -1,    -1,     4,     5,    88,    -1,     8,
-     9,    -1,    93,    -1,    -1,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,  1272,  1273,    -1,  1275,    -1,    -1,    -1,    28,
-    -1,    30,    -1,    -1,    -1,    -1,    -1,    36,    -1,    38,
-    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    47,  1107,
-  1108,    -1,  1110,    -1,    -1,    54,    -1,    56,    57,    -1,
-    59,  1311,  1312,  1313,    63,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    -1,    -1,    86,    87,    88,
-    -1,    -1,    91,    -1,    -1,    94,    -1,  1155,  1156,  1157,
-  1158,  1159,    -1,    -1,    -1,  1163,    -1,    -1,    -1,    -1,
-    -1,   110,    -1,     1,    -1,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,    -1,    -1,    14,    -1,  1186,  1187,
-  1188,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   631,   632,
-    28,    -1,    30,    31,    32,    -1,    14,    -1,    36,    37,
-    -1,    -1,    -1,    41,   647,    23,    24,    45,    46,  1217,
-    48,    -1,    30,    31,    -1,    33,    54,    -1,    56,    57,
-    -1,    -1,    60,  1423,    62,     4,     5,    -1,    -1,     8,
-     9,    -1,    70,    -1,    -1,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    80,   686,    -1,   688,   689,    65,    -1,    28,
-    88,    30,    -1,    -1,    -1,    93,    -1,    36,    -1,    -1,
-    -1,    -1,    -1,    -1,  1272,  1273,    45,  1275,    -1,    -1,
-    -1,   109,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    -1,   686,    -1,   688,   689,    -1,   691,    -1,    -1,
+    -1,    -1,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,
+    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    45,    -1,   907,    -1,    -1,    -1,    -1,    -1,    -1,    54,
+    -1,    56,    57,    -1,    -1,    60,    -1,    -1,    -1,   733,
+    -1,    -1,  1494,  1495,  1496,    70,    -1,    -1,    -1,    -1,
+   744,   745,    -1,   747,    -1,    80,    -1,    -1,   943,   944,
+   945,    -1,    -1,    88,    -1,    -1,  1518,    -1,    93,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   773,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
+     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,    -1,   797,   798,   799,    -1,   992,    -1,    -1,
+    -1,    -1,    -1,    -1,    28,   809,    30,    31,    32,    -1,
+   631,   632,    36,    37,    -1,    -1,    -1,    41,    -1,    -1,
+    -1,    45,    46,    -1,    48,    -1,   647,    -1,  1023,    -1,
+    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,     3,     4,
+     5,     6,     7,     8,     9,    -1,    80,    12,    -1,    14,
+    -1,    -1,  1057,    -1,    88,   686,    -1,   688,   689,    93,
+    -1,    -1,    -1,    28,    -1,    30,    31,    -1,   882,    -1,
+   884,    36,    -1,    -1,    -1,   109,    41,    -1,    -1,    -1,
+    45,   895,    -1,    -1,    -1,   899,   900,   901,    -1,    54,
+    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   733,    -1,    -1,    70,    -1,    -1,    14,    -1,
+    -1,    -1,    -1,   744,   745,    80,   747,    23,    24,    -1,
+    -1,    -1,    -1,    88,    30,    31,    -1,    33,    93,   943,
+   944,   945,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
+    -1,    -1,   773,    -1,  1149,  1150,  1151,  1152,  1153,    -1,
+    -1,    -1,  1157,    -1,    -1,    -1,    -1,    -1,    -1,    65,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   733,    -1,    -1,  1493,  1494,  1495,    -1,    -1,    -1,    -1,
-    -1,   744,   745,  1311,   747,  1313,   124,    -1,   126,    -1,
-    -1,    -1,    -1,    -1,    93,   133,   134,  1517,    -1,    -1,
-    -1,    -1,   140,   141,    -1,    -1,   144,   145,   146,   772,
-   148,   149,   150,   151,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   785,    -1,     1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    -1,    13,    14,    15,    -1,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,  1423,    -1,    -1,    -1,   237,
-   238,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,
-    -1,   259,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   109,   110,    67,    68,    69,    70,    71,    72,
+    -1,    -1,    41,    -1,    -1,  1180,  1181,  1182,   992,     3,
+     4,     5,     6,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    70,    -1,    -1,    -1,    -1,    -1,  1212,    -1,  1023,
+    -1,    80,  1217,    -1,    -1,    -1,    -1,    41,   124,    88,
+   126,    -1,    -1,    -1,    93,    -1,    -1,   133,   134,    -1,
+    54,    -1,    56,    57,   140,   141,    -1,    -1,   144,   145,
+   146,    -1,   148,   149,   150,   151,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+    -1,    -1,  1267,  1268,    88,  1270,    -1,    -1,    -1,    93,
+    -1,    -1,    -1,    -1,    -1,   906,   907,   908,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1101,  1102,    -1,
+  1104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1306,  1307,  1308,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   943,   944,   945,    -1,    -1,    -1,    -1,   950,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   237,   238,    -1,    -1,  1149,  1150,  1151,  1152,  1153,
+    -1,    -1,    -1,  1157,    -1,    -1,    -1,    -1,    -1,   980,
+    -1,    -1,   258,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   992,    -1,    -1,    -1,    -1,  1180,  1181,  1182,    -1,
+    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,   297,  1023,    -1,    -1,    -1,    -1,    -1,  1212,    -1,
+    -1,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
+    -1,    41,    -1,  1044,    -1,    45,  1421,    47,    -1,    -1,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,
+    70,   347,   348,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    80,    -1,    -1,  1267,  1268,    -1,  1270,    -1,    88,    -1,
+    90,    -1,    -1,    93,    94,    68,    69,    70,    71,    72,
     73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    -1,    -1,    -1,   918,   919,   920,    -1,    -1,
-   298,    -1,    12,    -1,    -1,  1493,  1494,  1495,    68,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,  1517,
-    -1,    -1,   955,   956,   957,    -1,    -1,    -1,    -1,   962,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,    -1,
-   348,   349,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    -1,    -1,  1000,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,   393,    12,    -1,    14,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1029,    -1,    -1,    25,
-    -1,    27,    -1,    -1,   412,    31,    -1,    -1,    -1,    -1,
-    36,   419,    -1,    -1,   422,    41,    -1,  1050,    -1,    45,
-    -1,    47,    -1,    -1,    -1,    -1,   434,    -1,    54,    -1,
-    56,    57,    58,    59,    60,    -1,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-    86,    87,    88,    -1,    90,    91,    92,    93,    94,    95,
-    -1,    97,    -1,    -1,    -1,    -1,   102,    -1,    -1,    -1,
-    -1,   107,   108,   109,    -1,   111,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   501,    -1,   503,    -1,    -1,    -1,    -1,
-    -1,  1134,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
-   528,    -1,  1155,  1156,  1157,  1158,  1159,    -1,  1161,    -1,
-  1163,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
-     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-    14,    -1,    -1,  1186,  1187,  1188,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    -1,  1217,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,   604,    61,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,   615,   616,    -1,
-   618,   619,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-    -1,    -1,    -1,     4,     5,    -1,     7,     8,     9,  1272,
-  1273,    -1,  1275,    14,   108,    -1,   110,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    31,    -1,    -1,   671,    -1,    36,    -1,    -1,    -1,    -1,
-   678,   679,    -1,    -1,    45,    -1,    -1,    48,  1311,    -1,
-  1313,    -1,   690,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    15,   714,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,   772,    -1,    -1,   775,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    -1,
-  1423,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,   809,   810,   811,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   821,    -1,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
+    83,    84,    -1,    -1,    -1,    -1,   392,    -1,    -1,  1494,
+  1495,  1496,  1306,    -1,  1308,    -1,    -1,  1128,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   411,     4,     5,    -1,     7,
+     8,     9,   418,  1518,    12,   421,    14,    -1,  1149,  1150,
+  1151,  1152,  1153,    -1,  1155,    -1,  1157,   433,    -1,    -1,
+    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,  1180,
+  1181,  1182,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,  1212,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    29,    30,   500,    32,    -1,    34,    35,    36,
+    -1,    38,    39,    40,    41,    42,    43,  1421,    45,    -1,
+    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
+    57,    58,   528,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+    67,    -1,    -1,    70,    -1,    -1,  1267,  1268,    -1,  1270,
+    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
+    87,    88,    -1,    -1,    -1,    -1,    93,    94,    -1,    -1,
     -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
-  1493,  1494,  1495,   111,    -1,    -1,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,  1517,    45,   894,    -1,   896,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,   907,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,     1,    93,     3,     4,     5,     6,    -1,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
-    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,  1024,    86,    87,    88,
-    -1,    -1,    -1,    -1,    93,    94,     1,    -1,     3,     4,
-     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-   109,   110,    -1,  1051,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,     4,     5,    61,    -1,     8,     9,
-    -1,    -1,    67,    -1,    14,    70,    -1,    -1,    -1,  1107,
-  1108,    -1,  1110,    78,    79,    80,    -1,    -1,    28,    -1,
-    30,    86,    87,    88,    -1,    -1,    36,    -1,    93,    -1,
-    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    54,   110,    56,    57,    -1,    -1,
-     1,    -1,     3,     4,     5,     6,    -1,     8,     9,    10,
-    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1170,    -1,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,  1202,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,  1220,    -1,  1222,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,    -1,    93,    94,     1,    -1,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,   110,
+    -1,    -1,    12,   110,    14,  1306,    -1,  1308,    -1,    -1,
+  1494,  1495,  1496,    -1,    -1,    25,    -1,    27,    -1,    -1,
+    -1,    31,    -1,    -1,    -1,    -1,    36,    -1,   604,    -1,
+    -1,    41,    -1,    -1,  1518,    45,    -1,    47,    -1,   615,
+   616,    -1,   618,   619,    54,    -1,    56,    57,    58,    59,
+    60,    -1,    62,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    -1,    86,    87,    88,    -1,
+    90,    91,    92,    93,    94,    95,    -1,    97,    -1,    -1,
+    -1,    -1,   102,    -1,    -1,   671,    -1,   107,   108,   109,
+    -1,   111,   678,   679,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   690,    -1,    -1,    -1,    -1,     1,
+  1421,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+    12,    13,    14,    -1,    -1,    -1,    -1,    -1,   714,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,
+    -1,    -1,    -1,    -1,   760,    67,    -1,   763,    70,    -1,
+    -1,    -1,    -1,  1494,  1495,  1496,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,    -1,
+    -1,    93,    94,    -1,    -1,    -1,    -1,  1518,    -1,    -1,
+    -1,   797,   798,   799,    -1,    -1,    -1,    -1,   110,    -1,
+    -1,    -1,    -1,   809,    -1,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
+    -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+    36,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,   882,    -1,   884,    -1,
+    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,   895,
+    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    95,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,   109,   110,    -1,     1,    -1,     3,     4,
+     5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
+    15,    -1,    17,    18,    19,    20,    21,    22,    23,    24,
+    25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+    35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
+    45,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
+    -1,    56,    57,    58,   980,    60,    61,    -1,    -1,    -1,
+    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
+    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
+    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,     1,   110,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    12,    13,    14,    -1,  1045,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
+    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
     -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
+    47,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
     57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    67,    -1,    -1,    70,    -1,  1101,  1102,    -1,  1104,    -1,
     -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
-     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
+    87,    88,    -1,    90,    -1,    -1,    93,    94,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,   110,    -1,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    12,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1164,    -1,
+    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
     36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
     -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
+    56,    57,    -1,    -1,  1200,    61,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,  1215,
+    -1,  1217,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
     86,    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,
      5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
     35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
     45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
     -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,    -1,
     -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-     1,    -1,     3,     4,     5,     6,   101,     8,     9,    10,
-    11,    -1,    13,    14,    -1,   110,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,     1,    93,     3,     4,     5,     6,    -1,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,   110,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,     1,    93,     3,     4,     5,     6,    -1,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
-    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,    -1,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
-    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
+    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    94,
+    -1,    -1,    -1,    -1,    -1,  1331,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   109,   110,     1,    -1,     3,     4,
+     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
+    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
+    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
+    -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,    -1,
+    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
+    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,
+     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
+    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
+    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,
+    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
+    -1,    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,
+     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,   109,   110,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
+    -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
+    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
+    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,    -1,
+    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
+    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,     1,
+    93,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,   109,   110,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,
+    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,
+    -1,    93,    -1,     1,    -1,     3,     4,     5,     6,   101,
+     8,     9,    10,    11,    -1,    13,    14,    -1,   110,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    29,    30,    31,    32,    -1,    34,    35,    36,    -1,
     38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
     -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    67,
+    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
     -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
     88,    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,
@@ -3322,16 +3283,16 @@ static const short yycheck[] = {     4,
     -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
     -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
     -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+    57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
     67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
     87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
      6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
     36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
     -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,
+    56,    57,    -1,    -1,    -1,    61,    62,    -1,    -1,    -1,
     -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
     86,    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,
@@ -3340,7 +3301,7 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
     35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
     45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
+    -1,    56,    57,    -1,    -1,    60,    61,    -1,    -1,    -1,
     -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
     -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,
@@ -3350,191 +3311,152 @@ static const short yycheck[] = {     4,
     34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
     -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
     54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,     3,     4,     5,     6,    93,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
-    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
-    -1,     1,    70,     3,     4,     5,     6,     7,     8,     9,
-    78,    79,    80,    -1,    14,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    28,    -1,
-    30,    31,    32,    -1,    -1,    -1,    36,    37,    -1,    -1,
-    -1,    41,   110,   111,    -1,    45,    46,    -1,    48,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    -1,    13,    14,    15,   109,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   109,   110,     3,     4,     5,     6,     7,     8,
-     9,    10,    11,    -1,    13,    14,    15,    -1,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    44,    45,    46,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
-    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,     3,     4,
-     5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
-    15,   110,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
-    45,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,
+    -1,    -1,    -1,    67,     1,    -1,    70,     4,     5,    -1,
+    -1,     8,     9,    -1,    78,    79,    80,    14,    -1,    -1,
+    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
+    -1,    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,    36,
+    -1,    38,    39,    -1,   108,    -1,   110,    -1,    45,    -1,
+    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
+    57,    -1,    59,    -1,    -1,    -1,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    -1,    -1,    86,
+    87,    88,    -1,    -1,    91,    -1,     1,    94,     3,     4,
+     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
+    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
+    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
+    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
     -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    95,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-    11,    -1,    13,    14,    15,   110,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    60,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,    -1,    93,    -1,    95,     3,     4,     5,     6,     7,
-     8,     9,    10,    11,    12,    13,    14,    -1,    -1,   110,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    29,    30,    31,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    47,
-    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    90,    -1,    -1,    93,    94,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    14,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    47,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    90,    -1,    -1,    93,    94,     3,
+    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,
      4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
-    14,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    47,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    90,    -1,    -1,    93,
-    94,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,    -1,   110,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
-    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,    -1,
-    -1,    93,    94,     3,     4,     5,     6,    -1,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,   110,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,     3,
-     4,     5,     6,    93,     8,     9,    10,    11,    -1,    13,
-    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
+    14,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
     34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
     -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,    60,    61,    -1,    -1,
+    54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,
     -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-     3,     4,     5,     6,     7,     8,     9,    10,    11,    -1,
+    -1,    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,
+     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
     13,    14,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
+    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
     -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
     43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
+    53,    54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,
     -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
     -1,    -1,    -1,    86,    87,    88,     3,     4,     5,     6,
     93,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
-    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
     -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
     -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
     57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+    67,    -1,     1,    70,     3,     4,     5,     6,     7,     8,
+     9,    78,    79,    80,    -1,    14,    -1,    -1,    -1,    86,
+    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    28,
+    -1,    30,    31,    32,    -1,    -1,    -1,    36,    37,    -1,
+    -1,    -1,    41,   110,   111,    -1,    45,    46,    -1,    48,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    70,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    80,    -1,    -1,    -1,    14,    -1,    -1,    -1,    88,
+    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    28,
+    -1,    30,    31,    32,    -1,    -1,    -1,    36,    37,    -1,
+   109,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,    48,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    70,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    80,    -1,    -1,    -1,    14,    -1,    -1,    -1,    88,
+    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    28,
+    -1,    30,    31,    32,    -1,    -1,    -1,    36,    37,    -1,
+   109,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,    48,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+    -1,    -1,    -1,    -1,    93,    -1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
+   109,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
+    36,    -1,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
+    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    95,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   109,   110,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    -1,    13,    14,    15,    -1,    17,
+    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    -1,    34,    35,    36,    -1,
+    38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
+    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
+    58,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    67,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,     3,
+     4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
+    14,    15,   110,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
+    44,    45,    46,    -1,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,
+    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
+    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
+    -1,    95,    -1,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    -1,    13,    14,    15,   110,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
+    40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
+    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
+    -1,    -1,    -1,    93,    -1,    95,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    12,    13,    14,    -1,    -1,
+   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
+    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
+    47,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
+    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
     67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,     3,     4,     5,     6,    93,     8,     9,    10,
-    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,     3,     4,
-     5,     6,    93,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
+    87,    88,    -1,    90,    -1,    -1,    93,    94,     3,     4,
+     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
     35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
+    45,    -1,    47,    -1,    49,    50,    51,    52,    53,    54,
     -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
     -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,     3,     4,     5,     6,    93,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
-    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-     3,     4,     5,     6,    93,     8,     9,    10,    11,    -1,
-    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
+    -1,    86,    87,    88,    -1,    90,    -1,    -1,    93,    94,
+     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
     -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
-    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-    53,    54,    -1,    56,    57,    58,    -1,    -1,    -1,    -1,
+    43,    -1,    45,    -1,    47,    -1,    49,    50,    51,    52,
+    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
-    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,     6,
-    93,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,    -1,    93,    94,     3,     4,
-     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,     3,     4,     5,     6,    93,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
+    -1,    -1,    -1,    86,    87,    88,    -1,    90,    -1,    -1,
+    93,    94,     3,     4,     5,     6,    -1,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,   110,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
+    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,
+    -1,    -1,    93,    94,     3,     4,     5,     6,    -1,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,   110,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+    29,    30,    31,    32,    -1,    34,    35,    36,    -1,    38,
     39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
     49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
     -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
@@ -3542,97 +3464,192 @@ static const short yycheck[] = {     4,
     79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
      3,     4,     5,     6,    93,     8,     9,    10,    11,    -1,
     13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   110,    -1,    -1,    -1,    28,    29,    30,    31,    32,
+    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
     -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
     43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
+    53,    54,    -1,    56,    57,    -1,    -1,    60,    61,    -1,
     -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
-    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,     6,
-    93,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,     3,     4,     5,     6,    93,     8,     9,    10,
-    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,     3,     4,
-     5,     6,    93,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,     1,    70,     3,     4,     5,     6,
-     7,     8,     9,    78,    79,    80,    -1,    14,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    36,
-    -1,    -1,    -1,    -1,    41,   110,    -1,    44,    45,    46,
-    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,     1,    80,     3,     4,     5,     6,     7,     8,
-     9,    88,    -1,    -1,    -1,    14,    93,    -1,    -1,    -1,
-    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    -1,    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,    48,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,     3,     4,     5,     6,     7,     8,     9,    -1,
-    -1,    80,    -1,    14,    -1,    -1,    -1,    -1,    -1,    88,
-    -1,    -1,    -1,    -1,    93,    -1,    -1,    28,    -1,    30,
-    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    80,
-    -1,    14,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,    93,    -1,    -1,    28,    -1,    30,    31,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,     3,
-     4,     5,     6,     7,     8,     9,    -1,    70,    -1,    -1,
-    14,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    88,    30,    31,    -1,    -1,
-    93,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,     4,     5,    -1,     7,     8,     9,
-    -1,    -1,    12,    -1,    14,    -1,    70,     4,     5,    -1,
-     7,     8,     9,    -1,    -1,    -1,    80,    14,    28,    -1,
-    30,    31,    -1,    -1,    88,    -1,    36,    -1,    -1,    93,
-    -1,    28,    -1,    30,    31,    45,    -1,    -1,    -1,    36,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    45,    -1,
-    -1,     4,     5,    -1,    -1,     8,     9,    54,    -1,    56,
-    57,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    -1,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,
+    93,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,   110,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,
+     6,    93,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
+    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
+    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
+    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
+    86,    87,    88,     3,     4,     5,     6,    93,     8,     9,
+    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,
+    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
+    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
+    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,     3,
+     4,     5,     6,    93,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
+    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
+    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,
+    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
+    -1,    -1,    86,    87,    88,     3,     4,     5,     6,    93,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
+    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
+    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
+    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
+    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
+    88,     3,     4,     5,     6,    93,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,
+     6,    93,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
+    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
+    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
+    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
+    86,    87,    88,    -1,    -1,    -1,    -1,    93,    94,     3,
+     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
+    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
+    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
+    -1,    -1,    86,    87,    88,     3,     4,     5,     6,    93,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
+    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
+    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
+    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
+    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
+    88,     3,     4,     5,     6,    93,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,    31,
+    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
+    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
+    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
+    -1,    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,
+     6,    93,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
+    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
+    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
+    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
+    86,    87,    88,     3,     4,     5,     6,    93,     8,     9,
+    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,
+    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
+    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,     3,
+     4,     5,     6,    93,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
+    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
+    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    67,    -1,     1,    70,     3,     4,     5,
+     6,     7,     8,     9,    78,    79,    80,    -1,    14,    -1,
+    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
+    -1,    27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,
+    36,    -1,    -1,    -1,    -1,    41,   110,    -1,    44,    45,
+    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+    56,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,     1,    80,     3,     4,     5,     6,     7,
+     8,     9,    88,    -1,    -1,    -1,    14,    93,    -1,    -1,
+    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    -1,    30,    31,    32,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    80,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    28,    -1,
+    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
+    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
+    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    70,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
+    80,    -1,    14,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+    -1,    -1,    -1,    93,    -1,    -1,    28,    -1,    30,    31,
+    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
+     3,     4,     5,     6,     7,     8,     9,    -1,    70,    -1,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
+    -1,    -1,    -1,    -1,    -1,    28,    88,    30,    31,    -1,
+    -1,    93,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,
     -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    -1,    -1,    -1,    -1,    59,    -1,    -1,   107,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    62,    63,    64,    65,    66,    67,    68,    69,
+    -1,    54,    -1,    56,    57,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    -1,    -1,    14,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
+    28,    -1,    30,    31,    -1,    88,    -1,    -1,    36,    -1,
+    93,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+     4,     5,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,    70,     4,     5,    -1,     7,     8,     9,    -1,
+    -1,    12,    80,    14,    28,    -1,    30,    31,    -1,    -1,
+    88,    -1,    36,    -1,    -1,    93,    -1,    28,    -1,    30,
+    31,    45,    -1,    -1,    48,    36,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    45,    -1,    -1,     4,     5,    -1,
+     7,     8,     9,    54,    -1,    56,    57,    14,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
+    57,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,   111,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    59,    -1,    -1,   107,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    63,    64,    65,    66,    67,    68,    69,
     70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
     80,    81,    82,    83,    84,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
-    76,    77,    78,    79,    80,    81,    82,    83,    84
+    68,    69,    70,    71,    72,    73,    74,    -1,    76,    77,
+    78,    79,    80,    81,    82,    83,    84
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -3825,7 +3842,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 196 "/usr/lib/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 *.
@@ -5364,93 +5381,66 @@ case 319:
 case 320:
 #line 1435 "parse.y"
 {
-                 tree type = NULL_TREE;
-                 tree id = yyval.ttype;
+                 /* This is a C cast in C++'s `functional' notation
+                    using the "implicit int" extension so that:
+                    `const (3)' is equivalent to `const int (3)'.  */
+                 tree type;
 
-                 /* This is a C cast in C++'s `functional' notation.  */
                  if (yyvsp[-1].ttype == error_mark_node)
                    {
                      yyval.ttype = error_mark_node;
                      break;
                    }
-#if 0
-                 if (yyvsp[-1].ttype == NULL_TREE)
-                   {
-                     error ("cannot cast null list to type `%s'",
-                            IDENTIFIER_POINTER (TYPE_NAME (id)));
-                     yyval.ttype = error_mark_node;
-                     break;
-                   }
-#endif
-#if 0
-                 /* type is not set! (mrs) */
-                 if (type == error_mark_node)
-                   yyval.ttype = error_mark_node;
-                 else
-#endif
-                   {
-                     if (id == ridpointers[(int) RID_CONST])
-                       type = build_type_variant (integer_type_node, 1, 0);
-                     else if (id == ridpointers[(int) RID_VOLATILE])
-                       type = build_type_variant (integer_type_node, 0, 1);
-#if 0
-                     /* should not be able to get here (mrs) */
-                     else if (id == ridpointers[(int) RID_FRIEND])
-                       {
-                         error ("cannot cast expression to `friend' type");
-                         yyval.ttype = error_mark_node;
-                         break;
-                       }
-#endif
-                     else my_friendly_abort (79);
-                     yyval.ttype = build_c_cast (type, build_compound_expr (yyvsp[-1].ttype));
-                   }
+
+                 type = cp_build_qualified_type (integer_type_node,
+                                                 cp_type_qual_from_rid (yyvsp[-3].ttype));
+                 yyval.ttype = build_c_cast (type, build_compound_expr (yyvsp[-1].ttype));
                ;
     break;}
 case 322:
-#line 1480 "parse.y"
+#line 1453 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("dynamic_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 323:
-#line 1484 "parse.y"
+#line 1457 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("static_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 324:
-#line 1488 "parse.y"
+#line 1461 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 325:
-#line 1492 "parse.y"
+#line 1465 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("const_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 326:
-#line 1496 "parse.y"
+#line 1469 "parse.y"
 { yyval.ttype = build_x_typeid (yyvsp[-1].ttype); ;
     break;}
 case 327:
-#line 1498 "parse.y"
+#line 1471 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
                  check_for_new_type ("typeid", yyvsp[-1].ftype);
                  yyval.ttype = get_typeid (TYPE_MAIN_VARIANT (type)); ;
     break;}
 case 328:
-#line 1502 "parse.y"
+#line 1475 "parse.y"
 { yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1); ;
     break;}
 case 329:
-#line 1504 "parse.y"
+#line 1477 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 330:
-#line 1506 "parse.y"
+#line 1479 "parse.y"
 {
                  got_scope = NULL_TREE;
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
@@ -5460,102 +5450,102 @@ case 330:
                ;
     break;}
 case 331:
-#line 1514 "parse.y"
+#line 1487 "parse.y"
 { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); ;
     break;}
 case 332:
-#line 1516 "parse.y"
+#line 1489 "parse.y"
 { yyval.ttype = finish_qualified_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 333:
-#line 1518 "parse.y"
+#line 1491 "parse.y"
 { yyval.ttype = finish_qualified_call_expr (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
 case 334:
-#line 1520 "parse.y"
+#line 1493 "parse.y"
 { 
                  yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); 
                ;
     break;}
 case 335:
-#line 1524 "parse.y"
+#line 1497 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 336:
-#line 1526 "parse.y"
+#line 1499 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 337:
-#line 1528 "parse.y"
+#line 1501 "parse.y"
 { yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); ;
     break;}
 case 338:
-#line 1530 "parse.y"
+#line 1503 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (COMPONENT_REF, yyvsp[-1].ttype, copy_to_permanent (yyvsp[0].ttype));
                  else
                    yyval.ttype = build_object_ref (yyval.ttype, OP0 (yyvsp[0].ttype), OP1 (yyvsp[0].ttype)); ;
     break;}
 case 339:
-#line 1535 "parse.y"
+#line 1508 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 340:
-#line 1537 "parse.y"
+#line 1510 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 341:
-#line 1539 "parse.y"
+#line 1512 "parse.y"
 { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 342:
-#line 1541 "parse.y"
+#line 1514 "parse.y"
 { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 343:
-#line 1544 "parse.y"
+#line 1517 "parse.y"
 { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-3].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 344:
-#line 1546 "parse.y"
+#line 1519 "parse.y"
 { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-5].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 345:
-#line 1548 "parse.y"
+#line 1521 "parse.y"
 {
                  yyval.ttype = error_mark_node;
                ;
     break;}
 case 346:
-#line 1593 "parse.y"
+#line 1566 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 347:
-#line 1595 "parse.y"
+#line 1568 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
 case 348:
-#line 1600 "parse.y"
+#line 1573 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 349:
-#line 1602 "parse.y"
+#line 1575 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
 case 350:
-#line 1607 "parse.y"
+#line 1580 "parse.y"
 { yyval.ttype = boolean_true_node; ;
     break;}
 case 351:
-#line 1609 "parse.y"
+#line 1582 "parse.y"
 { yyval.ttype = boolean_false_node; ;
     break;}
 case 353:
-#line 1616 "parse.y"
+#line 1589 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 354:
-#line 1621 "parse.y"
+#line 1594 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -5567,18 +5557,18 @@ case 354:
                ;
     break;}
 case 355:
-#line 1634 "parse.y"
+#line 1607 "parse.y"
 { got_object = TREE_TYPE (yyval.ttype); ;
     break;}
 case 356:
-#line 1636 "parse.y"
+#line 1609 "parse.y"
 {
                  yyval.ttype = build_x_arrow (yyval.ttype); 
                  got_object = TREE_TYPE (yyval.ttype);
                ;
     break;}
 case 357:
-#line 1644 "parse.y"
+#line 1617 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t)))
@@ -5586,138 +5576,138 @@ case 357:
                ;
     break;}
 case 358:
-#line 1650 "parse.y"
+#line 1623 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  note_list_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
 case 359:
-#line 1655 "parse.y"
+#line 1628 "parse.y"
 { resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 360:
-#line 1657 "parse.y"
+#line 1630 "parse.y"
 {
                  shadow_tag (yyvsp[-1].ftype.t);
                  note_list_got_semicolon (yyvsp[-1].ftype.t);
                ;
     break;}
 case 361:
-#line 1662 "parse.y"
+#line 1635 "parse.y"
 { warning ("empty declaration"); ;
     break;}
 case 362:
-#line 1664 "parse.y"
+#line 1637 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 365:
-#line 1678 "parse.y"
+#line 1651 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (),
                                             NULL_TREE, NULL_TREE); ;
     break;}
 case 366:
-#line 1681 "parse.y"
+#line 1654 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE,
                                             NULL_TREE); ;
     break;}
 case 367:
-#line 1688 "parse.y"
+#line 1661 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 368:
-#line 1691 "parse.y"
+#line 1664 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 369:
-#line 1694 "parse.y"
+#line 1667 "parse.y"
 { yyval.ftype.t = build_decl_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 370:
-#line 1697 "parse.y"
+#line 1670 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE);
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
     break;}
 case 371:
-#line 1700 "parse.y"
+#line 1673 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 374:
-#line 1716 "parse.y"
+#line 1689 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 375:
-#line 1719 "parse.y"
+#line 1692 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 376:
-#line 1722 "parse.y"
+#line 1695 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 377:
-#line 1725 "parse.y"
+#line 1698 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 378:
-#line 1728 "parse.y"
+#line 1701 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 379:
-#line 1731 "parse.y"
+#line 1704 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t,
                                         chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ttype))); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 380:
-#line 1738 "parse.y"
+#line 1711 "parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyval.ttype));
                  yyval.ttype = build_decl_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 381:
-#line 1743 "parse.y"
+#line 1716 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ;
     break;}
 case 382:
-#line 1745 "parse.y"
+#line 1718 "parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 383:
-#line 1750 "parse.y"
+#line 1723 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 384:
-#line 1752 "parse.y"
+#line 1725 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 385:
-#line 1762 "parse.y"
+#line 1735 "parse.y"
 { yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 386:
-#line 1764 "parse.y"
+#line 1737 "parse.y"
 { yyval.ttype = IDENTIFIER_AS_LIST (yyval.ttype); ;
     break;}
 case 387:
-#line 1766 "parse.y"
+#line 1739 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 388:
-#line 1769 "parse.y"
+#line 1742 "parse.y"
 { if (extra_warnings && TREE_STATIC (yyval.ttype))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
@@ -5725,61 +5715,61 @@ case 388:
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
 case 389:
-#line 1775 "parse.y"
+#line 1748 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 390:
-#line 1777 "parse.y"
+#line 1750 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 391:
-#line 1788 "parse.y"
+#line 1761 "parse.y"
 { yyval.ftype.t = get_decl_list (yyvsp[0].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 392:
-#line 1791 "parse.y"
+#line 1764 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 393:
-#line 1794 "parse.y"
+#line 1767 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 394:
-#line 1797 "parse.y"
+#line 1770 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 395:
-#line 1803 "parse.y"
+#line 1776 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
 case 396:
-#line 1805 "parse.y"
+#line 1778 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 398:
-#line 1815 "parse.y"
+#line 1788 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 399:
-#line 1817 "parse.y"
+#line 1790 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 400:
-#line 1819 "parse.y"
+#line 1792 "parse.y"
 { yyval.ftype.t = TREE_TYPE (yyvsp[-1].ttype);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 401:
-#line 1822 "parse.y"
+#line 1795 "parse.y"
 { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 402:
-#line 1825 "parse.y"
+#line 1798 "parse.y"
 { tree type = TREE_TYPE (yyvsp[-1].ttype);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5796,7 +5786,7 @@ case 402:
                ;
     break;}
 case 403:
-#line 1840 "parse.y"
+#line 1813 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5813,200 +5803,200 @@ case 403:
                ;
     break;}
 case 404:
-#line 1860 "parse.y"
+#line 1833 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 405:
-#line 1862 "parse.y"
+#line 1835 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 408:
-#line 1869 "parse.y"
+#line 1842 "parse.y"
 { check_multiple_declarators (); ;
     break;}
 case 410:
-#line 1875 "parse.y"
+#line 1848 "parse.y"
 { check_multiple_declarators (); ;
     break;}
 case 412:
-#line 1881 "parse.y"
+#line 1854 "parse.y"
 { check_multiple_declarators (); ;
     break;}
 case 413:
-#line 1886 "parse.y"
+#line 1859 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 414:
-#line 1888 "parse.y"
+#line 1861 "parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 415:
-#line 1893 "parse.y"
+#line 1866 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes); ;
     break;}
 case 416:
-#line 1897 "parse.y"
+#line 1870 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ;
     break;}
 case 417:
-#line 1899 "parse.y"
+#line 1872 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                          yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 418:
-#line 1912 "parse.y"
+#line 1885 "parse.y"
 { yyvsp[0].itype = parse_decl (yyvsp[-3].ttype, yyvsp[-4].ttype, 
                                           yyvsp[-1].ttype, 1, &yyval.ttype); ;
     break;}
 case 419:
-#line 1917 "parse.y"
+#line 1890 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1,
                                  LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
 case 420:
-#line 1921 "parse.y"
+#line 1894 "parse.y"
 { tree d;
                  yyval.itype = parse_decl (yyvsp[-2].ttype, yyvsp[-3].ttype, yyvsp[0].ttype, 0, &d);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 421:
-#line 1928 "parse.y"
+#line 1901 "parse.y"
 { yyval.itype = yyvsp[0].itype; ;
     break;}
 case 422:
-#line 1932 "parse.y"
+#line 1905 "parse.y"
 { yyval.itype = yyvsp[0].itype; ;
     break;}
 case 423:
-#line 1937 "parse.y"
+#line 1910 "parse.y"
 { /* Set things up as initdcl0_innards expects.  */
              yyvsp[0].ttype = yyvsp[-1].ttype; 
               yyvsp[-1].ttype = NULL_TREE; ;
     break;}
 case 424:
-#line 1941 "parse.y"
+#line 1914 "parse.y"
 {;
     break;}
 case 425:
-#line 1943 "parse.y"
+#line 1916 "parse.y"
 { tree d;
                  parse_decl(yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype, 0, &d);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 426:
-#line 1952 "parse.y"
+#line 1925 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 427:
-#line 1954 "parse.y"
+#line 1927 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 428:
-#line 1959 "parse.y"
+#line 1932 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 429:
-#line 1961 "parse.y"
+#line 1934 "parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 430:
-#line 1966 "parse.y"
+#line 1939 "parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
 case 431:
-#line 1971 "parse.y"
+#line 1944 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 432:
-#line 1973 "parse.y"
+#line 1946 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 433:
-#line 1978 "parse.y"
+#line 1951 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 434:
-#line 1980 "parse.y"
+#line 1953 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 435:
-#line 1982 "parse.y"
+#line 1955 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
 case 436:
-#line 1984 "parse.y"
+#line 1957 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
 case 437:
-#line 1986 "parse.y"
+#line 1959 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 442:
-#line 2002 "parse.y"
+#line 1975 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 443:
-#line 2004 "parse.y"
+#line 1977 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 444:
-#line 2009 "parse.y"
+#line 1982 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 445:
-#line 2011 "parse.y"
+#line 1984 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 447:
-#line 2019 "parse.y"
+#line 1992 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 448:
-#line 2022 "parse.y"
+#line 1995 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 449:
-#line 2025 "parse.y"
+#line 1998 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 450:
-#line 2028 "parse.y"
+#line 2001 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 451:
-#line 2035 "parse.y"
+#line 2008 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 452:
-#line 2037 "parse.y"
+#line 2010 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 453:
-#line 2040 "parse.y"
+#line 2013 "parse.y"
 { yyval.ttype = build_expr_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 454:
-#line 2042 "parse.y"
+#line 2015 "parse.y"
 { yyval.ttype = build_expr_list (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 455:
-#line 2044 "parse.y"
+#line 2017 "parse.y"
 { yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 456:
-#line 2049 "parse.y"
+#line 2022 "parse.y"
 { start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype),
                                  NULL_TREE, 1);
                  reinit_parse_for_function (); ;
     break;}
 case 457:
-#line 2055 "parse.y"
+#line 2028 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -6015,37 +6005,37 @@ case 457:
                ;
     break;}
 case 458:
-#line 2062 "parse.y"
+#line 2035 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
 case 459:
-#line 2064 "parse.y"
+#line 2037 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
 case 462:
-#line 2076 "parse.y"
+#line 2049 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 463:
-#line 2078 "parse.y"
+#line 2051 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, error_mark_node); ;
     break;}
 case 465:
-#line 2083 "parse.y"
+#line 2056 "parse.y"
 { do_pending_defargs (); ;
     break;}
 case 466:
-#line 2085 "parse.y"
+#line 2058 "parse.y"
 { do_pending_defargs (); ;
     break;}
 case 467:
-#line 2090 "parse.y"
+#line 2063 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = current_enum_type;
                  current_enum_type = start_enum (yyvsp[-1].ttype); ;
     break;}
 case 468:
-#line 2094 "parse.y"
+#line 2067 "parse.y"
 { TYPE_VALUES (current_enum_type) = yyvsp[-2].ttype;
                  yyval.ftype.t = finish_enum (current_enum_type);
                  yyval.ftype.new_type_flag = 1;
@@ -6054,19 +6044,19 @@ case 468:
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 469:
-#line 2101 "parse.y"
+#line 2074 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype));
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 470:
-#line 2105 "parse.y"
+#line 2078 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = current_enum_type;
                  current_enum_type = start_enum (make_anon_name ()); ;
     break;}
 case 471:
-#line 2109 "parse.y"
+#line 2082 "parse.y"
 { TYPE_VALUES (current_enum_type) = yyvsp[-2].ttype;
                  yyval.ftype.t = finish_enum (current_enum_type);
                  yyval.ftype.new_type_flag = 1;
@@ -6075,30 +6065,30 @@ case 471:
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 472:
-#line 2116 "parse.y"
+#line 2089 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (make_anon_name()));
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 473:
-#line 2120 "parse.y"
+#line 2093 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 474:
-#line 2123 "parse.y"
+#line 2096 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 475:
-#line 2126 "parse.y"
+#line 2099 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0; 
                  if (!processing_template_decl)
                    cp_pedwarn ("using `typename' outside of template"); ;
     break;}
 case 476:
-#line 2133 "parse.y"
+#line 2106 "parse.y"
 { 
                  int semi;
 
@@ -6110,17 +6100,17 @@ case 476:
                ;
     break;}
 case 477:
-#line 2143 "parse.y"
+#line 2116 "parse.y"
 { finish_default_args (); ;
     break;}
 case 478:
-#line 2145 "parse.y"
+#line 2118 "parse.y"
 { yyval.ftype.t = yyvsp[-3].ttype;
                  yyval.ftype.new_type_flag = 1; 
                  begin_inline_definitions (); ;
     break;}
 case 479:
-#line 2149 "parse.y"
+#line 2122 "parse.y"
 {
                  yyval.ftype.new_type_flag = 0;
                  if (TYPE_BINFO (yyvsp[0].ttype) == NULL_TREE)
@@ -6140,88 +6130,88 @@ case 479:
                ;
     break;}
 case 483:
-#line 2176 "parse.y"
+#line 2149 "parse.y"
 { if (pedantic && !in_system_header)
                    pedwarn ("comma at end of enumerator list"); ;
     break;}
 case 485:
-#line 2183 "parse.y"
+#line 2156 "parse.y"
 { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 486:
-#line 2185 "parse.y"
+#line 2158 "parse.y"
 { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 487:
-#line 2187 "parse.y"
+#line 2160 "parse.y"
 { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 488:
-#line 2189 "parse.y"
+#line 2162 "parse.y"
 { error ("no body nor ';' separates two class, struct or union declarations"); ;
     break;}
 case 489:
-#line 2191 "parse.y"
+#line 2164 "parse.y"
 { yyval.ttype = build_decl_list (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 490:
-#line 2196 "parse.y"
+#line 2169 "parse.y"
 { 
                  current_aggr = yyvsp[-1].ttype; 
                  yyval.ttype = yyvsp[0].ttype; 
                ;
     break;}
 case 491:
-#line 2204 "parse.y"
+#line 2177 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 492:
-#line 2206 "parse.y"
+#line 2179 "parse.y"
 { yyungetc ('{', 1); ;
     break;}
 case 493:
-#line 2208 "parse.y"
+#line 2181 "parse.y"
 { yyungetc (':', 1); ;
     break;}
 case 494:
-#line 2213 "parse.y"
+#line 2186 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 495:
-#line 2218 "parse.y"
+#line 2191 "parse.y"
 {
                  current_aggr = yyvsp[-3].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 496:
-#line 2223 "parse.y"
+#line 2196 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
 case 497:
-#line 2228 "parse.y"
+#line 2201 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 498:
-#line 2230 "parse.y"
+#line 2203 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 499:
-#line 2235 "parse.y"
+#line 2208 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 1); ;
     break;}
 case 500:
-#line 2237 "parse.y"
+#line 2210 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
     break;}
 case 501:
-#line 2239 "parse.y"
+#line 2214 "parse.y"
 { 
                  yyval.ttype = yyvsp[-1].ttype;
                  if (yyvsp[0].ttype)
@@ -6229,9 +6219,14 @@ case 501:
                ;
     break;}
 case 502:
-#line 2245 "parse.y"
+#line 2220 "parse.y"
+{ push_scope (CP_DECL_CONTEXT (yyvsp[0].ttype)); ;
+    break;}
+case 503:
+#line 2222 "parse.y"
 { 
-                 yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
+                  pop_scope (CP_DECL_CONTEXT (yyvsp[-2].ttype));
+                 yyval.ttype = TREE_TYPE (yyvsp[-2].ttype);
                  if (TREE_INT_CST_LOW (current_aggr) == union_type 
                      && TREE_CODE (yyval.ttype) != UNION_TYPE)
                    cp_pedwarn ("`union' tag used in declaring `%#T'", yyval.ttype);
@@ -6241,49 +6236,49 @@ case 502:
                  if (yyvsp[0].ttype)
                    {
                      maybe_process_partial_specialization (yyval.ttype);
-                     xref_basetypes (current_aggr, yyvsp[-1].ttype, yyval.ttype, yyvsp[0].ttype); 
+                     xref_basetypes (current_aggr, yyvsp[-2].ttype, yyval.ttype, yyvsp[0].ttype); 
                    }
                ;
     break;}
-case 503:
-#line 2263 "parse.y"
+case 504:
+#line 2241 "parse.y"
 { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), 0);
                  yyungetc ('{', 1); ;
     break;}
-case 506:
-#line 2274 "parse.y"
+case 507:
+#line 2252 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 507:
-#line 2276 "parse.y"
+case 508:
+#line 2254 "parse.y"
 { yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
     break;}
-case 508:
-#line 2278 "parse.y"
+case 509:
+#line 2256 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 510:
-#line 2284 "parse.y"
+case 511:
+#line 2262 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 511:
-#line 2289 "parse.y"
+case 512:
+#line 2267 "parse.y"
 { yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype,
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
-case 512:
-#line 2293 "parse.y"
+case 513:
+#line 2271 "parse.y"
 { yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype, 
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
-case 513:
-#line 2300 "parse.y"
+case 514:
+#line 2278 "parse.y"
 { if (yyval.ttype != error_mark_node) yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
     break;}
-case 515:
-#line 2303 "parse.y"
+case 516:
+#line 2281 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6305,8 +6300,8 @@ case 515:
                    }
                ;
     break;}
-case 516:
-#line 2324 "parse.y"
+case 517:
+#line 2302 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6328,14 +6323,14 @@ case 516:
                    }
                ;
     break;}
-case 518:
-#line 2349 "parse.y"
+case 519:
+#line 2327 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  yyval.ttype = access_default_virtual_node; ;
     break;}
-case 519:
-#line 2353 "parse.y"
+case 520:
+#line 2331 "parse.y"
 {
                  if (yyvsp[-2].ttype != access_default_virtual_node)
                    error ("multiple access specifiers");
@@ -6347,8 +6342,8 @@ case 519:
                    yyval.ttype = access_private_virtual_node;
                ;
     break;}
-case 520:
-#line 2364 "parse.y"
+case 521:
+#line 2342 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  else if (yyval.ttype == access_public_node)
@@ -6361,18 +6356,18 @@ case 520:
                    error ("multiple `virtual' specifiers");
                ;
     break;}
-case 521:
-#line 2379 "parse.y"
+case 522:
+#line 2357 "parse.y"
 { yyvsp[-1].ttype = begin_class_definition (yyvsp[-1].ttype); ;
     break;}
-case 522:
-#line 2384 "parse.y"
+case 523:
+#line 2362 "parse.y"
 {
                  finish_member_declaration (build_self_reference ());
                ;
     break;}
-case 527:
-#line 2398 "parse.y"
+case 528:
+#line 2376 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6383,50 +6378,50 @@ case 527:
                  current_access_specifier = yyvsp[-1].ttype;
                 ;
     break;}
-case 528:
-#line 2413 "parse.y"
+case 529:
+#line 2391 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
-case 529:
-#line 2417 "parse.y"
+case 530:
+#line 2395 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
-case 531:
-#line 2425 "parse.y"
+case 532:
+#line 2403 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
-case 532:
-#line 2430 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
 case 533:
-#line 2432 "parse.y"
+#line 2408 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 534:
-#line 2434 "parse.y"
+#line 2410 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 535:
-#line 2436 "parse.y"
+#line 2412 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 536:
-#line 2438 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
+#line 2414 "parse.y"
+{ yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 537:
-#line 2440 "parse.y"
+#line 2416 "parse.y"
+{ yyval.ttype = NULL_TREE; ;
+    break;}
+case 538:
+#line 2418 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
-case 538:
-#line 2443 "parse.y"
+case 539:
+#line 2421 "parse.y"
 {  
                  if (yyvsp[0].ttype)
                    yyval.ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6437,15 +6432,15 @@ case 538:
                  finish_template_decl (yyvsp[-1].ttype);
                ;
     break;}
-case 539:
-#line 2453 "parse.y"
+case 540:
+#line 2431 "parse.y"
 { 
                  yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); 
                  finish_template_decl (yyvsp[-2].ttype);
                ;
     break;}
-case 540:
-#line 2464 "parse.y"
+case 541:
+#line 2442 "parse.y"
 {
                  /* Most of the productions for component_decl only
                     allow the creation of one new member, so we call
@@ -6467,54 +6462,54 @@ case 540:
                  yyval.ttype = NULL_TREE;
                ;
     break;}
-case 541:
-#line 2485 "parse.y"
+case 542:
+#line 2463 "parse.y"
 { 
                  if (!yyvsp[0].itype)
                    grok_x_components (yyvsp[-1].ttype);
                  yyval.ttype = NULL_TREE; 
                ;
     break;}
-case 542:
-#line 2491 "parse.y"
+case 543:
+#line 2469 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 543:
-#line 2494 "parse.y"
+case 544:
+#line 2472 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 544:
-#line 2497 "parse.y"
+case 545:
+#line 2475 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 545:
-#line 2499 "parse.y"
+case 546:
+#line 2477 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 546:
-#line 2510 "parse.y"
+case 547:
+#line 2488 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
                  yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, attrs)); ;
     break;}
-case 547:
-#line 2515 "parse.y"
+case 548:
+#line 2493 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 548:
-#line 2518 "parse.y"
+case 549:
+#line 2496 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
-case 549:
-#line 2524 "parse.y"
+case 550:
+#line 2502 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 550:
-#line 2526 "parse.y"
+case 551:
+#line 2504 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6522,8 +6517,8 @@ case 550:
                  yyval.itype = 1;
                ;
     break;}
-case 551:
-#line 2533 "parse.y"
+case 552:
+#line 2511 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6532,12 +6527,12 @@ case 551:
                  yyval.itype = 2;
                ;
     break;}
-case 552:
-#line 2544 "parse.y"
+case 553:
+#line 2522 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 553:
-#line 2546 "parse.y"
+case 554:
+#line 2524 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6545,8 +6540,8 @@ case 553:
                  yyval.itype = 1;
                ;
     break;}
-case 554:
-#line 2553 "parse.y"
+case 555:
+#line 2531 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6555,103 +6550,103 @@ case 554:
                  yyval.itype = 2;
                ;
     break;}
-case 559:
-#line 2574 "parse.y"
+case 560:
+#line 2552 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 560:
-#line 2580 "parse.y"
+case 561:
+#line 2558 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 561:
-#line 2589 "parse.y"
+case 562:
+#line 2567 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 562:
-#line 2595 "parse.y"
+case 563:
+#line 2573 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 563:
-#line 2601 "parse.y"
+case 564:
+#line 2579 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 564:
-#line 2607 "parse.y"
+case 565:
+#line 2585 "parse.y"
 { split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-3].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 565:
-#line 2616 "parse.y"
+case 566:
+#line 2594 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 566:
-#line 2619 "parse.y"
+case 567:
+#line 2597 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 567:
-#line 2625 "parse.y"
+case 568:
+#line 2603 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 568:
-#line 2628 "parse.y"
+case 569:
+#line 2606 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 569:
-#line 2631 "parse.y"
+case 570:
+#line 2609 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 571:
-#line 2642 "parse.y"
+case 572:
+#line 2620 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 572:
-#line 2647 "parse.y"
+case 573:
+#line 2625 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE, current_enum_type); ;
     break;}
-case 573:
-#line 2649 "parse.y"
+case 574:
+#line 2627 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype, current_enum_type); ;
     break;}
-case 574:
-#line 2655 "parse.y"
+case 575:
+#line 2633 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 575:
-#line 2658 "parse.y"
+case 576:
+#line 2636 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 576:
-#line 2665 "parse.y"
+case 577:
+#line 2643 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6660,72 +6655,72 @@ case 576:
                  yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag;
                ;
     break;}
-case 577:
-#line 2676 "parse.y"
+case 578:
+#line 2654 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 578:
-#line 2678 "parse.y"
+case 579:
+#line 2656 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 579:
-#line 2683 "parse.y"
+case 580:
+#line 2661 "parse.y"
 { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 580:
-#line 2686 "parse.y"
+case 581:
+#line 2664 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 581:
-#line 2695 "parse.y"
-{ yyval.itype = suspend_momentary (); ;
-    break;}
 case 582:
-#line 2700 "parse.y"
-{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
+#line 2673 "parse.y"
+{ yyval.itype = suspend_momentary (); ;
     break;}
 case 583:
-#line 2706 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
+#line 2678 "parse.y"
+{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 584:
-#line 2708 "parse.y"
+#line 2684 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 585:
-#line 2710 "parse.y"
-{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
+#line 2686 "parse.y"
+{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 586:
-#line 2712 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
+#line 2688 "parse.y"
+{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
 case 587:
-#line 2719 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 2690 "parse.y"
+{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
 case 588:
-#line 2721 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 2697 "parse.y"
+{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 589:
-#line 2723 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
+#line 2699 "parse.y"
+{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 590:
-#line 2725 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
+#line 2701 "parse.y"
+{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 591:
-#line 2727 "parse.y"
+#line 2703 "parse.y"
+{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
+    break;}
+case 592:
+#line 2705 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 593:
-#line 2735 "parse.y"
+case 594:
+#line 2713 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
@@ -6743,8 +6738,8 @@ case 593:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 594:
-#line 2752 "parse.y"
+case 595:
+#line 2730 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6753,161 +6748,161 @@ case 594:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 597:
-#line 2765 "parse.y"
+case 598:
+#line 2743 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 598:
-#line 2770 "parse.y"
+case 599:
+#line 2748 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
-case 599:
-#line 2775 "parse.y"
+case 600:
+#line 2753 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 600:
-#line 2777 "parse.y"
+case 601:
+#line 2755 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 601:
-#line 2779 "parse.y"
+case 602:
+#line 2757 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 602:
-#line 2781 "parse.y"
+case 603:
+#line 2759 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 603:
-#line 2783 "parse.y"
+case 604:
+#line 2761 "parse.y"
 { push_nested_class (yyvsp[-1].ttype, 3);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype);
                  TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;
     break;}
-case 606:
-#line 2795 "parse.y"
+case 607:
+#line 2773 "parse.y"
 {
                  /* Provide support for '(' attributes '*' declarator ')'
                     etc */
                  yyval.ttype = decl_tree_cons (yyvsp[-1].ttype, yyvsp[0].ttype, NULL_TREE);
                ;
     break;}
-case 607:
-#line 2804 "parse.y"
+case 608:
+#line 2782 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 608:
-#line 2806 "parse.y"
+case 609:
+#line 2784 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 609:
-#line 2808 "parse.y"
+case 610:
+#line 2786 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 610:
-#line 2810 "parse.y"
+case 611:
+#line 2788 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 611:
-#line 2812 "parse.y"
+case 612:
+#line 2790 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 613:
-#line 2820 "parse.y"
+case 614:
+#line 2798 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 614:
-#line 2822 "parse.y"
+case 615:
+#line 2800 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 615:
-#line 2824 "parse.y"
+case 616:
+#line 2802 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 616:
-#line 2826 "parse.y"
+case 617:
+#line 2804 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 617:
-#line 2828 "parse.y"
+case 618:
+#line 2806 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 619:
-#line 2836 "parse.y"
+case 620:
+#line 2814 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 620:
-#line 2838 "parse.y"
+case 621:
+#line 2816 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 621:
-#line 2840 "parse.y"
+case 622:
+#line 2818 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 622:
-#line 2842 "parse.y"
+case 623:
+#line 2820 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 623:
-#line 2844 "parse.y"
+case 624:
+#line 2822 "parse.y"
 { enter_scope_of (yyvsp[0].ttype); ;
     break;}
-case 624:
-#line 2846 "parse.y"
+case 625:
+#line 2824 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
                  enter_scope_of (yyval.ttype);
                ;
     break;}
-case 625:
-#line 2854 "parse.y"
+case 626:
+#line 2832 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 626:
-#line 2857 "parse.y"
+case 627:
+#line 2835 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 627:
-#line 2863 "parse.y"
+case 628:
+#line 2841 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 628:
-#line 2866 "parse.y"
+case 629:
+#line 2844 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 630:
-#line 2873 "parse.y"
+case 631:
+#line 2851 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 631:
-#line 2878 "parse.y"
+case 632:
+#line 2856 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 632:
-#line 2880 "parse.y"
+case 633:
+#line 2858 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 633:
-#line 2882 "parse.y"
+case 634:
+#line 2860 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 638:
-#line 2893 "parse.y"
+case 639:
+#line 2871 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 639:
-#line 2895 "parse.y"
+case 640:
+#line 2873 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 640:
-#line 2902 "parse.y"
+case 641:
+#line 2880 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
@@ -6922,32 +6917,32 @@ case 640:
                  got_scope = yyval.ttype = TYPE_MAIN_VARIANT (TREE_TYPE (yyval.ttype));
                ;
     break;}
-case 641:
-#line 2916 "parse.y"
+case 642:
+#line 2894 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 642:
-#line 2922 "parse.y"
+case 643:
+#line 2900 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 643:
-#line 2928 "parse.y"
+case 644:
+#line 2906 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
-case 645:
-#line 2944 "parse.y"
+case 646:
+#line 2922 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 646:
-#line 2949 "parse.y"
+case 647:
+#line 2927 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6961,27 +6956,27 @@ case 646:
                    }
                ;
     break;}
-case 647:
-#line 2962 "parse.y"
+case 648:
+#line 2940 "parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;
     break;}
-case 648:
-#line 2964 "parse.y"
+case 649:
+#line 2942 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 649:
-#line 2966 "parse.y"
+case 650:
+#line 2944 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 650:
-#line 2971 "parse.y"
+case 651:
+#line 2949 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
-case 651:
-#line 2976 "parse.y"
+case 652:
+#line 2954 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6995,16 +6990,16 @@ case 651:
                    }
                ;
     break;}
-case 652:
-#line 2989 "parse.y"
+case 653:
+#line 2967 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 653:
-#line 2991 "parse.y"
+case 654:
+#line 2969 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 654:
-#line 2996 "parse.y"
+case 655:
+#line 2974 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -7017,32 +7012,32 @@ case 654:
                    cp_error ("`%T' is not a class or namespace", yyvsp[-1].ttype);
                ;
     break;}
-case 655:
-#line 3008 "parse.y"
+case 656:
+#line 2986 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype));
                ;
     break;}
-case 656:
-#line 3014 "parse.y"
+case 657:
+#line 2992 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
-case 659:
-#line 3018 "parse.y"
+case 660:
+#line 2996 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 660:
-#line 3027 "parse.y"
+case 661:
+#line 3005 "parse.y"
 { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 661:
-#line 3032 "parse.y"
+case 662:
+#line 3010 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -7051,149 +7046,149 @@ case 661:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 663:
-#line 3041 "parse.y"
+case 664:
+#line 3019 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 664:
-#line 3046 "parse.y"
+case 665:
+#line 3024 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 665:
-#line 3048 "parse.y"
+case 666:
+#line 3026 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
-case 666:
-#line 3055 "parse.y"
+case 667:
+#line 3033 "parse.y"
 { got_scope = void_type_node; ;
     break;}
-case 667:
-#line 3061 "parse.y"
+case 668:
+#line 3039 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 668:
-#line 3063 "parse.y"
+case 669:
+#line 3041 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 669:
-#line 3065 "parse.y"
+case 670:
+#line 3043 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 670:
-#line 3067 "parse.y"
+case 671:
+#line 3045 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 671:
-#line 3069 "parse.y"
+case 672:
+#line 3047 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
-case 672:
-#line 3073 "parse.y"
+case 673:
+#line 3051 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 674:
-#line 3082 "parse.y"
+case 675:
+#line 3060 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 675:
-#line 3084 "parse.y"
+case 676:
+#line 3062 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 676:
-#line 3090 "parse.y"
+case 677:
+#line 3068 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 677:
-#line 3092 "parse.y"
+case 678:
+#line 3070 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 678:
-#line 3094 "parse.y"
+case 679:
+#line 3072 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 679:
-#line 3096 "parse.y"
+case 680:
+#line 3074 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 680:
-#line 3098 "parse.y"
+case 681:
+#line 3076 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 681:
-#line 3100 "parse.y"
+case 682:
+#line 3078 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 682:
-#line 3102 "parse.y"
+case 683:
+#line 3080 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 683:
-#line 3104 "parse.y"
+case 684:
+#line 3082 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 684:
-#line 3106 "parse.y"
+case 685:
+#line 3084 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
-case 685:
-#line 3110 "parse.y"
+case 686:
+#line 3088 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 687:
-#line 3119 "parse.y"
+case 688:
+#line 3097 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 689:
-#line 3123 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
 case 690:
-#line 3125 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 3101 "parse.y"
+{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 691:
-#line 3127 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
+#line 3103 "parse.y"
+{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 692:
-#line 3129 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
+#line 3105 "parse.y"
+{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 693:
-#line 3131 "parse.y"
-{ yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 3107 "parse.y"
+{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 694:
-#line 3133 "parse.y"
-{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 3109 "parse.y"
+{ yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 695:
-#line 3135 "parse.y"
+#line 3111 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 696:
-#line 3137 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
+#line 3113 "parse.y"
+{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 697:
-#line 3139 "parse.y"
+#line 3115 "parse.y"
+{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
+    break;}
+case 698:
+#line 3117 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
-case 704:
-#line 3162 "parse.y"
+case 705:
+#line 3140 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
-case 707:
-#line 3173 "parse.y"
+case 708:
+#line 3151 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7203,226 +7198,226 @@ case 707:
                    }
                ;
     break;}
-case 708:
-#line 3187 "parse.y"
+case 709:
+#line 3165 "parse.y"
 {;
     break;}
-case 710:
-#line 3193 "parse.y"
+case 711:
+#line 3171 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
-case 711:
-#line 3195 "parse.y"
+case 712:
+#line 3173 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
-case 712:
-#line 3200 "parse.y"
+case 713:
+#line 3178 "parse.y"
 {
                  yyval.ttype = begin_if_stmt ();
                  cond_stmt_keyword = "if";
                ;
     break;}
-case 713:
-#line 3205 "parse.y"
+case 714:
+#line 3183 "parse.y"
 { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 714:
-#line 3207 "parse.y"
+case 715:
+#line 3185 "parse.y"
 { yyval.ttype = finish_then_clause (yyvsp[-3].ttype); ;
     break;}
-case 716:
-#line 3212 "parse.y"
+case 717:
+#line 3190 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
-case 717:
-#line 3214 "parse.y"
+case 718:
+#line 3192 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
-case 718:
-#line 3219 "parse.y"
+case 719:
+#line 3197 "parse.y"
 {;
     break;}
-case 720:
-#line 3225 "parse.y"
+case 721:
+#line 3203 "parse.y"
 { finish_stmt (); ;
     break;}
-case 721:
-#line 3227 "parse.y"
+case 722:
+#line 3205 "parse.y"
 { finish_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 722:
-#line 3229 "parse.y"
+case 723:
+#line 3207 "parse.y"
 { begin_else_clause (); ;
     break;}
-case 723:
-#line 3231 "parse.y"
+case 724:
+#line 3209 "parse.y"
 { 
                  finish_else_clause (yyvsp[-3].ttype); 
                  finish_if_stmt ();
                ;
     break;}
-case 724:
-#line 3236 "parse.y"
+case 725:
+#line 3214 "parse.y"
 { finish_if_stmt (); ;
     break;}
-case 725:
-#line 3238 "parse.y"
+case 726:
+#line 3216 "parse.y"
 {
                  yyval.ttype = begin_while_stmt ();
                  cond_stmt_keyword = "while";
                ;
     break;}
-case 726:
-#line 3243 "parse.y"
+case 727:
+#line 3221 "parse.y"
 { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 727:
-#line 3245 "parse.y"
+case 728:
+#line 3223 "parse.y"
 { finish_while_stmt (yyvsp[-3].ttype); ;
     break;}
-case 728:
-#line 3247 "parse.y"
+case 729:
+#line 3225 "parse.y"
 { yyval.ttype = begin_do_stmt (); ;
     break;}
-case 729:
-#line 3249 "parse.y"
+case 730:
+#line 3227 "parse.y"
 {
                  finish_do_body (yyvsp[-2].ttype);
                  cond_stmt_keyword = "do";
                ;
     break;}
-case 730:
-#line 3254 "parse.y"
+case 731:
+#line 3232 "parse.y"
 { finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
-case 731:
-#line 3256 "parse.y"
+case 732:
+#line 3234 "parse.y"
 { yyval.ttype = begin_for_stmt (); ;
     break;}
-case 732:
-#line 3258 "parse.y"
+case 733:
+#line 3236 "parse.y"
 { finish_for_init_stmt (yyvsp[-2].ttype); ;
     break;}
-case 733:
-#line 3260 "parse.y"
+case 734:
+#line 3238 "parse.y"
 { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
-case 734:
-#line 3262 "parse.y"
+case 735:
+#line 3240 "parse.y"
 { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;
     break;}
-case 735:
-#line 3264 "parse.y"
+case 736:
+#line 3242 "parse.y"
 { finish_for_stmt (yyvsp[-3].ttype, yyvsp[-10].ttype); ;
     break;}
-case 736:
-#line 3266 "parse.y"
+case 737:
+#line 3244 "parse.y"
 { begin_switch_stmt (); ;
     break;}
-case 737:
-#line 3268 "parse.y"
+case 738:
+#line 3246 "parse.y"
 { yyval.ttype = finish_switch_cond (yyvsp[-1].ttype); ;
     break;}
-case 738:
-#line 3270 "parse.y"
+case 739:
+#line 3248 "parse.y"
 { finish_switch_stmt (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 739:
-#line 3272 "parse.y"
+case 740:
+#line 3250 "parse.y"
 { finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
-case 741:
-#line 3275 "parse.y"
+case 742:
+#line 3253 "parse.y"
 { finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 743:
-#line 3278 "parse.y"
+case 744:
+#line 3256 "parse.y"
 { finish_case_label (NULL_TREE, NULL_TREE); ;
     break;}
-case 745:
-#line 3281 "parse.y"
+case 746:
+#line 3259 "parse.y"
 { finish_break_stmt (); ;
     break;}
-case 746:
-#line 3283 "parse.y"
+case 747:
+#line 3261 "parse.y"
 { finish_continue_stmt (); ;
     break;}
-case 747:
-#line 3285 "parse.y"
+case 748:
+#line 3263 "parse.y"
 { finish_return_stmt (NULL_TREE); ;
     break;}
-case 748:
-#line 3287 "parse.y"
+case 749:
+#line 3265 "parse.y"
 { finish_return_stmt (yyvsp[-1].ttype); ;
     break;}
-case 749:
-#line 3289 "parse.y"
+case 750:
+#line 3267 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
-case 750:
-#line 3295 "parse.y"
+case 751:
+#line 3273 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
-case 751:
-#line 3301 "parse.y"
+case 752:
+#line 3279 "parse.y"
 { finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
-case 752:
-#line 3305 "parse.y"
+case 753:
+#line 3283 "parse.y"
 { finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
     break;}
-case 753:
-#line 3307 "parse.y"
+case 754:
+#line 3285 "parse.y"
 { 
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids computed gotos");
                  finish_goto_stmt (yyvsp[-1].ttype);
                ;
     break;}
-case 754:
-#line 3313 "parse.y"
+case 755:
+#line 3291 "parse.y"
 { finish_goto_stmt (yyvsp[-1].ttype); ;
     break;}
-case 755:
-#line 3315 "parse.y"
+case 756:
+#line 3293 "parse.y"
 { finish_stmt (); ;
     break;}
-case 756:
-#line 3317 "parse.y"
+case 757:
+#line 3295 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
-case 757:
-#line 3321 "parse.y"
+case 758:
+#line 3299 "parse.y"
 { finish_stmt (); ;
     break;}
-case 760:
-#line 3325 "parse.y"
+case 761:
+#line 3303 "parse.y"
 { do_local_using_decl (yyvsp[0].ttype); ;
     break;}
-case 762:
-#line 3331 "parse.y"
+case 763:
+#line 3309 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
                  expand_start_early_try_stmts ();
                ;
     break;}
-case 763:
-#line 3337 "parse.y"
+case 764:
+#line 3315 "parse.y"
 { 
                   expand_start_all_catch (); 
                 ;
     break;}
-case 764:
-#line 3341 "parse.y"
+case 765:
+#line 3319 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -7430,42 +7425,42 @@ case 764:
                  finish_function (lineno, (int)yyvsp[-3].itype, nested);
                ;
     break;}
-case 765:
-#line 3351 "parse.y"
+case 766:
+#line 3329 "parse.y"
 { yyval.ttype = begin_try_block (); ;
     break;}
-case 766:
-#line 3353 "parse.y"
+case 767:
+#line 3331 "parse.y"
 { finish_try_block (yyvsp[-1].ttype); ;
     break;}
-case 767:
-#line 3355 "parse.y"
+case 768:
+#line 3333 "parse.y"
 { finish_handler_sequence (yyvsp[-3].ttype); ;
     break;}
-case 770:
-#line 3365 "parse.y"
+case 771:
+#line 3343 "parse.y"
 { yyval.ttype = begin_handler(); ;
     break;}
-case 771:
-#line 3367 "parse.y"
+case 772:
+#line 3345 "parse.y"
 { finish_handler_parms (yyvsp[-1].ttype); ;
     break;}
-case 772:
-#line 3369 "parse.y"
+case 773:
+#line 3347 "parse.y"
 { finish_handler (yyvsp[-3].ttype); ;
     break;}
-case 775:
-#line 3379 "parse.y"
+case 776:
+#line 3357 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
-case 776:
-#line 3395 "parse.y"
+case 777:
+#line 3373 "parse.y"
 { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype);
                  expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t),
                                            TREE_VALUE (yyvsp[-1].ftype.t)); ;
     break;}
-case 777:
-#line 3402 "parse.y"
+case 778:
+#line 3380 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7473,99 +7468,99 @@ case 777:
                    expand_label (label);
                ;
     break;}
-case 778:
-#line 3409 "parse.y"
-{ goto do_label; ;
-    break;}
 case 779:
-#line 3411 "parse.y"
+#line 3387 "parse.y"
 { goto do_label; ;
     break;}
 case 780:
-#line 3413 "parse.y"
+#line 3389 "parse.y"
 { goto do_label; ;
     break;}
 case 781:
-#line 3418 "parse.y"
+#line 3391 "parse.y"
+{ goto do_label; ;
+    break;}
+case 782:
+#line 3396 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 783:
-#line 3421 "parse.y"
+case 784:
+#line 3399 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
-case 784:
-#line 3430 "parse.y"
+case 785:
+#line 3408 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 785:
-#line 3433 "parse.y"
+case 786:
+#line 3411 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
-case 786:
-#line 3438 "parse.y"
+case 787:
+#line 3416 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 788:
-#line 3441 "parse.y"
+case 789:
+#line 3419 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 789:
-#line 3448 "parse.y"
+case 790:
+#line 3426 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 792:
-#line 3455 "parse.y"
+case 793:
+#line 3433 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 793:
-#line 3460 "parse.y"
+case 794:
+#line 3438 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 794:
-#line 3465 "parse.y"
+case 795:
+#line 3443 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
-case 795:
-#line 3467 "parse.y"
+case 796:
+#line 3445 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 796:
-#line 3478 "parse.y"
+case 797:
+#line 3456 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
-case 798:
-#line 3483 "parse.y"
+case 799:
+#line 3461 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0);
                  check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
     break;}
-case 799:
-#line 3491 "parse.y"
-{ yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
-    break;}
 case 800:
-#line 3493 "parse.y"
-{ yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
+#line 3469 "parse.y"
+{ yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
     break;}
 case 801:
-#line 3496 "parse.y"
+#line 3471 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
 case 802:
-#line 3498 "parse.y"
+#line 3474 "parse.y"
+{ yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
+    break;}
+case 803:
+#line 3476 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE,
                                                         yyvsp[-1].ftype.t), 1); ;
     break;}
-case 803:
-#line 3501 "parse.y"
+case 804:
+#line 3479 "parse.y"
 { yyval.ttype = finish_parmlist (NULL_TREE, 1); ;
     break;}
-case 804:
-#line 3503 "parse.y"
+case 805:
+#line 3481 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7576,8 +7571,8 @@ case 804:
                  yychar = ')';
                ;
     break;}
-case 805:
-#line 3513 "parse.y"
+case 806:
+#line 3491 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7589,99 +7584,99 @@ case 805:
                  yychar = ')';
                ;
     break;}
-case 806:
-#line 3528 "parse.y"
+case 807:
+#line 3506 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
-case 807:
-#line 3530 "parse.y"
+case 808:
+#line 3508 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 810:
-#line 3541 "parse.y"
+case 811:
+#line 3519 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
-case 811:
-#line 3544 "parse.y"
+case 812:
+#line 3522 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;
     break;}
-case 812:
-#line 3547 "parse.y"
+case 813:
+#line 3525 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
-case 813:
-#line 3550 "parse.y"
+case 814:
+#line 3528 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 814:
-#line 3552 "parse.y"
+case 815:
+#line 3530 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
-case 816:
-#line 3558 "parse.y"
+case 817:
+#line 3536 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;
     break;}
-case 817:
-#line 3568 "parse.y"
+case 818:
+#line 3546 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ;
     break;}
-case 818:
-#line 3572 "parse.y"
+case 819:
+#line 3550 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 819:
-#line 3575 "parse.y"
+case 820:
+#line 3553 "parse.y"
 { yyval.ftype.t = build_tree_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 820:
-#line 3578 "parse.y"
+case 821:
+#line 3556 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 821:
-#line 3582 "parse.y"
+case 822:
+#line 3560 "parse.y"
 { tree specs = strip_attrs (yyvsp[0].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 822:
-#line 3586 "parse.y"
+case 823:
+#line 3564 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 823:
-#line 3593 "parse.y"
+case 824:
+#line 3571 "parse.y"
 { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
     break;}
-case 824:
-#line 3596 "parse.y"
+case 825:
+#line 3574 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;  ;
     break;}
-case 827:
-#line 3607 "parse.y"
+case 828:
+#line 3585 "parse.y"
 { see_typename (); ;
     break;}
-case 828:
-#line 3612 "parse.y"
+case 829:
+#line 3590 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
-case 829:
-#line 3617 "parse.y"
+case 830:
+#line 3595 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -7691,194 +7686,194 @@ case 829:
                  yyval.ttype = build_tree_list (integer_type_node, yyval.ttype);
                ;
     break;}
-case 830:
-#line 3629 "parse.y"
+case 831:
+#line 3607 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 831:
-#line 3631 "parse.y"
+case 832:
+#line 3609 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 832:
-#line 3633 "parse.y"
+case 833:
+#line 3611 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
-case 833:
-#line 3638 "parse.y"
+case 834:
+#line 3616 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
-case 835:
-#line 3644 "parse.y"
+case 836:
+#line 3622 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 836:
-#line 3652 "parse.y"
+case 837:
+#line 3630 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 837:
-#line 3654 "parse.y"
+case 838:
+#line 3632 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 838:
-#line 3656 "parse.y"
+case 839:
+#line 3634 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 839:
-#line 3658 "parse.y"
+case 840:
+#line 3636 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 840:
-#line 3665 "parse.y"
-{ got_scope = NULL_TREE; ;
-    break;}
 case 841:
-#line 3670 "parse.y"
-{ yyval.ttype = ansi_opname[MULT_EXPR]; ;
+#line 3643 "parse.y"
+{ got_scope = NULL_TREE; ;
     break;}
 case 842:
-#line 3672 "parse.y"
-{ yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
+#line 3648 "parse.y"
+{ yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
 case 843:
-#line 3674 "parse.y"
-{ yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
+#line 3650 "parse.y"
+{ yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
 case 844:
-#line 3676 "parse.y"
-{ yyval.ttype = ansi_opname[PLUS_EXPR]; ;
+#line 3652 "parse.y"
+{ yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
 case 845:
-#line 3678 "parse.y"
-{ yyval.ttype = ansi_opname[MINUS_EXPR]; ;
+#line 3654 "parse.y"
+{ yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
 case 846:
-#line 3680 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
+#line 3656 "parse.y"
+{ yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
 case 847:
-#line 3682 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
+#line 3658 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
 case 848:
-#line 3684 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
+#line 3660 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
 case 849:
-#line 3686 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
+#line 3662 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
 case 850:
-#line 3688 "parse.y"
-{ yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
+#line 3664 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
 case 851:
-#line 3690 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3666 "parse.y"
+{ yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
 case 852:
-#line 3692 "parse.y"
-{ yyval.ttype = ansi_opname[LT_EXPR]; ;
+#line 3668 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 853:
-#line 3694 "parse.y"
-{ yyval.ttype = ansi_opname[GT_EXPR]; ;
+#line 3670 "parse.y"
+{ yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
 case 854:
-#line 3696 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3672 "parse.y"
+{ yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
 case 855:
-#line 3698 "parse.y"
-{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
+#line 3674 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 856:
-#line 3700 "parse.y"
-{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
+#line 3676 "parse.y"
+{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
 case 857:
-#line 3702 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3678 "parse.y"
+{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
 case 858:
-#line 3704 "parse.y"
+#line 3680 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 859:
-#line 3706 "parse.y"
-{ yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
+#line 3682 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 860:
-#line 3708 "parse.y"
-{ yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
+#line 3684 "parse.y"
+{ yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
 case 861:
-#line 3710 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
+#line 3686 "parse.y"
+{ yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
 case 862:
-#line 3712 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
+#line 3688 "parse.y"
+{ yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
 case 863:
-#line 3714 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
+#line 3690 "parse.y"
+{ yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
 case 864:
-#line 3716 "parse.y"
-{ yyval.ttype = ansi_opname[COND_EXPR]; ;
+#line 3692 "parse.y"
+{ yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
 case 865:
-#line 3718 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3694 "parse.y"
+{ yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
 case 866:
-#line 3720 "parse.y"
-{ yyval.ttype = ansi_opname[COMPONENT_REF]; ;
+#line 3696 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 867:
-#line 3722 "parse.y"
-{ yyval.ttype = ansi_opname[MEMBER_REF]; ;
+#line 3698 "parse.y"
+{ yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
 case 868:
-#line 3724 "parse.y"
-{ yyval.ttype = ansi_opname[CALL_EXPR]; ;
+#line 3700 "parse.y"
+{ yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
 case 869:
-#line 3726 "parse.y"
-{ yyval.ttype = ansi_opname[ARRAY_REF]; ;
+#line 3702 "parse.y"
+{ yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
 case 870:
-#line 3728 "parse.y"
-{ yyval.ttype = ansi_opname[NEW_EXPR]; ;
+#line 3704 "parse.y"
+{ yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
 case 871:
-#line 3730 "parse.y"
-{ yyval.ttype = ansi_opname[DELETE_EXPR]; ;
+#line 3706 "parse.y"
+{ yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
 case 872:
-#line 3732 "parse.y"
-{ yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
+#line 3708 "parse.y"
+{ yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
 case 873:
-#line 3734 "parse.y"
-{ yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
+#line 3710 "parse.y"
+{ yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
 case 874:
-#line 3737 "parse.y"
-{ yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 3712 "parse.y"
+{ yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
 case 875:
-#line 3739 "parse.y"
+#line 3715 "parse.y"
+{ yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+    break;}
+case 876:
+#line 3717 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/cygnus/gnupro-98r1/share/bison.simple"
+#line 498 "/usr/lib/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -8074,7 +8069,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 3742 "parse.y"
+#line 3720 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 2aba4a5fea01d7f0125e6c3c935d4a23d9f88575..025b81327af933479b220e197401eb1ed7e28cea 100644 (file)
@@ -1433,47 +1433,20 @@ primary:
                { $$ = finish_this_expr (); }
        | CV_QUALIFIER '(' nonnull_exprlist ')'
                {
-                 tree type = NULL_TREE;
-                 tree id = $$;
+                 /* This is a C cast in C++'s `functional' notation
+                    using the "implicit int" extension so that:
+                    `const (3)' is equivalent to `const int (3)'.  */
+                 tree type;
 
-                 /* This is a C cast in C++'s `functional' notation.  */
                  if ($3 == error_mark_node)
                    {
                      $$ = error_mark_node;
                      break;
                    }
-#if 0
-                 if ($3 == NULL_TREE)
-                   {
-                     error ("cannot cast null list to type `%s'",
-                            IDENTIFIER_POINTER (TYPE_NAME (id)));
-                     $$ = error_mark_node;
-                     break;
-                   }
-#endif
-#if 0
-                 /* type is not set! (mrs) */
-                 if (type == error_mark_node)
-                   $$ = error_mark_node;
-                 else
-#endif
-                   {
-                     if (id == ridpointers[(int) RID_CONST])
-                       type = build_type_variant (integer_type_node, 1, 0);
-                     else if (id == ridpointers[(int) RID_VOLATILE])
-                       type = build_type_variant (integer_type_node, 0, 1);
-#if 0
-                     /* should not be able to get here (mrs) */
-                     else if (id == ridpointers[(int) RID_FRIEND])
-                       {
-                         error ("cannot cast expression to `friend' type");
-                         $$ = error_mark_node;
-                         break;
-                       }
-#endif
-                     else my_friendly_abort (79);
-                     $$ = build_c_cast (type, build_compound_expr ($3));
-                   }
+
+                 type = cp_build_qualified_type (integer_type_node,
+                                                 cp_type_qual_from_rid ($1));
+                 $$ = build_c_cast (type, build_compound_expr ($3));
                }
        | functional_cast
        | DYNAMIC_CAST '<' type_id '>' '(' expr ')'
index 11c89df5c165e66452ebbc3711d619d8a7474360..ec1b5af46d60c362acdef045f9263ec80559b261 100644 (file)
@@ -2598,10 +2598,8 @@ convert_nontype_argument (type, expr)
               template-argument, which must be an lvalue.  */
            if (!comptypes (TYPE_MAIN_VARIANT (expr_type),
                            TYPE_MAIN_VARIANT (type), 1)
-               || (TYPE_READONLY (expr_type) >
-                   TYPE_READONLY (type_referred_to))
-               || (TYPE_VOLATILE (expr_type) >
-                   TYPE_VOLATILE (type_referred_to))
+               || !at_least_as_qualified_p (type_referred_to,
+                                            expr_type)
                || !real_lvalue_p (expr))
              return error_mark_node;
            else
@@ -4872,8 +4870,7 @@ tsubst_aggr_type (t, args, in_decl, entering_scope)
        {
          tree r = build_ptrmemfunc_type
            (tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, in_decl));
-         return cp_build_type_variant (r, TYPE_READONLY (t),
-                                       TYPE_VOLATILE (t));
+         return cp_build_qualified_type (r, TYPE_QUALS (t));
        }
 
       /* else fall through */
@@ -4907,8 +4904,7 @@ tsubst_aggr_type (t, args, in_decl, entering_scope)
          r = lookup_template_class (t, argvec, in_decl, context,
                                     entering_scope);
 
-         return cp_build_type_variant (r, TYPE_READONLY (t),
-                                       TYPE_VOLATILE (t));
+         return cp_build_qualified_type (r, TYPE_QUALS (t));
        }
       else 
        /* This is not a template type, so there's nothing to do.  */
@@ -5559,9 +5555,8 @@ tsubst (t, args, in_decl)
                  {
                    my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (arg))
                                        == 't', 0);
-                   return cp_build_type_variant
-                     (arg, TYPE_READONLY (arg) || TYPE_READONLY (t),
-                      TYPE_VOLATILE (arg) || TYPE_VOLATILE (t));
+                   return cp_build_qualified_type
+                     (arg, CP_TYPE_QUALS (arg) | CP_TYPE_QUALS (t));
                  }
                else if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
                  {
@@ -5585,8 +5580,7 @@ tsubst (t, args, in_decl)
                                                   argvec, in_decl, 
                                                   DECL_CONTEXT (arg),
                                                   /*entering_scope=*/0);
-                       return cp_build_type_variant (r, TYPE_READONLY (t),
-                                                     TYPE_VOLATILE (t));
+                       return cp_build_qualified_type (r, TYPE_QUALS (t));
                      }
                    else
                      /* We are processing a template argument list.  */ 
@@ -5736,7 +5730,7 @@ tsubst (t, args, in_decl)
          r = build_pointer_type (type);
        else
          r = build_reference_type (type);
-       r = cp_build_type_variant (r, TYPE_READONLY (t), TYPE_VOLATILE (t));
+       r = cp_build_qualified_type (r, TYPE_QUALS (t));
 
        /* Will this ever be needed for TYPE_..._TO values?  */
        layout_type (r);
@@ -5766,10 +5760,7 @@ tsubst (t, args, in_decl)
            = build_cplus_method_type (TREE_TYPE (TREE_VALUE (arg_types)),
                                       type,
                                       TREE_CHAIN (arg_types));
-
-       fntype = build_type_variant (fntype,
-                                    TYPE_READONLY (t),
-                                    TYPE_VOLATILE (t));
+       fntype = build_qualified_type (fntype, TYPE_QUALS (t));
 
        /* Substitue the exception specification. */
        raises = TYPE_RAISES_EXCEPTIONS (t);
@@ -5820,9 +5811,9 @@ tsubst (t, args, in_decl)
          return error_mark_node;
 
        f = make_typename_type (ctx, f);
-       return cp_build_type_variant
-         (f, TYPE_READONLY (f) || TYPE_READONLY (t),
-          TYPE_VOLATILE (f) || TYPE_VOLATILE (t));
+       return cp_build_qualified_type (f, 
+                                       CP_TYPE_QUALS (f) 
+                                       | CP_TYPE_QUALS (t));
       }
 
     case INDIRECT_REF:
@@ -7085,11 +7076,9 @@ check_cv_quals_for_unify (strict, arg, parm)
      tree parm;
 {
   return !((!(strict & UNIFY_ALLOW_MORE_CV_QUAL)
-           && (TYPE_READONLY (arg) < TYPE_READONLY (parm)
-               || TYPE_VOLATILE (arg) < TYPE_VOLATILE (parm)))
+           && !at_least_as_qualified_p (arg, parm))
           || (!(strict & UNIFY_ALLOW_LESS_CV_QUAL)
-              && (TYPE_READONLY (arg) > TYPE_READONLY (parm)
-                  || TYPE_VOLATILE (arg) > TYPE_VOLATILE (parm))));
+              && (!at_least_as_qualified_p (parm, arg))));
 }
 
 /* Takes parameters as for type_unification.  Returns 0 if the
@@ -7249,9 +7238,9 @@ unify (tparms, targs, parm, arg, strict, explicit_mask)
          /* Consider the case where ARG is `const volatile int' and
             PARM is `const T'.  Then, T should be `volatile int'.  */
          arg = 
-           cp_build_type_variant (arg, 
-                                  TYPE_READONLY (arg) > TYPE_READONLY (parm),
-                                  TYPE_VOLATILE (arg) > TYPE_VOLATILE (parm));
+           cp_build_qualified_type (arg,
+                                    CP_TYPE_QUALS (arg) 
+                                    & ~CP_TYPE_QUALS (parm));
        }
 
       /* Simple cases: Value already set, does match or doesn't.  */
index 63a734db399949704ef6bd55c042b8c1ea030a6c..b9c949802181da400b21414dbccf77d632eebf4d 100644 (file)
@@ -65,7 +65,8 @@ init_rtti_processing ()
     pop_namespace ();
   tinfo_fn_id = get_identifier ("__tf");
   tinfo_fn_type = build_function_type
-    (build_reference_type (build_type_variant (type_info_type_node, 1, 0)),
+    (build_reference_type (build_qualified_type (type_info_type_node, 
+                                                TYPE_QUAL_CONST)),
      void_list_node);
 }
 
@@ -123,8 +124,8 @@ build_headof (exp)
   else
     offset = build_component_ref (aref, delta_identifier, NULL_TREE, 0);
 
-  type = build_type_variant (ptr_type_node, TREE_READONLY (exp),
-                            TREE_THIS_VOLATILE (exp));
+  type = build_qualified_type (ptr_type_node, 
+                              CP_TYPE_QUALS (TREE_TYPE (exp)));
   return build (PLUS_EXPR, type, exp,
                cp_convert (ptrdiff_type_node, offset));
 }
@@ -302,7 +303,7 @@ get_tinfo_var (type)
   /* Figure out how much space we need to allocate for the type_info object.
      If our struct layout or the type_info classes are changed, this will
      need to be modified.  */
-  if (TYPE_VOLATILE (type) || TYPE_READONLY (type))
+  if (TYPE_QUALS (type) != TYPE_UNQUALIFIED)
     size = 3 * POINTER_SIZE + INT_TYPE_SIZE;
   else if (TREE_CODE (type) == POINTER_TYPE
           && ! (TREE_CODE (TREE_TYPE (type)) == OFFSET_TYPE
@@ -467,8 +468,8 @@ build_dynamic_cast_1 (type, expr)
        goto fail;
       if (TYPE_SIZE (complete_type (TREE_TYPE (exprtype))) == NULL_TREE)
        goto fail;
-      if (TREE_READONLY (TREE_TYPE (exprtype))
-         && ! TYPE_READONLY (TREE_TYPE (type)))
+      if (!at_least_as_qualified_p (TREE_TYPE (type),
+                                   TREE_TYPE (exprtype)))
        goto fail;
       if (TYPE_MAIN_VARIANT (TREE_TYPE (type)) == void_type_node)
        break;
@@ -487,8 +488,6 @@ build_dynamic_cast_1 (type, expr)
   /* Apply trivial conversion T -> T& for dereferenced ptrs.  */
   if (ec == RECORD_TYPE)
     {
-      exprtype = build_type_variant (exprtype, TREE_READONLY (expr),
-                                    TREE_THIS_VOLATILE (expr));
       exprtype = build_reference_type (exprtype);
       expr = convert_to_reference (exprtype, expr, CONV_IMPLICIT,
                                   LOOKUP_NORMAL, NULL_TREE);
@@ -503,8 +502,8 @@ build_dynamic_cast_1 (type, expr)
        goto fail;
       if (TYPE_SIZE (complete_type (TREE_TYPE (exprtype))) == NULL_TREE)
        goto fail;
-      if (TREE_READONLY (TREE_TYPE (exprtype))
-         && ! TYPE_READONLY (TREE_TYPE (type)))
+      if (!at_least_as_qualified_p (TREE_TYPE (type),
+                                   TREE_TYPE (exprtype)))
        goto fail;
     }
 
@@ -766,7 +765,9 @@ expand_class_desc (tdecl, type)
       /* Actually const __user_type_info * */
       fields [0] = build_lang_field_decl
        (FIELD_DECL, NULL_TREE,
-        build_pointer_type (build_type_variant (type_info_type_node, 1, 0)));
+        build_pointer_type (build_qualified_type
+                            (type_info_type_node,
+                             TYPE_QUAL_CONST)));
       fields [1] = build_lang_field_decl
        (FIELD_DECL, NULL_TREE, unsigned_intSI_type_node);
       DECL_BIT_FIELD (fields[1]) = 1;
@@ -967,8 +968,7 @@ expand_attr_desc (tdecl, type)
   tree elems, t, fn;
   char *name = build_overload_name (type, 1, 1);
   tree name_string = combine_strings (build_string (strlen (name)+1, name));
-  tree attrval = build_int_2
-    (TYPE_READONLY (type) | TYPE_VOLATILE (type) * 2, 0);
+  tree attrval = build_int_2 (TYPE_QUALS (type), 0);
 
   expand_expr_stmt (get_typeid_1 (TYPE_MAIN_VARIANT (type)));
   t = decay_conversion (get_tinfo_var (TYPE_MAIN_VARIANT (type)));
@@ -1091,7 +1091,7 @@ synthesize_tinfo_fn (fndecl)
     expand_generic_desc (tdecl, type, "__rtti_func");
   else if (TREE_CODE (type) == ARRAY_TYPE)
     expand_generic_desc (tdecl, type, "__rtti_array");
-  else if (TYPE_VOLATILE (type) || TYPE_READONLY (type))
+  else if (TYPE_QUALS (type) != TYPE_UNQUALIFIED)
     expand_attr_desc (tdecl, type);
   else if (TREE_CODE (type) == POINTER_TYPE)
     {
index 50afeeebb87a507a23def6978280d63a956ad951..5af1c7d67c4e3900ed03457addda011b14446bc4 100644 (file)
@@ -1752,8 +1752,7 @@ covariant_return_p (brettype, drettype)
   if (! (TREE_CODE (brettype) == TREE_CODE (drettype)
         && (TREE_CODE (brettype) == POINTER_TYPE
             || TREE_CODE (brettype) == REFERENCE_TYPE)
-        && TYPE_READONLY (brettype) == TYPE_READONLY (drettype)
-        && TYPE_VOLATILE (brettype) == TYPE_VOLATILE (drettype)))
+        && TYPE_QUALS (brettype) == TYPE_QUALS (drettype)))
     return 0;
 
   if (! can_convert (brettype, drettype))
@@ -1849,15 +1848,19 @@ get_matching_virtual (binfo, fndecl, dtorp)
              btypes = TYPE_ARG_TYPES (TREE_TYPE (tmp));
              if (instptr_type == NULL_TREE)
                {
-                 if (compparms (TREE_CHAIN (btypes), dtypes, 3))
+                 if (compparms (TREE_CHAIN (btypes), dtypes))
                    /* Caller knows to give error in this case.  */
                    return tmp;
                  return NULL_TREE;
                }
 
-             if ((TYPE_READONLY (TREE_TYPE (TREE_VALUE (btypes)))
-                  == TYPE_READONLY (instptr_type))
-                 && compparms (TREE_CHAIN (btypes), TREE_CHAIN (dtypes), 3))
+             if (/* The first parameter is the `this' parameter,
+                    which has POINTER_TYPE, and we can therefore
+                    safely use TYPE_QUALS, rather than
+                    CP_TYPE_QUALS.  */
+                 (TYPE_QUALS (TREE_TYPE (TREE_VALUE (btypes)))
+                  == TYPE_QUALS (instptr_type))
+                 && compparms (TREE_CHAIN (btypes), TREE_CHAIN (dtypes)))
                {
                  tree brettype = TREE_TYPE (TREE_TYPE (tmp));
                  if (comptypes (brettype, drettype, 1))
@@ -2603,8 +2606,9 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
 
          TREE_READONLY (new_delta) = 0;
          TREE_TYPE (new_delta) = 
-           cp_build_type_variant (TREE_TYPE (new_delta), /*constp=*/0,
-                                  TYPE_VOLATILE (TREE_TYPE (new_delta)));
+           cp_build_qualified_type (TREE_TYPE (new_delta),
+                                    CP_TYPE_QUALS (TREE_TYPE (new_delta))
+                                    & ~TYPE_QUAL_CONST);
          expand_expr_stmt (build_modify_expr (new_delta, NOP_EXPR,
                                               old_delta));
        }
index 6f8d14dd19d27334dd5afffad9a44db54232a764..9a7b57f1ddd988c059347fc0d77b1ccccd7a5612 100644 (file)
@@ -40,11 +40,11 @@ static tree build_sptr_ref PROTO((tree));
 static tree build_member_function_pointer PROTO((tree));
 static void undo_casts PROTO((tree));
 static tree build_signature_pointer_or_reference_name
-       PROTO((tree, int, int, int));
+       PROTO((tree, int, int));
 static void build_signature_pointer_or_reference_decl
        PROTO((tree, tree));
 static tree build_signature_pointer_or_reference_type 
-       PROTO((tree, int, int, int));
+       PROTO((tree, int, int));
 static tree get_sigtable_name PROTO((tree, tree));
 static tree build_signature_table_constructor PROTO((tree, tree));
 static int match_method_types PROTO((tree, tree));
@@ -58,25 +58,31 @@ static int global_sigtable_name_counter;
    can use it's name in function name mangling.  */
 
 static tree
-build_signature_pointer_or_reference_name (to_type, constp, volatilep, refp)
+build_signature_pointer_or_reference_name (to_type, type_quals, refp)
      tree to_type;
-     int constp, volatilep, refp;
+     int type_quals;
+     int refp;
 {
   char * sig_name = TYPE_NAME_STRING (to_type);
-  int name_len = TYPE_NAME_LENGTH (to_type) + constp + volatilep;
+  int name_len = TYPE_NAME_LENGTH (to_type) + 3 /* Enough room for
+                                                  C,V,R.  */;
   char * name;
 
+  char *const_rep = (type_quals & TYPE_QUAL_CONST) ? "C" : "";
+  char *restrict_rep = (type_quals & TYPE_QUAL_RESTRICT) ? "R" : ""; 
+  char *volatile_rep = (type_quals & TYPE_QUAL_VOLATILE) ? "C" : "";
+
   if (refp)
     {
       name = (char *) alloca (name_len + sizeof (SIGNATURE_REFERENCE_NAME) +2);
       sprintf (name, SIGNATURE_REFERENCE_NAME_FORMAT,
-              constp ? "C" : "", volatilep ? "V": "", sig_name);
+              const_rep, volatile_rep, restrict_rep, sig_name);
     }
   else
     {
       name = (char *) alloca (name_len + sizeof (SIGNATURE_POINTER_NAME) + 2);
       sprintf (name, SIGNATURE_POINTER_NAME_FORMAT,
-              constp ? "C" : "", volatilep ? "V": "", sig_name);
+              const_rep, volatile_rep, restrict_rep, sig_name);
     }
   return get_identifier (name);
 }
@@ -98,21 +104,22 @@ build_signature_pointer_or_reference_decl (type, name)
   TREE_CHAIN (type) = decl;
 }
 
-/* Construct, lay out and return the type of pointers or references
-   to signature TO_TYPE.  If such a type has already been constructed,
-   reuse it. If CONSTP or VOLATILEP is specified, make the `optr' const
-   or volatile, respectively.   If we are constructing a const/volatile
-   type variant and the main type variant doesn't exist yet, it is built
-   as well.  If REFP is 1, we construct a signature reference, otherwise
-   a signature pointer is constructed.
+/* Construct, lay out and return the type of pointers or references to
+   signature TO_TYPE.  If such a type has already been constructed,
+   reuse it. If TYPE_QUALS are specified, qualify the `optr'.  If we
+   are constructing a const/volatile type variant and the main type
+   variant doesn't exist yet, it is built as well.  If REFP is 1, we
+   construct a signature reference, otherwise a signature pointer is
+   constructed.
 
    This function is a subroutine of `build_signature_pointer_type' and
    `build_signature_reference_type'.  */
 
 static tree
-build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp)
+build_signature_pointer_or_reference_type (to_type, type_quals, refp)
      tree to_type;
-     int constp, volatilep, refp;
+     int type_quals;
+     int refp;
 {
   register tree t, m;
   register struct obstack *ambient_obstack = current_obstack;
@@ -121,13 +128,11 @@ build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp)
   m = refp ? SIGNATURE_REFERENCE_TO (to_type) : SIGNATURE_POINTER_TO (to_type);
 
   /* If we don't have the main variant yet, construct it.  */
-  if (m == NULL_TREE
-      && (constp || volatilep))
-    m = build_signature_pointer_or_reference_type (to_type, 0, 0, refp);
+  if (m == NULL_TREE && type_quals != TYPE_UNQUALIFIED)
+    m = build_signature_pointer_or_reference_type (to_type, 
+                                                  TYPE_UNQUALIFIED, refp);
 
   /* Treat any nonzero argument as 1.  */
-  constp = !!constp;
-  volatilep = !!volatilep;
   refp = !!refp;
 
   /* If not generating auxiliary info, search the chain of variants to see
@@ -141,8 +146,8 @@ build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp)
 
   if (m && !flag_gen_aux_info)
     for (t = m; t; t = TYPE_NEXT_VARIANT (t))
-      if (constp == TYPE_READONLY (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (t))))
-         && volatilep == TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (t)))))
+      if (type_quals == CP_TYPE_QUALS (TREE_TYPE (TREE_TYPE
+                                                 (TYPE_FIELDS (t)))))
         return t;
 
   /* We need a new one.  If TO_TYPE is permanent, make this permanent too.  */
@@ -170,7 +175,7 @@ build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp)
 
   t = make_lang_type (RECORD_TYPE);
   {
-    tree obj_type = build_type_variant (void_type_node, constp, volatilep);
+    tree obj_type = build_qualified_type (void_type_node, type_quals);
     tree optr_type = build_pointer_type (obj_type);
     tree optr, sptr;
 
@@ -185,7 +190,8 @@ build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp)
       sptr = TREE_CHAIN (TYPE_FIELDS (m));
     else
       {
-       tree sig_tbl_type = cp_build_type_variant (to_type, 1, 0);
+       tree sig_tbl_type = 
+         cp_build_qualified_type (to_type, TYPE_QUAL_CONST);
        
        sptr = build_lang_field_decl (FIELD_DECL,
                                      get_identifier (SIGNATURE_SPTR_NAME),
@@ -207,8 +213,9 @@ build_signature_pointer_or_reference_type (to_type, constp, volatilep, refp)
   }
 
   {
-    tree name = build_signature_pointer_or_reference_name (to_type, constp,
-                                                          volatilep, refp);
+    tree name = build_signature_pointer_or_reference_name (to_type, 
+                                                          type_quals,
+                                                          refp);
 
     /* Build a DECL node for this type, so the debugger has access to it.  */
     build_signature_pointer_or_reference_decl (t, name);
@@ -255,8 +262,7 @@ build_signature_pointer_type (to_type)
 {
   return
     build_signature_pointer_or_reference_type (TYPE_MAIN_VARIANT (to_type),
-                                              TYPE_READONLY (to_type),
-                                              TYPE_VOLATILE (to_type), 0);
+                                              CP_TYPE_QUALS (to_type), 0);
 }
 
 /* Construct, lay out and return the type of pointers to signature TO_TYPE.  */
@@ -267,8 +273,7 @@ build_signature_reference_type (to_type)
 {
   return
     build_signature_pointer_or_reference_type (TYPE_MAIN_VARIANT (to_type),
-                                              TYPE_READONLY (to_type),
-                                              TYPE_VOLATILE (to_type), 1);
+                                              CP_TYPE_QUALS (to_type), 1);
 }
 
 /* Return the name of the signature table (as an IDENTIFIER_NODE)
@@ -420,8 +425,7 @@ match_method_types (sig_mtype, class_mtype)
 
     /* If a signature method's `this' is const or volatile, so has to be
        the corresponding class method's `this.'  */
-    if ((TYPE_READONLY (sig_this) && ! TYPE_READONLY (class_this))
-       || (TYPE_VOLATILE (sig_this) && ! TYPE_VOLATILE (class_this)))
+    if (!at_least_as_qualified_p (class_this, sig_this))
       return 0;
   }
 
@@ -429,7 +433,7 @@ match_method_types (sig_mtype, class_mtype)
   class_arg_types = TREE_CHAIN (class_arg_types);
 
   /* The number of arguments and the argument types have to be the same.  */
-  return compparms (sig_arg_types, class_arg_types, 3);
+  return compparms (sig_arg_types, class_arg_types);
 }
 
 /* Undo casts of opaque type variables to the RHS types.  */
@@ -884,7 +888,7 @@ build_signature_pointer_constructor (lhs, rhs)
     }
   else
     {
-      if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype))
+      if (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype))
          readonly_error (lhs, "assignment", 0);
 
       optr_expr = build_modify_expr (build_optr_ref (lhs), NOP_EXPR,
@@ -978,9 +982,8 @@ build_signature_method_call (function, parms)
     tree old_this = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (TREE_TYPE (pfn))));
 
     TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (TREE_TYPE (pfn))))
-      = build_type_variant (build_pointer_type (basetype),
-                           TYPE_READONLY (old_this),
-                           TYPE_VOLATILE (old_this));
+      = build_qualified_type (build_pointer_type (basetype),
+                             TYPE_QUALS (old_this));
 
     direct_call = build_function_call (pfn, new_parms);
 
index 15be5d798d2c8e00253f48c415b86a114b265814..db9f139b387b420f0c3c6bcf495e10294b9cab68 100644 (file)
@@ -442,14 +442,14 @@ build_cplus_array_type (elt_type, index_type)
      tree index_type;
 {
   tree t;
-  int constp = TYPE_READONLY (elt_type);
-  int volatilep = TYPE_VOLATILE (elt_type);
+  int type_quals = CP_TYPE_QUALS (elt_type);
+
   elt_type = TYPE_MAIN_VARIANT (elt_type);
 
   t = build_cplus_array_type_1 (elt_type, index_type);
 
-  if (constp || volatilep)
-    t = cp_build_type_variant (t, constp, volatilep);
+  if (type_quals != TYPE_UNQUALIFIED)
+    t = cp_build_qualified_type (t, type_quals);
 
   return t;
 }
@@ -458,21 +458,32 @@ build_cplus_array_type (elt_type, index_type)
    down to the element type of an array.  */
 
 tree
-cp_build_type_variant (type, constp, volatilep)
+cp_build_qualified_type (type, type_quals)
      tree type;
-     int constp, volatilep;
+     int type_quals;
 {
   if (type == error_mark_node)
     return type;
   
+  /* A restrict-qualified pointer type must be a pointer (or reference)
+     to object or incomplete type.  */
+  if ((type_quals & TYPE_QUAL_RESTRICT)
+      && (!POINTER_TYPE_P (type)
+         || TYPE_PTRMEM_P (type)
+         || TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE))
+    {
+      cp_error ("`%T' cannot be `restrict'-qualified", type);
+      type_quals &= ~TYPE_QUAL_RESTRICT;
+    }
+
   if (TREE_CODE (type) == ARRAY_TYPE)
     {
       tree real_main_variant = TYPE_MAIN_VARIANT (type);
 
       push_obstacks (TYPE_OBSTACK (real_main_variant),
                     TYPE_OBSTACK (real_main_variant));
-      type = build_cplus_array_type_1 (cp_build_type_variant
-                                      (TREE_TYPE (type), constp, volatilep),
+      type = build_cplus_array_type_1 (cp_build_qualified_type 
+                                      (TREE_TYPE (type), type_quals),
                                       TYPE_DOMAIN (type));
 
       /* TYPE must be on same obstack as REAL_MAIN_VARIANT.  If not,
@@ -489,7 +500,7 @@ cp_build_type_variant (type, constp, volatilep)
       pop_obstacks ();
       return type;
     }
-  return build_type_variant (type, constp, volatilep);
+  return build_qualified_type (type, type_quals);
 }
 
 /* Returns the canonical version of TYPE.  In other words, if TYPE is
@@ -501,8 +512,7 @@ tree
 canonical_type_variant (t)
      tree t;
 {
-  return cp_build_type_variant (TYPE_MAIN_VARIANT (t), CP_TYPE_READONLY (t),
-                               CP_TYPE_VOLATILE (t));
+  return cp_build_qualified_type (TYPE_MAIN_VARIANT (t), CP_TYPE_QUALS (t));
 }
 \f
 /* Add OFFSET to all base types of T.
@@ -1448,13 +1458,11 @@ build_exception_variant (type, raises)
      tree raises;
 {
   tree v = TYPE_MAIN_VARIANT (type);
-  int constp = TYPE_READONLY (type);
-  int volatilep = TYPE_VOLATILE (type);
+  int type_quals = TYPE_QUALS (type);
 
   for (; v; v = TYPE_NEXT_VARIANT (v))
     {
-      if (TYPE_READONLY (v) != constp
-         || TYPE_VOLATILE (v) != volatilep)
+      if (TYPE_QUALS (v) != type_quals)
        continue;
 
       /* @@ This should do set equality, not exact match.  */
@@ -1931,31 +1939,31 @@ mapcar (t, func)
 
     case POINTER_TYPE:
       tmp = build_pointer_type (mapcar (TREE_TYPE (t), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, TYPE_QUALS (t));
     case REFERENCE_TYPE:
       tmp = build_reference_type (mapcar (TREE_TYPE (t), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, TYPE_QUALS (t));
     case FUNCTION_TYPE:
       tmp = build_function_type (mapcar (TREE_TYPE (t), func),
                                 mapcar (TYPE_ARG_TYPES (t), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, TYPE_QUALS (t));
     case ARRAY_TYPE:
       tmp = build_cplus_array_type (mapcar (TREE_TYPE (t), func),
                                    mapcar (TYPE_DOMAIN (t), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, CP_TYPE_QUALS (t));
     case INTEGER_TYPE:
       tmp = build_index_type (mapcar (TYPE_MAX_VALUE (t), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, TYPE_QUALS (t));
     case OFFSET_TYPE:
       tmp = build_offset_type (mapcar (TYPE_OFFSET_BASETYPE (t), func),
                               mapcar (TREE_TYPE (t), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, TYPE_QUALS (t));
     case METHOD_TYPE:
       tmp = build_cplus_method_type
        (mapcar (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t))), func),
         mapcar (TREE_TYPE (t), func),
         mapcar (TREE_CHAIN (TYPE_ARG_TYPES (t)), func));
-      return cp_build_type_variant (tmp, TYPE_READONLY (t), TYPE_VOLATILE (t));
+      return cp_build_qualified_type (tmp, TYPE_QUALS (t));
 
     case COMPLEX_CST:
       t = copy_node (t);
index 7a74819038982702610498f403cad28777c3d603..254bc394d3def86867f574893f50d73bf7135fbc 100644 (file)
@@ -239,10 +239,9 @@ static tree
 qualify_type (type, like)
      tree type, like;
 {
-  int constflag = TYPE_READONLY (type) || TYPE_READONLY (like);
-  int volflag = TYPE_VOLATILE (type) || TYPE_VOLATILE (like);
   /* @@ Must do member pointers here.  */
-  return cp_build_type_variant (type, constflag, volflag);
+  return cp_build_qualified_type (type, (CP_TYPE_QUALS (type) 
+                                        | CP_TYPE_QUALS (like)));
 }
 \f
 /* Return the common type of two parameter lists.
@@ -498,10 +497,8 @@ common_type (t1, t2)
       {
        tree tt1 = TYPE_MAIN_VARIANT (TREE_TYPE (t1));
        tree tt2 = TYPE_MAIN_VARIANT (TREE_TYPE (t2));
-       int constp
-         = TYPE_READONLY (TREE_TYPE (t1)) || TYPE_READONLY (TREE_TYPE (t2));
-       int volatilep
-         = TYPE_VOLATILE (TREE_TYPE (t1)) || TYPE_VOLATILE (TREE_TYPE (t2));
+       int type_quals = (CP_TYPE_QUALS (TREE_TYPE (t1)) 
+                         | CP_TYPE_QUALS (TREE_TYPE (t2)));
        tree target;
 
        if (tt1 == tt2)
@@ -515,7 +512,7 @@ common_type (t1, t2)
        else
          target = common_type (tt1, tt2);
 
-       target = cp_build_type_variant (target, constp, volatilep);
+       target = cp_build_qualified_type (target, type_quals);
        if (code1 == POINTER_TYPE)
          t1 = build_pointer_type (target);
        else
@@ -776,9 +773,7 @@ comptypes (type1, type2, strict)
 
   /* Qualifiers must match.  */
 
-  if (TYPE_READONLY (t1) != TYPE_READONLY (t2))
-    return 0;
-  if (TYPE_VOLATILE (t1) != TYPE_VOLATILE (t2))
+  if (CP_TYPE_QUALS (t1) != CP_TYPE_QUALS (t2))
     return 0;
   if (strict > 0 && TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
     return 0;
@@ -845,8 +840,7 @@ comptypes (type1, type2, strict)
         but not vice-versa!  */
 
       val = (comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict)
-            && compparms (TYPE_ARG_TYPES (t1),
-                          TYPE_ARG_TYPES (t2), strict));
+            && compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)));
       break;
 
     case POINTER_TYPE:
@@ -888,7 +882,7 @@ comptypes (type1, type2, strict)
 
       val = ((TREE_TYPE (t1) == TREE_TYPE (t2)
              || comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict))
-            && compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2), strict));
+            && compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)));
       break;
 
     case ARRAY_TYPE:
@@ -920,17 +914,18 @@ comp_cv_target_types (ttl, ttr, nptrs)
      int nptrs;
 {
   int t;
-  int c = TYPE_READONLY (ttl) - TYPE_READONLY (ttr);
-  int v = TYPE_VOLATILE (ttl) - TYPE_VOLATILE (ttr);
 
-  if ((c > 0 && v < 0) || (c < 0 && v > 0))
+  if (!at_least_as_qualified_p (ttl, ttr)
+      && !at_least_as_qualified_p (ttr, ttl))
+    /* The qualifications are incomparable.  */
     return 0;
 
   if (TYPE_MAIN_VARIANT (ttl) == TYPE_MAIN_VARIANT (ttr))
-    return (c + v < 0) ? -1 : 1;
+    return more_qualified_p (ttr, ttl) ? -1 : 1;
 
   t = comp_target_types (ttl, ttr, nptrs);
-  if ((t == 1 && c + v >= 0) || (t == -1 && c + v <= 0))
+  if ((t == 1 && at_least_as_qualified_p (ttl, ttr)) 
+      || (t == -1 && at_least_as_qualified_p (ttr, ttl)))
     return t;
 
   return 0;
@@ -1115,6 +1110,29 @@ comp_target_types (ttl, ttr, nptrs)
   return 0;
 }
 
+/* Returns 1 if TYPE1 is at least as qualified as TYPE2.  */
+
+int
+at_least_as_qualified_p (type1, type2)
+     tree type1;
+     tree type2;
+{
+  /* All qualifiers for TYPE2 must also appear in TYPE1.  */
+  return ((CP_TYPE_QUALS (type1) & CP_TYPE_QUALS (type2))
+         == CP_TYPE_QUALS (type2));
+}
+
+/* Returns 1 if TYPE1 is more qualified than TYPE2.  */
+
+int
+more_qualified_p (type1, type2)
+     tree type1;
+     tree type2;
+{
+  return (CP_TYPE_QUALS (type1) != CP_TYPE_QUALS (type2)
+         && at_least_as_qualified_p (type1, type2));
+}
+
 /* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is
    more cv-qualified that TYPE1, and 0 otherwise.  */
 
@@ -1123,16 +1141,13 @@ comp_cv_qualification (type1, type2)
      tree type1;
      tree type2;
 {
-  if (TYPE_READONLY (type1) == TYPE_READONLY (type2)
-      && TYPE_VOLATILE (type1) == TYPE_VOLATILE (type2))
+  if (CP_TYPE_QUALS (type1) == CP_TYPE_QUALS (type2))
     return 0;
 
-  if (TYPE_READONLY (type1) >= TYPE_READONLY (type2)
-      && TYPE_VOLATILE (type1) >= TYPE_VOLATILE (type2))
+  if (at_least_as_qualified_p (type1, type2))
     return 1;
 
-  if (TYPE_READONLY (type2) >= TYPE_READONLY (type1)
-      && TYPE_VOLATILE (type2) >= TYPE_VOLATILE (type1))
+  else if (at_least_as_qualified_p (type2, type1))
     return -1;
 
   return 0;
@@ -1220,9 +1235,8 @@ common_base_type (tt1, tt2)
    STRICT is no longer used.  */
 
 int
-compparms (parms1, parms2, strict)
+compparms (parms1, parms2)
      tree parms1, parms2;
-     int strict ATTRIBUTE_UNUSED;
 {
   register tree t1 = parms1, t2 = parms2;
 
@@ -1774,11 +1788,8 @@ inline_conversion (exp)
      tree exp;
 {
   if (TREE_CODE (exp) == FUNCTION_DECL)
-    {
-      tree type = build_type_variant
-       (TREE_TYPE (exp), TREE_READONLY (exp), TREE_THIS_VOLATILE (exp));
-      exp = build1 (ADDR_EXPR, build_pointer_type (type), exp);
-    }
+    exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp);
+
   return exp;
 }
 
@@ -1802,7 +1813,7 @@ string_conv_p (totype, exp, warn)
 
   if (TREE_CODE (exp) != STRING_CST)
     {
-      t = build_pointer_type (build_type_variant (t, 1, 0));
+      t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST));
       if (! comptypes (TREE_TYPE (exp), t, 1))
        return 0;
       STRIP_NOPS (exp);
@@ -1947,8 +1958,7 @@ build_component_ref (datum, component, basetype_path, protect)
   register tree field = NULL;
   register tree ref;
   tree field_type;
-  int constp;
-  int volatilep;
+  int type_quals;
 
   if (processing_template_decl)
     return build_min_nt (COMPONENT_REF, datum, component);
@@ -2167,8 +2177,7 @@ build_component_ref (datum, component, basetype_path, protect)
     }
 
   /* Compute the type of the field, as described in [expr.ref].  */
-  constp = 0;
-  volatilep = 0;
+  type_quals = TYPE_UNQUALIFIED;
   field_type = TREE_TYPE (field);
   if (TREE_CODE (field_type) == REFERENCE_TYPE)
     /* The standard says that the type of the result should be the
@@ -2177,17 +2186,16 @@ build_component_ref (datum, component, basetype_path, protect)
     ;
   else
     {
+      type_quals = (CP_TYPE_QUALS (field_type)  
+                   | CP_TYPE_QUALS (TREE_TYPE (datum)));
+
       /* A field is const (volatile) if the enclosing object, or the
         field itself, is const (volatile).  But, a mutable field is
         not const, even within a const object.  */
-      constp = (!(DECL_LANG_SPECIFIC (field) 
-                 && DECL_MUTABLE_P (field))
-               && (TYPE_READONLY (field_type)
-                   || TYPE_READONLY (TREE_TYPE (datum))));
-      volatilep = (TYPE_VOLATILE (field_type)
-                  || TYPE_VOLATILE (TREE_TYPE (datum)));
+      if (DECL_LANG_SPECIFIC (field) && DECL_MUTABLE_P (field))
+       type_quals &= ~TYPE_QUAL_CONST;
       if (!IS_SIGNATURE (field_type))
-       field_type = cp_build_type_variant (field_type, constp, volatilep);
+       field_type = cp_build_qualified_type (field_type, type_quals);
     }
 
   ref = fold (build (COMPONENT_REF, field_type,
@@ -2196,9 +2204,9 @@ build_component_ref (datum, component, basetype_path, protect)
   /* Mark the expression const or volatile, as appropriate.  Even
      though we've dealt with the type above, we still have to mark the
      expression itself.  */
-  if (constp)
+  if (type_quals & TYPE_QUAL_CONST)
     TREE_READONLY (ref) = 1;
-  else if (volatilep)
+  else if (type_quals & TYPE_QUAL_VOLATILE)
     TREE_THIS_VOLATILE (ref) = 1;
 
   return ref;
@@ -2286,8 +2294,8 @@ build_indirect_ref (ptr, errorstring)
          /* We *must* set TREE_READONLY when dereferencing a pointer to const,
             so that we get the proper error message if the result is used
             to assign to.  Also, &* is supposed to be a no-op.  */
-         TREE_READONLY (ref) = TYPE_READONLY (t);
-         TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
+         TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
+         TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
          TREE_SIDE_EFFECTS (ref)
            = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer)
               || flag_volatile);
@@ -2406,11 +2414,11 @@ build_array_ref (array, idx)
       /* Array ref is const/volatile if the array elements are
         or if the array is..  */
       TREE_READONLY (rval)
-       |= (TYPE_READONLY (type) | TREE_READONLY (array));
+       |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array));
       TREE_SIDE_EFFECTS (rval)
-       |= (TYPE_VOLATILE (type) | TREE_SIDE_EFFECTS (array));
+       |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array));
       TREE_THIS_VOLATILE (rval)
-       |= (TYPE_VOLATILE (type) | TREE_THIS_VOLATILE (array));
+       |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array));
       return require_complete_type (fold (rval));
     }
 
@@ -4449,7 +4457,7 @@ build_unary_op (code, xarg, noconvert)
 
       /* Report something read-only.  */
 
-      if (TYPE_READONLY (TREE_TYPE (arg))
+      if (CP_TYPE_CONST_P (TREE_TYPE (arg))
          || TREE_READONLY (arg))
        readonly_error (arg, ((code == PREINCREMENT_EXPR
                               || code == POSTINCREMENT_EXPR)
@@ -5075,10 +5083,9 @@ build_conditional_expr (ifexp, op1, op2)
       else if (TREE_READONLY_DECL_P (op2))
        op2 = decl_constant_value (op2);
       if (type1 != type2)
-       type1 = cp_build_type_variant
-                       (type1,
-                        TYPE_READONLY (op1) || TYPE_READONLY (op2),
-                        TYPE_VOLATILE (op1) || TYPE_VOLATILE (op2));
+       type1 = cp_build_qualified_type
+         (type1, (CP_TYPE_QUALS (TREE_TYPE (op1)) 
+                  | CP_TYPE_QUALS (TREE_TYPE (op2))));
       /* ??? This is a kludge to deal with the fact that
         we don't sort out integers and enums properly, yet.  */
       result = fold (build (COND_EXPR, type1, ifexp, op1, op2));
@@ -5151,10 +5158,10 @@ build_conditional_expr (ifexp, op1, op2)
       if (type1 == type2)
        result_type = type1;
       else
-       result_type = cp_build_type_variant
-                       (type1,
-                        TREE_READONLY (op1) || TREE_READONLY (op2),
-                        TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
+       result_type = 
+         cp_build_qualified_type (type1,
+                                  CP_TYPE_QUALS (TREE_TYPE (op1))
+                                  | CP_TYPE_QUALS (TREE_TYPE (op2)));
     }
   else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE)
            && (code2 == INTEGER_TYPE || code2 == REAL_TYPE))
@@ -5247,7 +5254,10 @@ build_conditional_expr (ifexp, op1, op2)
          tree tmp;
          if (code2 == POINTER_TYPE)
              tmp = build_pointer_type
-               (build_type_variant (TREE_TYPE (type2), 1, 1));
+               (cp_build_qualified_type (TREE_TYPE (type2), 
+                                         TYPE_QUAL_CONST 
+                                         | TYPE_QUAL_VOLATILE
+                                         | TYPE_QUAL_RESTRICT));
          else
            tmp = type2;
          tmp = build_type_conversion (CONVERT_EXPR, tmp, op1, 0);
@@ -5269,7 +5279,10 @@ build_conditional_expr (ifexp, op1, op2)
          tree tmp;
          if (code1 == POINTER_TYPE)
            tmp = build_pointer_type
-             (build_type_variant (TREE_TYPE (type1), 1, 1));
+             (cp_build_qualified_type (TREE_TYPE (type1), 
+                                       TYPE_QUAL_CONST 
+                                       | TYPE_QUAL_VOLATILE
+                                       | TYPE_QUAL_RESTRICT));
          else
            tmp = type1;
 
@@ -5454,10 +5467,8 @@ build_static_cast (type, expr)
     {
       tree binfo;
       if (IS_AGGR_TYPE (TREE_TYPE (type)) && IS_AGGR_TYPE (TREE_TYPE (intype))
-         && (TYPE_READONLY (TREE_TYPE (type))
-             >= TYPE_READONLY (TREE_TYPE (intype)))
-         && (TYPE_VOLATILE (TREE_TYPE (type))
-             >= TYPE_VOLATILE (TREE_TYPE (intype)))
+         && at_least_as_qualified_p (TREE_TYPE (type),
+                                     TREE_TYPE (intype))
          && (binfo = get_binfo (TREE_TYPE (intype), TREE_TYPE (type), 0))
          && ! TREE_VIA_VIRTUAL (binfo))
        ok = 1;
@@ -5466,10 +5477,8 @@ build_static_cast (type, expr)
     {
       if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type))),
                     TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (intype))), 1)
-         && (TYPE_READONLY (TREE_TYPE (TREE_TYPE (type)))
-             >= TYPE_READONLY (TREE_TYPE (TREE_TYPE (intype))))
-         && (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (type)))
-             >= TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (intype))))
+         && at_least_as_qualified_p (TREE_TYPE (TREE_TYPE (type)),
+                                     TREE_TYPE (TREE_TYPE (intype)))
          && (binfo = get_binfo (TYPE_OFFSET_BASETYPE (TREE_TYPE (type)),
                                 TYPE_OFFSET_BASETYPE (TREE_TYPE (intype)), 0))
          && ! TREE_VIA_VIRTUAL (binfo))
@@ -5770,17 +5779,10 @@ build_c_cast (type, expr)
 
       if (warn_cast_qual
          && TREE_CODE (type) == POINTER_TYPE
-         && TREE_CODE (otype) == POINTER_TYPE)
-       {
-         /* For C++ we make these regular warnings, rather than
-            softening them into pedwarns.  */
-         if (TYPE_VOLATILE (TREE_TYPE (otype))
-             && ! TYPE_VOLATILE (TREE_TYPE (type)))
-           warning ("cast discards `volatile' from pointer target type");
-         if (TYPE_READONLY (TREE_TYPE (otype))
-             && ! TYPE_READONLY (TREE_TYPE (type)))
-           warning ("cast discards `const' from pointer target type");
-       }
+         && TREE_CODE (otype) == POINTER_TYPE
+         && !at_least_as_qualified_p (TREE_TYPE (type),
+                                      TREE_TYPE (otype)))
+       cp_warning ("cast discards qualifiers from pointer target type");
 
       /* Warn about possible alignment problems.  */
       if (STRICT_ALIGNMENT && warn_cast_align
@@ -6067,7 +6069,7 @@ build_modify_expr (lhs, modifycode, rhs)
       && ! (TREE_CODE (lhs) == COMPONENT_REF
            && (IS_SIGNATURE_POINTER (TREE_TYPE (TREE_OPERAND (lhs, 0)))
                || IS_SIGNATURE_REFERENCE (TREE_TYPE (TREE_OPERAND (lhs, 0)))))
-      && (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
+      && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
          /* Functions are not modifiable, even though they are
             lvalues.  */
          || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
@@ -6075,7 +6077,7 @@ build_modify_expr (lhs, modifycode, rhs)
               || TREE_CODE (lhstype) == UNION_TYPE)
              && C_TYPE_FIELDS_READONLY (lhstype))
          || (TREE_CODE (lhstype) == REFERENCE_TYPE
-             && TYPE_READONLY (TREE_TYPE (lhstype)))))
+             && CP_TYPE_CONST_P (TREE_TYPE (lhstype)))))
     readonly_error (lhs, "assignment", 0);
 
   /* If storing into a structure or union member,
@@ -6751,22 +6753,13 @@ convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
          if (binfo == 0)
            return error_not_base_type (ttl, ttr);
 
-         if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
+         if (!at_least_as_qualified_p (ttl, ttr))
            {
              if (fndecl)
-               cp_error ("passing `%T' as argument %P of `%D' discards const",
+               cp_error ("passing `%T' as argument %P of `%D' discards qualifiers",
                          rhstype, parmnum, fndecl);
              else
-               cp_error ("%s to `%T' from `%T' discards const",
-                         errtype, type, rhstype);
-           }
-         if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
-           {
-             if (fndecl)
-               cp_error ("passing `%T' as argument %P of `%D' discards volatile",
-                         rhstype, parmnum, fndecl);
-             else
-               cp_error ("%s to `%T' from `%T' discards volatile",
+               cp_error ("%s to `%T' from `%T' discards qualifiers",
                          errtype, type, rhstype);
            }
        }
@@ -6815,24 +6808,15 @@ convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
                  error ("%s between pointer to members converting across virtual baseclasses", errtype);
                  return error_mark_node;
                }
-             else if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
+             else if (!at_least_as_qualified_p (ttl, ttr))
                {
                  if (string_conv_p (type, rhs, 1))
                    /* converting from string constant to char *, OK.  */;
                  else if (fndecl)
-                   cp_error ("passing `%T' as argument %P of `%D' discards const",
+                   cp_error ("passing `%T' as argument %P of `%D' discards qualifiers",
                              rhstype, parmnum, fndecl);
                  else
-                   cp_error ("%s to `%T' from `%T' discards const",
-                               errtype, type, rhstype);
-               }
-             else if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
-               {
-                 if (fndecl)
-                   cp_error ("passing `%T' as argument %P of `%D' discards volatile",
-                               rhstype, parmnum, fndecl);
-                 else
-                   cp_error ("%s to `%T' from `%T' discards volatile",
+                   cp_error ("%s to `%T' from `%T' discards qualifiers",
                                errtype, type, rhstype);
                }
              else if (TREE_CODE (ttl) == TREE_CODE (ttr)
@@ -6849,7 +6833,8 @@ convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
        }
       else
        {
-         int add_quals = 0, const_parity = 0, volatile_parity = 0;
+         int add_quals = 0;
+         int drops_quals = 0;
          int left_const = 1;
          int unsigned_parity;
          int nptrs = 0;
@@ -6858,12 +6843,10 @@ convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
          for (; ; ttl = TREE_TYPE (ttl), ttr = TREE_TYPE (ttr))
            {
              nptrs -= 1;
-             const_parity |= (TYPE_READONLY (ttl) < TYPE_READONLY (ttr));
-             volatile_parity |= (TYPE_VOLATILE (ttl) < TYPE_VOLATILE (ttr));
+             drops_quals |= !at_least_as_qualified_p (ttl, ttr);
 
              if (! left_const
-                 && (TYPE_READONLY (ttl) > TYPE_READONLY (ttr)
-                     || TYPE_VOLATILE (ttl) > TYPE_VOLATILE (ttr)))
+                 && !at_least_as_qualified_p (ttr, ttl))
                add_quals = 1;
              left_const &= TYPE_READONLY (ttl);
 
@@ -6891,24 +6874,15 @@ convert_for_assignment (type, rhs, errtype, fndecl, parmnum)
                    cp_pedwarn ("%s to `%T' from `%T' adds cv-quals without intervening `const'",
                                errtype, type, rhstype);
                }
-             if (const_parity)
+             if (drops_quals)
                {
                  if (fndecl)
-                   cp_error ("passing `%T' as argument %P of `%D' discards const",
+                   cp_error ("passing `%T' as argument %P of `%D' discards qualifiers",
                              rhstype, parmnum, fndecl);
                  else
-                   cp_error ("%s to `%T' from `%T' discards const",
+                   cp_error ("%s to `%T' from `%T' discards qualifiers",
                                errtype, type, rhstype);
                }
-             if (volatile_parity)
-               {
-                 if (fndecl)
-                   cp_error ("passing `%T' as argument %P of `%D' discards volatile",
-                             rhstype, parmnum, fndecl);
-                 else
-                   cp_error ("%s to `%T' from `%T' discards volatile",
-                             errtype, type, rhstype);
-               }
              if (unsigned_parity > 0)
                {
                  if (fndecl)
@@ -7215,7 +7189,7 @@ c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
       else
        {
          tree type = TREE_TYPE (o[i]);
-         if (TYPE_READONLY (type)
+         if (CP_TYPE_CONST_P (type)
              || ((TREE_CODE (type) == RECORD_TYPE
                   || TREE_CODE (type) == UNION_TYPE)
                  && C_TYPE_FIELDS_READONLY (type)))
@@ -7532,12 +7506,10 @@ comp_ptr_ttypes_real (to, from, constp)
         so the usual checks are not appropriate.  */
       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
        {
-         if (TYPE_READONLY (from) > TYPE_READONLY (to)
-             || TYPE_VOLATILE (from) > TYPE_VOLATILE (to))
+         if (!at_least_as_qualified_p (to, from))
            return 0;
 
-         if (TYPE_READONLY (to) > TYPE_READONLY (from)
-             || TYPE_VOLATILE (to) > TYPE_VOLATILE (from))
+         if (!at_least_as_qualified_p (from, to))
            {
              if (constp == 0)
                return 0;
@@ -7633,13 +7605,11 @@ comp_ptr_ttypes_reinterpret (to, from)
         so the usual checks are not appropriate.  */
       if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
        {
-         if (TYPE_READONLY (from) > TYPE_READONLY (to)
-             || TYPE_VOLATILE (from) > TYPE_VOLATILE (to))
+         if (!at_least_as_qualified_p (to, from))
            return 0;
 
          if (! constp
-             && (TYPE_READONLY (to) > TYPE_READONLY (from)
-                 || TYPE_VOLATILE (to) > TYPE_READONLY (from)))
+             && !at_least_as_qualified_p (from, to))
            return 0;
          constp &= TYPE_READONLY (to);
        }
@@ -7648,3 +7618,15 @@ comp_ptr_ttypes_reinterpret (to, from)
        return 1;
     }
 }
+
+/* Returns the type-qualifier set corresponding to TYPE.  */
+
+int
+cp_type_quals (type)
+     tree type;
+{
+  while (TREE_CODE (type) == ARRAY_TYPE)
+    type = TREE_TYPE (type);
+
+  return TYPE_QUALS (type);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.other/const1.C b/gcc/testsuite/g++.old-deja/g++.other/const1.C
new file mode 100644 (file)
index 0000000..7c26da1
--- /dev/null
@@ -0,0 +1,9 @@
+// Build don't link:
+
+struct S
+{
+  void f()
+    {
+      const int i; // ERROR - uninitialized const
+    }
+};
diff --git a/gcc/testsuite/g++.old-deja/g++.other/dcast1.C b/gcc/testsuite/g++.old-deja/g++.other/dcast1.C
new file mode 100644 (file)
index 0000000..d9dd657
--- /dev/null
@@ -0,0 +1,15 @@
+// Build don't link:
+
+class C {
+public:
+  virtual void f();
+};
+
+extern volatile C* cp;
+extern volatile C& cr;
+
+void f ()
+{
+  dynamic_cast<void*>(cp); // ERROR - cannot dynamic_cast
+  dynamic_cast<C&>(cr); // ERROR - cannot dynamic_cast
+}
index 1771fe4c3fa3304b5976170c383a6cff835cf5eb..80df498e6e164b30753e2a05c73871d184e6b38f 100644 (file)
@@ -7,5 +7,5 @@
 void
 f()
 {
-  const int var [ 10 ]; // ERROR - missing initializer - XFAIL *-*-*
+  const int var [ 10 ]; // ERROR - missing initializer 
 }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/virtual2.C b/gcc/testsuite/g++.old-deja/g++.other/virtual2.C
new file mode 100644 (file)
index 0000000..a3ebbcd
--- /dev/null
@@ -0,0 +1,19 @@
+struct B
+{
+  virtual int f() volatile
+    { return 0; }
+};
+
+
+struct D : public B 
+{
+  virtual int f()
+    { return 1; }
+};
+
+int main()
+{
+  volatile D d;
+  volatile B& b = d;
+  return b.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.other/virtual3.C b/gcc/testsuite/g++.old-deja/g++.other/virtual3.C
new file mode 100644 (file)
index 0000000..b9a7719
--- /dev/null
@@ -0,0 +1,24 @@
+struct B
+{
+  virtual int f() volatile
+    { return 1; }
+};
+
+struct D : public B 
+{
+  int f() 
+    { return 0; }
+};
+
+struct D2 : public D
+{
+  int f()
+    { return 2; } 
+};
+
+int main()
+{
+  D2 d2;
+  D& d = d2;
+  return d.f();
+}
index 35e49384ad2a604bc4e35bc5c89adb8d0906a2b5..4a4a12965e5575be4ef1abafa0b7cde8feed262d 100644 (file)
@@ -126,8 +126,7 @@ struct work_stuff
   int constructor;
   int destructor;
   int static_type;     /* A static member function */
-  int const_type;      /* A const member function */
-  int volatile_type;    /* A volatile member function */
+  int type_quals;       /* The type qualifiers.  */
   int dllimported;     /* Symbol imported from a PE DLL */
   char **tmpl_argvec;   /* Template function arguments. */
   int ntmpl_args;       /* The number of template function arguments. */
@@ -392,6 +391,24 @@ static int
 demangle_template_value_parm PARAMS ((struct work_stuff*, const char**, 
                                      string*, type_kind_t));
 
+/* There is a TYPE_QUAL value for each type qualifier.  They can be
+   combined by bitwise-or to form the complete set of qualifiers for a
+   type.  */
+
+#define TYPE_UNQUALIFIED   0x0
+#define TYPE_QUAL_CONST    0x1
+#define TYPE_QUAL_VOLATILE 0x2
+#define TYPE_QUAL_RESTRICT 0x4
+
+static int 
+code_for_qualifier PARAMS ((char));
+
+static const char*
+qualifier_string PARAMS ((int));
+
+static const char*
+demangle_qualifier PARAMS ((char));
+
 /*  Translate count to integer, consuming tokens in the process.
     Conversion terminates on the first non-digit character.
     Trying to consume something that isn't a count results in
@@ -448,6 +465,84 @@ consume_count_with_underscores (mangled)
   return idx;
 }
 
+/* C is the code for a type-qualifier.  Return the TYPE_QUAL
+   corresponding to this qualifier.  */
+
+static int
+code_for_qualifier (c)
+     char c;
+{
+  switch (c) 
+    {
+    case 'C':
+      return TYPE_QUAL_CONST;
+
+    case 'V':
+      return TYPE_QUAL_VOLATILE;
+      
+    case 'u':
+      return TYPE_QUAL_RESTRICT;
+
+    default:
+      break;
+    }
+
+  /* C was an invalid qualifier.  */
+  abort ();
+}
+
+/* Return the string corresponding to the qualifiers given by
+   TYPE_QUALS.  */
+
+static const char*
+qualifier_string (type_quals)
+     int type_quals;
+{
+  switch (type_quals)
+    {
+    case TYPE_UNQUALIFIED:
+      return "";
+
+    case TYPE_QUAL_CONST:
+      return "const";
+
+    case TYPE_QUAL_VOLATILE:
+      return "volatile";
+
+    case TYPE_QUAL_RESTRICT:
+      return "__restrict";
+
+    case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE:
+      return "const volatile";
+
+    case TYPE_QUAL_CONST | TYPE_QUAL_RESTRICT:
+      return "const __restrict";
+
+    case TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
+      return "volatile __restrict";
+
+    case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
+      return "const volatile __restrict";
+
+    default:
+      break;
+    }
+
+  /* TYPE_QUALS was an invalid qualifier set.  */
+  abort ();
+}
+
+/* C is the code for a type-qualifier.  Return the string
+   corresponding to this qualifier.  This function should only be
+   called with a valid qualifier code.  */
+
+static const char*
+demangle_qualifier (c)
+     char c;
+{
+  return qualifier_string (code_for_qualifier (c));
+}
+
 int
 cplus_demangle_opname (opname, result, options)
      const char *opname;
@@ -664,15 +759,12 @@ internal_cplus_demangle (work, mangled)
   int success = 0;
   char *demangled = NULL;
   int s1,s2,s3,s4;
-  int saved_volatile_type;
   s1 = work->constructor;
   s2 = work->destructor;
   s3 = work->static_type;
-  s4 = work->const_type;
-  saved_volatile_type = work->volatile_type;
+  s4 = work->type_quals;
   work->constructor = work->destructor = 0;
-  work->static_type = work->const_type = 0;
-  work->volatile_type = 0;
+  work->type_quals = TYPE_UNQUALIFIED;
   work->dllimported = 0;
 
   if ((mangled != NULL) && (*mangled != '\0'))
@@ -718,8 +810,7 @@ internal_cplus_demangle (work, mangled)
   work->constructor = s1;
   work->destructor = s2;
   work->static_type = s3;
-  work->const_type = s4;
-  work->volatile_type = saved_volatile_type;
+  work->type_quals = s4;
   return (demangled);
 }
 
@@ -871,10 +962,8 @@ demangle_signature (work, mangled, declp)
 
        case 'C':
        case 'V':
-         if (**mangled == 'C')
-           work -> const_type = 1;
-         else
-           work->volatile_type = 1;
+       case 'u':
+         work->type_quals |= code_for_qualifier (**mangled);
 
          /* a qualified member function */
          if (oldmangled == NULL)
@@ -1056,12 +1145,16 @@ demangle_signature (work, mangled, declp)
          success = demangle_args (work, mangled, declp);
        }
     }
-  if (success && work -> static_type && PRINT_ARG_TYPES)
-    string_append (declp, " static");
-  if (success && work -> const_type && PRINT_ARG_TYPES)
-    string_append (declp, " const");
-  else if (success && work->volatile_type && PRINT_ARG_TYPES)
-    string_append (declp, " volatile");
+  if (success && PRINT_ARG_TYPES)
+    {
+      if (work->static_type)
+       string_append (declp, " static");
+      if (work->type_quals != TYPE_UNQUALIFIED)
+       {
+         APPEND_BLANK (declp);
+         string_append (declp, qualifier_string (work->type_quals));
+       }
+    }
 
   return (success);
 }
@@ -1345,6 +1438,8 @@ demangle_template_value_parm (work, mangled, s, tk)
          p [symbol_len] = '\0';
          q = internal_cplus_demangle (work, p);
          string_appendn (s, "&", 1);
+         /* FIXME: Pointer-to-member constants should get a
+                   qualifying class name here.  */
          if (q)
            {
              string_append (s, q);
@@ -2481,8 +2576,7 @@ do_type (work, mangled, result)
   int success;
   string decl;
   const char *remembered_type;
-  int constp;
-  int volatilep;
+  int type_quals;
   string btype;
   type_kind_t tk = tk_none;
 
@@ -2574,8 +2668,7 @@ do_type (work, mangled, result)
        case 'M':
        case 'O':
          {
-           constp = 0;
-           volatilep = 0;
+           type_quals = TYPE_UNQUALIFIED;
 
            member = **mangled == 'M';
            (*mangled)++;
@@ -2615,16 +2708,19 @@ do_type (work, mangled, result)
            string_prepend (&decl, "(");
            if (member)
              {
-               if (**mangled == 'C')
-                 {
-                   (*mangled)++;
-                   constp = 1;
-                 }
-               if (**mangled == 'V')
+               switch (**mangled)
                  {
+                 case 'C':
+                 case 'V':
+                 case 'u':
+                   type_quals |= code_for_qualifier (**mangled);
                    (*mangled)++;
-                   volatilep = 1;
+                   break;
+
+                 default:
+                   break;
                  }
+
                if (*(*mangled)++ != 'F')
                  {
                    success = 0;
@@ -2642,15 +2738,10 @@ do_type (work, mangled, result)
              {
                break;
              }
-           if (constp)
+           if (type_quals != TYPE_UNQUALIFIED)
              {
                APPEND_BLANK (&decl);
-               string_append (&decl, "const");
-             }
-           if (volatilep)
-             {
-               APPEND_BLANK (&decl);
-               string_append (&decl, "volatile");
+               string_append (&decl, qualifier_string (type_quals));
              }
            break;
          }
@@ -2660,18 +2751,13 @@ do_type (work, mangled, result)
 
        case 'C':
        case 'V':
-         /*
-           if ((*mangled)[1] == 'P')
-           {
-           */
+       case 'u':
          if (PRINT_ANSI_QUALIFIERS)
            {
              if (!STRING_EMPTY (&decl))
-               {
-                 string_prepend (&decl, " ");
-               }
-             string_prepend (&decl, 
-                             (**mangled) == 'C' ? "const" : "volatile");
+               string_prepend (&decl, " ");
+
+             string_prepend (&decl, demangle_qualifier (**mangled));
            }
          (*mangled)++;
          break;
@@ -2794,11 +2880,13 @@ demangle_fund_type (work, mangled, result)
       switch (**mangled)
        {
        case 'C':
+       case 'V':
+       case 'u':
          (*mangled)++;
          if (PRINT_ANSI_QUALIFIERS)
            {
              APPEND_BLANK (result);
-             string_append (result, "const");
+             string_append (result, demangle_qualifier (**mangled));
            }
          break;
        case 'U':
@@ -2811,14 +2899,6 @@ demangle_fund_type (work, mangled, result)
          APPEND_BLANK (result);
          string_append (result, "signed");
          break;
-       case 'V':
-         (*mangled)++;
-         if (PRINT_ANSI_QUALIFIERS)
-           {
-             APPEND_BLANK (result);
-             string_append (result, "volatile");
-           }
-         break;
        case 'J':
          (*mangled)++;
          APPEND_BLANK (result);