]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorJason Merrill <jason@gcc.gnu.org>
Sun, 28 Sep 1997 19:16:59 +0000 (15:16 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 28 Sep 1997 19:16:59 +0000 (15:16 -0400)
Sat Sep 27 16:22:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

* friend.c (do_friend): Disable injection for all template-derived
  decls.
* decl2.c (lang_decode_option): Handle -fguiding-decls.
* parse.y (notype_template_declarator): New nonterminal.
(direct_notype_declarator): Use it.
(complex_direct_notype_declarator): Likewise.
(object_template_id): Accept any kind of identifier after TEMPLATE.
(notype_qualified_id): Don't add template declarators here.

Sat Sep 27 16:21:58 1997  Mark Mitchell  <mmitchell@usa.net>

        * call.c (add_template_candidate): Add explicit_targs parameter.
        (build_scoped_method_call): Use it.
        (build_overload_call_real): Likewise.
        (build_user_type_conversion_1): Likewise.
        (build_new_function_call): Likewise.
        (build_object_call): Likewise.
        (build_new_op): Likewise.
        (build_new_method_call): Likewise.
        (build_new_function_call): Handle TEMPLATE_ID_EXPR.
        (build_new_method_call): Likewise.

        * class.c (finish_struct_methods): Add specialization pass to
        determine which methods were specializing which other methods.
        (instantiate_type): Handle TEMPLATE_ID_EXPR.

        * cp-tree.def (TEMPLATE_ID_EXPR): New tree code.

        * cp-tree.h (name_mangling_version): New variable.
(flag_guiding_decls): Likewise.
        (build_template_decl_overload): New function.
        (begin_specialization): Likewise.
        (reset_specialization): Likewise.
        (end_specialization): Likewise.
        (determine_explicit_specialization): Likewise.
        (check_explicit_specialization): Likewise.
        (lookup_template_function): Likewise.
        (fn_type_unification): Add explicit_targs parameter.
        (type_unification): Likewise.

        * decl.c (duplicate_decls): Add smarts for explicit
        specializations.
        (grokdeclarator): Handle TEMPLATE_ID_EXPR, and function
        specializations.
        (grokfndecl): Call check_explicit_specialization.

        * decl2.c (lang_decode_option): Handle -fname-mangling-version.
        (build_expr_from_tree): Handle TEMPLATE_ID_EXPR.
        (check_classfn): Handle specializations.

        * error.c (dump_function_name): Print specialization arguments.

* friend.c (do_friend): Don't call pushdecl for template
        instantiations.

        * init.c (build_member_call): Handle TEMPLATE_ID_EXPR.

        * lang-options.h: Add -fname-mangling-version, -fguiding-decls,
and -fno-guiding-decls.

        * lex.c (identifier_type): Return PFUNCNAME for template function
        names.

        * method.c (build_decl_overload_real): New function.
        (build_template_parm_names): New function.
        (build_overload_identifier): Use it.
        (build_underscore_int): New function.
        (build_overload_int): Use it.  Add levels for template
        parameters.
        (build_overload_name): Likewise.  Also, handle TYPENAME_TYPEs.
        (build_overload_nested_names): Handle template type parameters.
        (build_template_decl_overload): New function.

        * parse.y (YYSTYPE): New ntype member.
        (nested_name_specifier): Use it.
        (nested_name_specifier_1): Likewise.
        (PFUNCNAME): New token.
        (template_id, object_template_id): New non-terminals.
        (template_parm_list): Note specializations.
        (template_def): Likewise.
        (structsp): Likewise.
        (fn.def2): Handle member template specializations.
        (component_decl_1): Likewise.
        (direct_notype_declarator): Handle template-ids.
        (component_decl_1): Likewise.
        (direct_notype_declarator): Handle template-ids.
        (primary): Handle TEMPLATE_ID_EXPR, and template-ids.

        * pt.c (processing_specializations): New variable.
        (template_header_count): Likewise.
        (type_unification_real): New function.
        (processing_explicit_specialization): Likewise.
        (note_template_header): Likewise.
        (is_member_template): Handle specializations.
        (end_template_decl): Call reset_specialization.
        (push_template_decl): Handle member template specializations.
        (tsubst): Likewise.
        (tsubst_copy): Handle TEMPLATE_ID_EXPR.
        (instantiate_template): Handle specializations.
        (instantiate_decl): Likewise.
        (fn_type_unification): Handle explicit_targs.
        (type_unification): Likewise.  Allow incomplete unification
        without an error message, if allow_incomplete.
        (get_bindings): Use new calling sequence for fn_type_unification.

        * spew.c (yylex): Handle PFUNCNAME.

        * tree.c (is_overloaded_fn): Handle TEMPLATE_ID_EXPR.
        (really_overloaded_fn): Likewise.
        (get_first_fn): Handle function templates.

        * typeck.c (build_x_function_call): Use really_overloaded_fn.
        Handle TEMPLATE_ID_EXPR.
        (build_x_unary_op): Likewise.
        (build_unary_op): Likewise.
        (mark_addressable): Templates whose address is taken are marked
        as used.

From-SVN: r15774

22 files changed:
gcc/cp/ChangeLog
gcc/cp/NEWS
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.def
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/error.c
gcc/cp/friend.c
gcc/cp/gxxint.texi
gcc/cp/init.c
gcc/cp/lang-options.h
gcc/cp/lex.c
gcc/cp/method.c
gcc/cp/parse.c
gcc/cp/parse.h
gcc/cp/parse.y
gcc/cp/pt.c
gcc/cp/spew.c
gcc/cp/tree.c
gcc/cp/typeck.c

index b9a7fa591ba78b725ea1a2abd33d5d5183a9c319..89e98083b636eaa6088b3f9ca7a754a483b74802 100644 (file)
@@ -1,3 +1,123 @@
+Sat Sep 27 16:22:48 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * friend.c (do_friend): Disable injection for all template-derived
+       decls.
+       * decl2.c (lang_decode_option): Handle -fguiding-decls.
+       * parse.y (notype_template_declarator): New nonterminal.
+       (direct_notype_declarator): Use it.
+       (complex_direct_notype_declarator): Likewise.
+       (object_template_id): Accept any kind of identifier after TEMPLATE.
+       (notype_qualified_id): Don't add template declarators here.
+
+Sat Sep 27 16:21:58 1997  Mark Mitchell  <mmitchell@usa.net>
+
+        * call.c (add_template_candidate): Add explicit_targs parameter.
+        (build_scoped_method_call): Use it.
+        (build_overload_call_real): Likewise.
+        (build_user_type_conversion_1): Likewise.
+        (build_new_function_call): Likewise.
+        (build_object_call): Likewise.
+        (build_new_op): Likewise.
+        (build_new_method_call): Likewise.
+        (build_new_function_call): Handle TEMPLATE_ID_EXPR.
+        (build_new_method_call): Likewise.
+
+        * class.c (finish_struct_methods): Add specialization pass to
+        determine which methods were specializing which other methods.
+        (instantiate_type): Handle TEMPLATE_ID_EXPR.
+
+        * cp-tree.def (TEMPLATE_ID_EXPR): New tree code.
+
+        * cp-tree.h (name_mangling_version): New variable.
+       (flag_guiding_decls): Likewise.
+        (build_template_decl_overload): New function.
+        (begin_specialization): Likewise.
+        (reset_specialization): Likewise.
+        (end_specialization): Likewise.
+        (determine_explicit_specialization): Likewise.
+        (check_explicit_specialization): Likewise.
+        (lookup_template_function): Likewise.
+        (fn_type_unification): Add explicit_targs parameter.
+        (type_unification): Likewise.
+
+        * decl.c (duplicate_decls): Add smarts for explicit
+        specializations.
+        (grokdeclarator): Handle TEMPLATE_ID_EXPR, and function
+        specializations.
+        (grokfndecl): Call check_explicit_specialization.
+
+        * decl2.c (lang_decode_option): Handle -fname-mangling-version.
+        (build_expr_from_tree): Handle TEMPLATE_ID_EXPR.
+        (check_classfn): Handle specializations.
+
+        * error.c (dump_function_name): Print specialization arguments.
+
+       * friend.c (do_friend): Don't call pushdecl for template 
+        instantiations. 
+
+        * init.c (build_member_call): Handle TEMPLATE_ID_EXPR.
+
+        * lang-options.h: Add -fname-mangling-version, -fguiding-decls, 
+       and -fno-guiding-decls.
+
+        * lex.c (identifier_type): Return PFUNCNAME for template function
+        names.
+
+        * method.c (build_decl_overload_real): New function.
+        (build_template_parm_names): New function.
+        (build_overload_identifier): Use it.
+        (build_underscore_int): New function.
+        (build_overload_int): Use it.  Add levels for template
+        parameters.
+        (build_overload_name): Likewise.  Also, handle TYPENAME_TYPEs.
+        (build_overload_nested_names): Handle template type parameters.
+        (build_template_decl_overload): New function.
+
+        * parse.y (YYSTYPE): New ntype member.
+        (nested_name_specifier): Use it.
+        (nested_name_specifier_1): Likewise.
+        (PFUNCNAME): New token.
+        (template_id, object_template_id): New non-terminals.
+        (template_parm_list): Note specializations.
+        (template_def): Likewise.
+        (structsp): Likewise.
+        (fn.def2): Handle member template specializations.
+        (component_decl_1): Likewise.
+        (direct_notype_declarator): Handle template-ids.
+        (component_decl_1): Likewise.
+        (direct_notype_declarator): Handle template-ids.
+        (primary): Handle TEMPLATE_ID_EXPR, and template-ids.
+
+        * pt.c (processing_specializations): New variable.
+        (template_header_count): Likewise.
+        (type_unification_real): New function.
+        (processing_explicit_specialization): Likewise.
+        (note_template_header): Likewise.
+        (is_member_template): Handle specializations.
+        (end_template_decl): Call reset_specialization.
+        (push_template_decl): Handle member template specializations.
+        (tsubst): Likewise.
+        (tsubst_copy): Handle TEMPLATE_ID_EXPR.
+        (instantiate_template): Handle specializations.
+        (instantiate_decl): Likewise.
+        (fn_type_unification): Handle explicit_targs.
+        (type_unification): Likewise.  Allow incomplete unification
+        without an error message, if allow_incomplete.
+        (get_bindings): Use new calling sequence for fn_type_unification.
+
+        * spew.c (yylex): Handle PFUNCNAME.
+
+        * tree.c (is_overloaded_fn): Handle TEMPLATE_ID_EXPR.
+        (really_overloaded_fn): Likewise.
+        (get_first_fn): Handle function templates.
+
+        * typeck.c (build_x_function_call): Use really_overloaded_fn.
+        Handle TEMPLATE_ID_EXPR.
+        (build_x_unary_op): Likewise.
+        (build_unary_op): Likewise.
+        (mark_addressable): Templates whose address is taken are marked  
+        as used. 
+
 1997-09-25  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
        * decl.c (init_decl_processing): Declare __builtin_constant_p as
index 3d53e1c36bd723fda9743a278e658fafde766f86..ff2d5124f52764ed281a2193e8c60fdfb5cbe471 100644 (file)
      + Static data member templates work.
      + Member function templates are now supported.
      + Partial specialization of class templates is now supported.
-     + The new 'template <>' specialization syntax is now accepted and
-       ignored.
-     + Explicit instantiation of template constructors and destructors is
-       now supported.  For instance:
-
-            template A<int>::A(const A&);
+     + Explicit specification of template parameters to function templates
+       is now supported.
 
   Things you may need to fix in your code:
 
 
             http://www.cygnus.com/misc/wp/dec96pub/template.html#temp.res
 
+     + Guiding declarations are no longer supported.  Function declarations, 
+       including friend declarations, do not refer to template instantiations.
+       You can restore the old behavior with -fguiding-decls until you fix
+       your code.
+
   Other features:
 
      + Default function arguments in templates will not be evaluated (or
      + The -ftemplate-depth-NN flag can be used to increase the maximum
        recursive template instantiation depth, which defaults to 17. If you
        need to use this flag, the compiler will tell you.
+     + Explicit instantiation of template constructors and destructors is
+       now supported.  For instance:
+
+            template A<int>::A(const A&);
 
   Still not supported:
 
      + Member class templates.
      + Template template parameters.
      + Template friends.
-     + Explicit qualification of function templates.
 
 * Exception handling support has been significantly improved and is on by
   default.  This can result in significant runtime overhead.  You can turn
 * On the HPPA, some classes that do not define a copy constructor
   will be passed and returned in memory again so that functions
   returning those types can be inlined.
+
+*** The g++ team thanks everyone that contributed to this release,
+    but especially:
+
+* Joe Buck <jbuck@synopsys.com>, the maintainer of the g++ FAQ.
+* Brendan Kehoe <brendan@cygnus.com>, who coordinates testing of g++.
+* Jason Merrill <jason@cygnus.com>, the g++ maintainer.
+* Mark Mitchell <mmitchell@usa.net>, who implemented member function 
+  templates and explicit qualification of function templates.
+* Mike Stump <mrs@wrs.com>, the previous g++ maintainer, who did most of
+  the exception handling work.
index 6855181cef4c50ecea13a381973bf740bbf8a49b..4e8750ce0111c881cf2a89e3bde871d46465770c 100644 (file)
@@ -77,7 +77,7 @@ static tree build_this PROTO((tree));
 static struct z_candidate * splice_viable PROTO((struct z_candidate *));
 static int any_viable PROTO((struct z_candidate *));
 static struct z_candidate * add_template_candidate
-       PROTO((struct z_candidate *, tree, tree, tree, int));
+       PROTO((struct z_candidate *, tree, tree, tree, tree, int));
 static struct z_candidate * add_template_conv_candidate 
         PROTO((struct z_candidate *, tree, tree, tree, tree));
 static struct z_candidate * add_builtin_candidates
@@ -2847,7 +2847,7 @@ build_overload_call_real (fnname, parms, flags, final_cp, require_complete)
          i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (function),
                                &TREE_VEC_ELT (targs, 0),
                                TYPE_ARG_TYPES (TREE_TYPE (function)),
-                               parms, &template_cost, 0, 0);
+                               parms, NULL_TREE, &template_cost, 0, 0);
          if (i == 0)
            {
              function = instantiate_template (function, targs);
@@ -4144,10 +4144,19 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags)
   return candidates;
 }
 
+/* If TMPL can be successfully instantiated as indicated by
+   EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES.
+
+   TMPL is the template.  EXPLICIT_TARGS are any explicit template arguments.
+   ARGLIST is the arguments provided at the call-site.  The RETURN_TYPE
+   is the desired type for conversion operators.  FLAGS are as for
+   add_function_candidate.  */
+
 static struct z_candidate *
-add_template_candidate (candidates, tmpl, arglist, return_type, flags)
+add_template_candidate (candidates, tmpl, explicit_targs, 
+                       arglist, return_type, flags)
      struct z_candidate *candidates;
-     tree tmpl, arglist, return_type;
+     tree tmpl, explicit_targs, arglist, return_type;
      int flags;
 {
   int ntparms = DECL_NTPARMS (tmpl);
@@ -4156,7 +4165,8 @@ add_template_candidate (candidates, tmpl, arglist, return_type, flags)
   int i;
   tree fn;
 
-  i = fn_type_unification (tmpl, targs, arglist, return_type, 0);
+  i = fn_type_unification (tmpl, explicit_targs, targs, arglist,
+                          return_type, 0); 
 
   if (i != 0)
     return candidates;
@@ -4182,7 +4192,7 @@ add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type)
   int i;
   tree fn;
 
-  i = fn_type_unification (tmpl, targs, arglist, return_type, 0);
+  i = fn_type_unification (tmpl, NULL_TREE, targs, arglist, return_type, 0);
 
   if (i != 0)
     return candidates;
@@ -4312,7 +4322,7 @@ build_user_type_conversion_1 (totype, expr, flags)
          templates = decl_tree_cons (NULL_TREE, ctors, templates);
          candidates = 
            add_template_candidate (candidates, ctors,
-                                   args, NULL_TREE, flags);
+                                   NULL_TREE, args, NULL_TREE, flags);
        } 
       else 
        candidates = add_function_candidate (candidates, ctors,
@@ -4353,8 +4363,8 @@ build_user_type_conversion_1 (totype, expr, flags)
              {
                templates = decl_tree_cons (NULL_TREE, fn, templates);
                candidates = 
-                 add_template_candidate (candidates, fn, args,
-                                         totype, flags);
+                 add_template_candidate (candidates, fn, NULL_TREE,
+                                         args, totype, flags);
              } 
            else 
              candidates = add_function_candidate (candidates, fn,
@@ -4409,9 +4419,10 @@ build_user_type_conversion_1 (totype, expr, flags)
     p = &(TREE_OPERAND (*p, 0));
 
   /* Pedantically, normal function declarations are never considered
-     to refer to template instantiations, but we won't implement that
-     until we implement full template instantiation syntax.  */
-  if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)
+     to refer to template instantiations, so we only do this with
+     -fguiding-decls.  */ 
+  if (flag_guiding_decls && templates && ! cand->template 
+      && !DECL_INITIAL (cand->fn) 
       && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
     add_maybe_template (cand->fn, templates);
 
@@ -4471,8 +4482,15 @@ build_new_function_call (fn, args, obj)
      tree fn, args, obj;
 {
   struct z_candidate *candidates = 0, *cand;
-  if (obj == NULL_TREE && TREE_CODE (fn) == TREE_LIST)
+  tree explicit_targs = NULL_TREE;
+
+  if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
+    {
+      explicit_targs = TREE_OPERAND (fn, 1);
+      fn = TREE_OPERAND (fn, 0);
+    }
+
+  if (obj == NULL_TREE && really_overloaded_fn (fn))
     {
       tree t;
       tree templates = NULL_TREE;
@@ -4488,9 +4506,10 @@ build_new_function_call (fn, args, obj)
            {
              templates = decl_tree_cons (NULL_TREE, t, templates);
              candidates = add_template_candidate
-               (candidates, t, args, NULL_TREE, LOOKUP_NORMAL);
+               (candidates, t, explicit_targs, args, NULL_TREE,
+                LOOKUP_NORMAL);  
            }
-         else
+         else if (explicit_targs == NULL_TREE)
            candidates = add_function_candidate
              (candidates, t, args, LOOKUP_NORMAL);
        }
@@ -4517,9 +4536,10 @@ build_new_function_call (fn, args, obj)
        }
 
       /* Pedantically, normal function declarations are never considered
-        to refer to template instantiations, but we won't implement that
-        until we implement full template instantiation syntax.  */
-      if (templates && ! cand->template && ! DECL_INITIAL (cand->fn))
+        to refer to template instantiations, so we only do this with
+        -fguiding-decls.  */
+      if (flag_guiding_decls && templates && ! cand->template 
+         && ! DECL_INITIAL (cand->fn))
        add_maybe_template (cand->fn, templates);
 
       return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL);
@@ -4554,9 +4574,10 @@ build_object_call (obj, args)
          if (TREE_CODE (fn) == TEMPLATE_DECL)
            {
              templates = decl_tree_cons (NULL_TREE, fn, templates);
-             candidates = add_template_candidate (candidates, fn,
-                                                  mem_args, NULL_TREE, 
-                                                  LOOKUP_NORMAL);
+             candidates 
+               = add_template_candidate (candidates, fn, NULL_TREE,
+                                         mem_args, NULL_TREE, 
+                                         LOOKUP_NORMAL);
            }
          else
            candidates = add_function_candidate
@@ -4804,8 +4825,10 @@ build_new_op (code, flags, arg1, arg2, arg3)
       if (TREE_CODE (fns) == TEMPLATE_DECL)
        {
          templates = decl_tree_cons (NULL_TREE, fns, templates);
-         candidates = add_template_candidate
-           (candidates, fns, arglist, TREE_TYPE (fnname), flags);
+         candidates 
+           = add_template_candidate (candidates, fns, NULL_TREE,
+                                     arglist, TREE_TYPE (fnname),
+                                     flags); 
        }
       else
        candidates = add_function_candidate (candidates, fns, arglist, flags);
@@ -4833,9 +4856,10 @@ build_new_op (code, flags, arg1, arg2, arg3)
            {
              /* A member template. */
              templates = decl_tree_cons (NULL_TREE, fn, templates);
-             candidates = add_template_candidate
-               (candidates, fn, this_arglist, 
-                TREE_TYPE (fnname), LOOKUP_NORMAL);
+             candidates 
+               = add_template_candidate (candidates, fn, NULL_TREE,
+                                         this_arglist,  TREE_TYPE
+                                         (fnname), LOOKUP_NORMAL); 
            }
          else
            candidates = add_function_candidate
@@ -4934,9 +4958,10 @@ build_new_op (code, flags, arg1, arg2, arg3)
        enforce_access (cand->basetype_path, cand->fn);
 
       /* Pedantically, normal function declarations are never considered
-        to refer to template instantiations, but we won't implement that
-        until we implement full template instantiation syntax.  */
-      if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)
+        to refer to template instantiations, so we only do this with
+        -fguiding-decls.  */ 
+      if (flag_guiding_decls && templates && ! cand->template 
+         && ! DECL_INITIAL (cand->fn)
          && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE)
        add_maybe_template (cand->fn, templates);
 
@@ -5435,11 +5460,18 @@ build_new_method_call (instance, name, args, basetype_path, flags)
      int flags;
 {
   struct z_candidate *candidates = 0, *cand;
+  tree explicit_targs = NULL_TREE;
   tree basetype, mem_args, fns, instance_ptr;
   tree pretty_name;
   tree user_args = args;
   tree templates = NULL_TREE;
 
+  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
+    {
+      explicit_targs = TREE_OPERAND (name, 1);
+      name = TREE_OPERAND (name, 0);
+    }
+
   /* If there is an extra argument for controlling virtual bases,
      remove it for error reporting.  */
   if (flags & LOOKUP_HAS_IN_CHARGE)
@@ -5536,12 +5568,12 @@ build_new_method_call (instance, name, args, basetype_path, flags)
              /* A member template. */
              templates = decl_tree_cons (NULL_TREE, t, templates);
              candidates = 
-               add_template_candidate (candidates, t,
+               add_template_candidate (candidates, t, explicit_targs,
                                        this_arglist,
                                        TREE_TYPE (name), 
                                        LOOKUP_NORMAL); 
            }
-         else 
+         else if (explicit_targs == NULL_TREE) 
            candidates = add_function_candidate (candidates, t,
                                                 this_arglist, flags);
 
@@ -5589,9 +5621,10 @@ build_new_method_call (instance, name, args, basetype_path, flags)
     flags |= LOOKUP_NONVIRTUAL;
 
   /* Pedantically, normal function declarations are never considered
-     to refer to template instantiations, but we won't implement that
-     until we implement full template instantiation syntax.  */
-  if (templates && ! cand->template && ! DECL_INITIAL (cand->fn))
+     to refer to template instantiations, so we only do this with
+     -fguiding-decls.  */ 
+  if (flag_guiding_decls && templates && ! cand->template 
+      && ! DECL_INITIAL (cand->fn))
     add_maybe_template (cand->fn, templates);
 
   return build_over_call
index af735e98fcf4df2042a52a11ace322add4e02885..9f1aeb01685468bccdec1e2707f880743bb9c2a6 100644 (file)
@@ -2079,6 +2079,53 @@ finish_struct_methods (t, fn_fields, nonprivate_method)
        obstack_free (current_obstack, baselink_vec);
     }
 
+  /* Now, figure out what any member template specializations were
+     specializing.  */
+  for (i = 0; i < TREE_VEC_LENGTH (method_vec); ++i)
+    {
+      tree fn;
+      for (fn = TREE_VEC_ELT (method_vec, i);
+          fn != NULL_TREE;
+          fn = DECL_CHAIN (fn))
+       if (DECL_TEMPLATE_SPECIALIZATION (fn))
+         {
+           tree f;
+           tree spec_args;
+
+           /* If there is a template, and t uses template parms, wer
+              are dealing with a specialization of a member
+              template in a template class, and we must grab the
+              template, rather than the function.  */
+           if (DECL_TI_TEMPLATE (fn) && uses_template_parms (t))
+             f = DECL_TI_TEMPLATE (fn);
+           else
+             f = fn;
+
+           /* We want the specialization arguments, which will be the
+              innermost ones.  */
+           if (DECL_TI_ARGS (f) 
+               && TREE_CODE (DECL_TI_ARGS (f)) == TREE_VEC)
+             spec_args 
+               = TREE_VEC_ELT (DECL_TI_ARGS (f), 0);
+           else
+             spec_args = DECL_TI_ARGS (f);
+               
+           check_explicit_specialization 
+             (lookup_template_function (DECL_NAME (f), spec_args),
+              f, 0, 1);
+
+           /* Now, the assembler name will be correct for fn, so we
+              make its RTL.  */
+           DECL_RTL (f) = 0;
+           make_decl_rtl (f, NULL_PTR, 1);
+           if (f != fn)
+             {
+               DECL_RTL (fn) = 0;
+               make_decl_rtl (fn, NULL_PTR, 1);
+             }
+         }
+    }
+
   return method_vec;
 }
 
@@ -4877,6 +4924,8 @@ instantiate_type (lhstype, rhs, complain)
      tree lhstype, rhs;
      int complain;
 {
+  tree explicit_targs = NULL_TREE;
+
   if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
     {
       if (complain)
@@ -4991,6 +5040,13 @@ instantiate_type (lhstype, rhs, complain)
        return rhs;
       }
 
+    case TEMPLATE_ID_EXPR:
+      {
+       explicit_targs = TREE_OPERAND (rhs, 1);
+       rhs = TREE_OPERAND (rhs, 0);
+      }
+    /* fall through */
+
     case TREE_LIST:
       {
        tree elem, baselink, name;
@@ -5025,14 +5081,17 @@ instantiate_type (lhstype, rhs, complain)
        if (globals > 0)
          {
            elem = get_first_fn (rhs);
-           while (elem)
-             if (! comptypes (lhstype, TREE_TYPE (elem), 1))
-               elem = DECL_CHAIN (elem);
-             else
-               {
-                 mark_used (elem);
-                 return elem;
-               }
+           /* If there are explicit_targs, only a template function
+              can match.  */
+           if (explicit_targs == NULL_TREE)
+             while (elem)
+               if (! comptypes (lhstype, TREE_TYPE (elem), 1))
+                 elem = DECL_CHAIN (elem);
+               else
+                 {
+                   mark_used (elem);
+                   return elem;
+                 }
 
            /* No exact match found, look for a compatible template.  */
            {
@@ -5046,7 +5105,8 @@ instantiate_type (lhstype, rhs, complain)
                    i = type_unification
                      (DECL_INNERMOST_TEMPLATE_PARMS (elem), 
                       &TREE_VEC_ELT (t, 0), TYPE_ARG_TYPES (TREE_TYPE (elem)),
-                      TYPE_ARG_TYPES (lhstype), &d, 0, 1);
+                      TYPE_ARG_TYPES (lhstype), explicit_targs, &d,
+                      1, 1);
                    if (i == 0)
                      {
                        if (save_elem)
@@ -5068,38 +5128,47 @@ instantiate_type (lhstype, rhs, complain)
                }
            }
 
-           /* No match found, look for a compatible function.  */
-           elem = get_first_fn (rhs);
-           while (elem && comp_target_types (lhstype,
-                                             TREE_TYPE (elem), 1) <= 0)
-             elem = DECL_CHAIN (elem);
-           if (elem)
+           /* If there are explicit_targs, only a template function
+              can match.  */
+           if (explicit_targs == NULL_TREE) 
              {
-               tree save_elem = elem;
-               elem = DECL_CHAIN (elem);
+               /* No match found, look for a compatible function.  */
+               elem = get_first_fn (rhs);
                while (elem && comp_target_types (lhstype,
-                                                 TREE_TYPE (elem), 0) <= 0)
+                                                 TREE_TYPE (elem), 1) <= 0)
                  elem = DECL_CHAIN (elem);
                if (elem)
                  {
-                   if (complain)
+                   tree save_elem = elem;
+                   elem = DECL_CHAIN (elem);
+                   while (elem 
+                          && comp_target_types (lhstype,
+                                                TREE_TYPE (elem), 0) <= 0)
+                     elem = DECL_CHAIN (elem);
+                   if (elem)
                      {
-                       cp_error ("cannot resolve overload to target type `%#T'",
-                                 lhstype);
-                       cp_error_at ("  ambiguity between `%#D'", save_elem);
-                       cp_error_at ("  and `%#D', at least", elem);
+                       if (complain)
+                         {
+                           cp_error 
+                             ("cannot resolve overload to target type `%#T'",
+                              lhstype);
+                           cp_error_at ("  ambiguity between `%#D'",
+                                        save_elem); 
+                           cp_error_at ("  and `%#D', at least", elem);
+                         }
+                       return error_mark_node;
                      }
-                   return error_mark_node;
+                   mark_used (save_elem);
+                   return save_elem;
                  }
-               mark_used (save_elem);
-               return save_elem;
              }
            if (complain)
              {
                cp_error ("cannot resolve overload to target type `%#T'",
                          lhstype);
-               cp_error ("  because no suitable overload of function `%D' exists",
-                         TREE_PURPOSE (rhs));
+               cp_error 
+                 ("  because no suitable overload of function `%D' exists",
+                  TREE_PURPOSE (rhs));
              }
            return error_mark_node;
          }
index 6c6dff78c5cf70adb50394b06a020bd7d5763d32..65d20a71e5e26b8003f3a208e62aba34beb77a32 100644 (file)
@@ -113,6 +113,14 @@ DEFTREECODE (USING_DECL, "using_decl", "d", 0)
 /* An un-parsed default argument.  Looks like an IDENTIFIER_NODE.  */
 DEFTREECODE (DEFAULT_ARG, "default_arg", "c", 2)
 
+/* A template-id, like foo<int>.  The first operand is the template.  
+   The second is the list of explicitly specified arguments.  The 
+   template will be a FUNCTION_DECL, TEMPLATE_DECL, or a list of
+   overloaded functions and templates if the template-id refers to
+   a global template.  If the template-id refers to a member template,
+   the template will will be an IDENTIFIER_NODE.  */
+DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", "e", 2)
+
 /* A whole bunch of tree codes for the initial, superficial parsing of
    templates.  */
 DEFTREECODE (LOOKUP_EXPR, "lookup_expr", "e", 2)
index 0daf874dde4077cf5f815a15a12aed9330597a29..a44447a60d297c8ac55c169fc5c6a2423b7510f2 100644 (file)
@@ -307,6 +307,14 @@ extern int flag_handle_signatures;
    inline by default.  */
 
 extern int flag_default_inline;
+
+/* The name-mangling scheme to use.  Versions of gcc before 2.8 use
+   version 0.  */
+extern int name_mangling_version;
+
+/* Nonzero means that guiding declarations are allowed.  */
+extern int flag_guiding_decls;
+
 \f
 /* C++ language-specific tree codes.  */
 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
@@ -2295,6 +2303,7 @@ extern void  report_type_mismatch         PROTO((struct candidate *, tree, char *));
 extern char *build_overload_name               PROTO((tree, int, int));
 extern tree build_static_name                  PROTO((tree, tree));
 extern tree build_decl_overload                        PROTO((tree, tree, int));
+extern tree build_template_decl_overload        PROTO((tree, tree, tree, tree, tree, int));
 extern tree build_typename_overload            PROTO((tree));
 extern tree build_overload_with_type           PROTO((tree, tree));
 extern tree build_opfncall                     PROTO((enum tree_code, int, tree, tree, tree));
@@ -2312,18 +2321,24 @@ extern tree tsubst_chain                        PROTO((tree, tree));
 extern void begin_member_template_processing    PROTO((tree));
 extern void end_member_template_processing      PROTO((void));
 extern void begin_template_parm_list           PROTO((void));
+extern void begin_specialization                PROTO((void));
+extern void reset_specialization                PROTO((void));
+extern void end_specialization                  PROTO((void));
+extern tree determine_explicit_specialization   PROTO((tree, tree, tree *, int, int));
+extern int check_explicit_specialization       PROTO((tree, tree, int, int));
 extern tree process_template_parm              PROTO((tree, tree));
 extern tree end_template_parm_list             PROTO((tree));
 extern void end_template_decl                  PROTO((void));
 extern tree current_template_args              PROTO((void));
 extern void push_template_decl                 PROTO((tree));
 extern tree lookup_template_class              PROTO((tree, tree, tree));
+extern tree lookup_template_function            PROTO((tree, tree));
 extern int uses_template_parms                 PROTO((tree));
 extern tree instantiate_class_template         PROTO((tree));
 extern tree instantiate_template               PROTO((tree, tree));
 extern void overload_template_name             PROTO((tree));
-extern int fn_type_unification                  PROTO((tree, tree, tree, tree, int));
-extern int type_unification                    PROTO((tree, tree *, tree, tree, int *, int, int));
+extern int fn_type_unification                  PROTO((tree, tree, tree, tree, tree, int));
+extern int type_unification                    PROTO((tree, tree *, tree, tree, tree, int *, int, int));
 struct tinst_level *tinst_for_decl             PROTO((void));
 extern void mark_decl_instantiated             PROTO((tree, int));
 extern int more_specialized                    PROTO((tree, tree));
index 08a3dd54025ab2324f1239da4d56ebd92d0ad7d6..71c2dbf22c3fc08a7bfd5896848546dd6d445624 100644 (file)
@@ -157,9 +157,9 @@ static tree maybe_build_cleanup_1 PROTO((tree, tree));
 static tree lookup_name_real PROTO((tree, int, int));
 static void warn_extern_redeclared_static PROTO((tree, tree));
 static void grok_reference_init PROTO((tree, tree, tree, tree *));
-static tree grokfndecl PROTO((tree, tree, tree, int,
+static tree grokfndecl PROTO((tree, tree, tree, tree, int,
                              enum overload_flags,
-                             tree, tree, tree, int, int, int, int));
+                             tree, tree, tree, int, int, int, int, int, int));
 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int));
 static tree lookup_tag PROTO((enum tree_code, tree,
                              struct binding_level *, int));
@@ -2563,6 +2563,20 @@ duplicate_decls (newdecl, olddecl)
          cp_error_at ("previous declaration as `%#D'", olddecl);
        }
     }
+  else if ((TREE_CODE (olddecl) == FUNCTION_DECL 
+           && DECL_TEMPLATE_SPECIALIZATION (olddecl)
+           && (!DECL_TEMPLATE_SPECIALIZATION (newdecl)
+               || (DECL_TI_TEMPLATE (newdecl) 
+                   != DECL_TI_TEMPLATE (olddecl))))
+          || (TREE_CODE (newdecl) == FUNCTION_DECL
+              && DECL_TEMPLATE_SPECIALIZATION (newdecl)
+              && (!DECL_TEMPLATE_SPECIALIZATION (olddecl)
+                  || (DECL_TI_TEMPLATE (olddecl) != DECL_TI_TEMPLATE
+                      (newdecl)))))
+    /* It's OK to have a template specialization and a non-template
+       with the same type, or to have specializations of two
+       different templates with the same type. */
+    return 0;
   else
     {
       char *errmsg = redeclaration_error_message (newdecl, olddecl);
@@ -3030,7 +3044,9 @@ pushdecl (x)
       char *file;
       int line;
 #endif
-
+      if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
+       name = TREE_OPERAND (name, 0);
+      
       t = lookup_name_current_level (name);
       if (t == error_mark_node)
        {
@@ -7173,14 +7189,16 @@ bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
    not look, and -1 if we should not call `grokclassfn' at all.  */
 
 static tree
-grokfndecl (ctype, type, declarator, virtualp, flags, quals,
-           raises, attrlist, check, publicp, inlinep, funcdef_flag)
+grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
+           raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
+           template_count)
      tree ctype, type;
      tree declarator;
+     tree orig_declarator;
      int virtualp;
      enum overload_flags flags;
      tree quals, raises, attrlist;
-     int check, publicp, inlinep, funcdef_flag;
+     int check, friendp, publicp, inlinep, funcdef_flag, template_count;
 {
   tree cname, decl;
   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
@@ -7255,6 +7273,11 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
       }
 
   /* Caller will do the rest of this.  */
+  check_explicit_specialization (orig_declarator, decl,
+                                template_count, 
+                                funcdef_flag ? 2 : 
+                                (friendp ? 3 : 0));
+
   if (check < 0)
     return decl;
 
@@ -7272,6 +7295,7 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals,
       DECL_CONSTRUCTOR_P (decl) = 1;
 
       grokclassfn (ctype, declarator, decl, flags, quals);
+
       if (check)
        {
          tmp = check_classfn (ctype, decl);
@@ -7596,6 +7620,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
   enum overload_flags flags = NO_SPECIAL;
   tree quals = NULL_TREE;
   tree raises = NULL_TREE;
+  int template_count = 0;
 
   RIDBIT_RESET_ALL (specbits);
   if (decl_context == FUNCDEF)
@@ -7709,9 +7734,27 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
              }
            ctype = NULL_TREE;
            break;
+           
+         case TEMPLATE_ID_EXPR:
+             {
+               tree fns = TREE_OPERAND (decl, 0);
+
+               if (TREE_CODE (fns) == LOOKUP_EXPR)
+                 fns = TREE_OPERAND (fns, 0);
+
+               if (TREE_CODE (fns) == IDENTIFIER_NODE)
+                 dname = fns;
+               else if (really_overloaded_fn (fns))
+                 dname = DECL_NAME (get_first_fn (fns));
+               else
+                 dname = DECL_NAME (fns);
+             }
+         /* fall through */
 
          case IDENTIFIER_NODE:
-           dname = decl;
+           if (TREE_CODE (decl) == IDENTIFIER_NODE)
+             dname = decl;
+
            next = 0;
 
            if (is_rid (dname))
@@ -8407,7 +8450,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
      Descend through it, creating more complex types, until we reach
      the declared identifier (or NULL_TREE, in an absolute declarator).  */
 
-  while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
+  while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
+        && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
     {
       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
         an INDIRECT_REF (for *...),
@@ -8661,6 +8705,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
            if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
              inner_decl = TREE_OPERAND (inner_decl, 1);
 
+           if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
+             inner_decl = dname;
+
            /* Pick up type qualifiers which should be applied to `this'.  */
            quals = TREE_OPERAND (declarator, 2);
 
@@ -8670,9 +8717,11 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
            /* Say it's a definition only for the CALL_EXPR
               closest to the identifier.  */
            funcdecl_p
-             = inner_decl && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
-                              || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
-
+             = inner_decl 
+             && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
+                 || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
+                 || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
+           
            if (ctype == NULL_TREE
                && decl_context == FIELD
                && funcdecl_p
@@ -8961,6 +9010,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
               resolve to.  The code here just needs to build
               up appropriate member types.  */
            tree sname = TREE_OPERAND (declarator, 1);
+           tree t;
+
            /* Destructors can have their visibilities changed as well.  */
            if (TREE_CODE (sname) == BIT_NOT_EXPR)
              sname = TREE_OPERAND (sname, 0);
@@ -9012,6 +9063,18 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
              }
            ctype = TREE_OPERAND (declarator, 0);
 
+           t = ctype;
+           while (t != NULL_TREE) 
+             {
+               if (CLASSTYPE_TEMPLATE_INFO (t))
+                 template_count += 1;
+               t = TYPE_MAIN_DECL (t);
+               if (DECL_LANG_SPECIFIC (t))
+                 t = DECL_CLASS_CONTEXT (t);
+               else
+                 t = NULL_TREE;
+             }
+
            if (sname == NULL_TREE)
              goto done_scoping;
 
@@ -9430,10 +9493,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
 
            /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
            publicp = (! friendp || ! staticp);
-           decl = grokfndecl (ctype, type, declarator,
+           decl = grokfndecl (ctype, type, 
+                              TREE_CODE (declarator) != TEMPLATE_ID_EXPR
+                              ? declarator : dname,
+                              declarator,
                               virtualp, flags, quals, raises, attrlist,
-                              friendp ? -1 : 0, publicp, inlinep,
-                              funcdef_flag);
+                              friendp ? -1 : 0, friendp, publicp, inlinep,
+                              funcdef_flag, template_count);
            if (decl == NULL_TREE)
              return NULL_TREE;
 #if 0
@@ -9451,9 +9517,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
               members of other classes.  */
            /* All method decls are public, so tell grokfndecl to set
               TREE_PUBLIC, also.  */
-           decl = grokfndecl (ctype, type, declarator,
+           decl = grokfndecl (ctype, type, declarator, declarator,
                               virtualp, flags, quals, raises, attrlist,
-                              friendp ? -1 : 0, 1, 0, funcdef_flag);
+                              friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
+                              template_count);
            if (decl == NULL_TREE)
              return NULL_TREE;
          }
@@ -9578,12 +9645,17 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
       }
     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
       {
-       tree original_name = declarator;
+       tree original_name;
        int publicp = 0;
 
        if (! declarator)
          return NULL_TREE;
 
+       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
+         original_name = dname;
+       else
+         original_name = declarator;
+
        if (RIDBIT_SETP (RID_AUTO, specbits))
          error ("storage class `auto' invalid for function `%s'", name);
        else if (RIDBIT_SETP (RID_REGISTER, specbits))
@@ -9621,7 +9693,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
                      && IDENTIFIER_POINTER (original_name)[1] == '_'
                      && strncmp (IDENTIFIER_POINTER (original_name)+2, "builtin_", 8) == 0))
              /* Plain overloading: will not be grok'd by grokclassfn.  */
-             declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
+             if (name_mangling_version < 1 
+                 || TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
+               declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0);
          }
        else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
          type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
@@ -9632,16 +9706,19 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
                   || RIDBIT_SETP (RID_EXTERN, specbits)
                   || !RIDBIT_SETP (RID_STATIC, specbits));
 
-       decl = grokfndecl (ctype, type, original_name,
+       decl = grokfndecl (ctype, type, original_name, declarator,
                           virtualp, flags, quals, raises, attrlist,
-                          friendp ? 2 : 1,
-                          publicp, inlinep, funcdef_flag);
+                          friendp ? 2 : 1, friendp,
+                          publicp, inlinep, funcdef_flag, 
+                          template_count);
        if (decl == NULL_TREE)
          return NULL_TREE;
 
-       if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c)
+       if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c
+           && (!DECL_TEMPLATE_SPECIALIZATION (decl) ||
+               name_mangling_version < 1)) 
          DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator);
-
+       
        if (staticp == 1)
          {
            int illegal_static = 0;
index 0f313f5e7ec8baece6784f93cdc89f27b14de6fb..5b40e2704acc2392069e81877b91b20f9fb028da 100644 (file)
@@ -406,6 +406,14 @@ int flag_weak = 1;
 
 int max_tinst_depth = 17;
 
+/* The name-mangling scheme to use.  Must be 1 or greater to support
+   template functions with identical types, but different template
+   arguments.  */
+int name_mangling_version = 1;
+
+/* Nonzero means that guiding declarations are allowed.  */
+int flag_guiding_decls;
+
 /* Table of language-dependent -f options.
    STRING is the option name.  VARIABLE is the address of the variable.
    ON_VALUE is the value to store in VARIABLE
@@ -526,6 +534,17 @@ lang_decode_option (p)
          flag_implicit_templates = 0;
          found = 1;
        }
+      else if (!strcmp (p, "guiding-decls"))
+       {
+         flag_guiding_decls = 1;
+         name_mangling_version = 0;
+         found = 1;
+       }
+      else if (!strcmp (p, "no-guiding-decls"))
+       {
+         flag_guiding_decls = 0;
+         found = 1;
+       }
       else if (!strncmp (p, "template-depth-", 15))
        {
          char *endp = p + 15;
@@ -542,6 +561,22 @@ lang_decode_option (p)
          max_tinst_depth = atoi (p + 15);
        template_depth_lose: ;
        }
+      else if (!strncmp (p, "name-mangling-version-", 22))
+       {
+         char *endp = p + 22;
+         while (*endp)
+           {
+             if (*endp >= '0' && *endp <= '9')
+               endp++;
+             else
+               {
+                 error ("Invalid option `%s'", p - 2);
+                 goto mangling_version_lose;
+               }
+           }
+         name_mangling_version = atoi (p + 22);
+       mangling_version_lose:
+       }
       else for (j = 0;
                !found && j < sizeof (lang_f_options) / sizeof (lang_f_options[0]);
                j++)
@@ -1395,10 +1430,15 @@ check_classfn (ctype, function)
 
                      if (comptypes (TREE_TYPE (TREE_TYPE (function)),
                                     TREE_TYPE (TREE_TYPE (fndecl)), 1)
-                         && compparms (p1, p2, 3))
+                         && compparms (p1, p2, 3)
+                         && (DECL_TEMPLATE_SPECIALIZATION (function)
+                             == DECL_TEMPLATE_SPECIALIZATION (fndecl))
+                         && (!DECL_TEMPLATE_SPECIALIZATION (function)
+                             || (DECL_TI_TEMPLATE (function) 
+                                 == DECL_TI_TEMPLATE (fndecl))))
                        return fndecl;
 
-                     if (is_member_template (fndecl)) 
+                     if (is_member_template (fndecl))
                        /* This function might be an instantiation
                           or specialization of fndecl.  */
                        templates = 
@@ -3368,6 +3408,12 @@ build_expr_from_tree (t)
       else
        return do_identifier (TREE_OPERAND (t, 0), 0);
 
+    case TEMPLATE_ID_EXPR:
+      return lookup_template_function (build_expr_from_tree
+                                      (TREE_OPERAND (t, 0)),
+                                      build_expr_from_tree
+                                      (TREE_OPERAND (t, 1)));
+
     case INDIRECT_REF:
       return build_x_indirect_ref
        (build_expr_from_tree (TREE_OPERAND (t, 0)), "unary *");
index 4f4c5996bb786578acf628a87941aec22fab6dcc..bec7bfaa1e4d2f8e4089e4c595afc6f2d7b05660 100644 (file)
@@ -924,6 +924,71 @@ dump_function_name (t)
     }
   else
     dump_decl (name, 0);
+
+  if (DECL_TEMPLATE_SPECIALIZATION (t) || DECL_IMPLICIT_INSTANTIATION (t))
+    {
+      tree args = DECL_TEMPLATE_INFO (t) 
+       ? DECL_TI_ARGS (t) : NULL_TREE; 
+
+      OB_PUTC ('<');
+
+      /* Be careful only to print things when we have them, so as not
+        to crash producing error messages.  */
+      if (args)
+       {
+         if (TREE_CODE (args) == TREE_LIST)
+           {
+             tree arg;
+             int need_comma = 0;
+
+             for (arg = args; arg; arg = TREE_CHAIN (arg))
+               {
+                 tree a = TREE_VALUE (arg);
+
+                 if (need_comma)
+                   OB_PUTS (", ");
+
+                 if (a)
+                   {
+                     if (TREE_CODE_CLASS (TREE_CODE (a)) == 't')
+                       dump_type (a, 0);
+                     else
+                       dump_expr (a, 0);
+                   }
+                 
+                 need_comma = 1;
+               }
+           }
+         else if (TREE_CODE (args) == TREE_VEC)
+           {
+             int i;
+             int need_comma = 0;
+
+             if (TREE_VEC_LENGTH (args) > 0
+                 && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
+               args = TREE_VEC_ELT (args, 0);
+
+             for (i = 0; i < TREE_VEC_LENGTH (args); i++)
+               {
+                 tree a = TREE_VEC_ELT (args, i);
+
+                 if (need_comma)
+                   OB_PUTS (", ");
+
+                 if (a)
+                   {
+                     if (TREE_CODE_CLASS (TREE_CODE (a)) == 't')
+                       dump_type (a, 0);
+                     else
+                       dump_expr (a, 0);
+                   }
+                 
+                 need_comma = 1;
+               }
+           }
+       }
+      OB_PUTC ('>');
+    }
 }
 
 static void
index f73ed97e3c766bda8691bfa96d8cc048651ad61d..fbfffe77f23ac833fed8557e99865e91e74e84f2 100644 (file)
@@ -380,9 +380,11 @@ do_friend (ctype, declarator, decl, parmdecls, flags, quals, funcdef_flag)
       if (funcdef_flag)
        DECL_CLASS_CONTEXT (decl) = current_class_type;
 
-      /* We can call pushdecl here, because the TREE_CHAIN of this
-        FUNCTION_DECL is not needed for other purposes.  */
-      decl = pushdecl (decl);
+      if (! DECL_USE_TEMPLATE (decl))
+       /* We can call pushdecl here, because the TREE_CHAIN of this
+          FUNCTION_DECL is not needed for other purposes.  Don't do this
+          for a template instantiation. */
+       decl = pushdecl (decl);
 
       make_decl_rtl (decl, NULL_PTR, 1);
       add_friend (current_class_type, decl);
index 587f0a293ace9dc2182faccca30521978c5ddc0e..5b7f9132aca9341549188b3725c873e409cb8e8e 100644 (file)
@@ -1669,12 +1669,23 @@ For example @code{Foo::\u0319::Bar} is encoded as
 
 @subsection Templates
 
-A template instantiation is encoded as the letter @samp{t},
+A class template instantiation is encoded as the letter @samp{t},
 followed by the encoding of the template name, followed
 the number of template parameters, followed by encoding of the template
 parameters.  If a template parameter is a type, it is written
 as a @samp{Z} followed by the encoding of the type.
 
+A function template specialization (either an instantiation or an
+explicit specialization) is encoded by an @samp{H} followed by the
+encoding of the template parameters, as described above, followed by 
+an @samp{_}, the encoding of the argument types template function (not the
+specialization), another @samp{_}, and the return type.  (Like the
+argument types, the return type is the return type of the function
+template, not the specialization.)  Template parameters in the argument
+and return types are encoded by an @samp{X} for type parameters, or a
+@samp{Y} for constant parameters, and an index indicating their position
+in the template parameter list declaration.
+
 @subsection Arrays
 
 C++ array types are mangled by emitting @samp{A}, followed by
@@ -1720,6 +1731,9 @@ Encodes the C++ and Java @code{float} types.
 @item F
 Used to indicate a function type.
 
+@item H
+Used to indicate a template function.
+
 @item i
 Encodes the C++ and Java @code{int} types.
 
@@ -1775,6 +1789,12 @@ Encodes the C++ @code{wchar_t} type, and the Java @code{char} types.
 @item x
 Encodes the GNU C++ @code{long long} type, and the Java @code{long} type.
 
+@item X
+Encodes a template type parameter, when part of a function type.
+
+@item Y
+Encodes a template constant parameter, when part of a function type.
+
 @item Z
 Used for template type parameters. 
 
index 1f032e07c13248bd6a71175378b6d40e865c6098..83adadbbc2840005d44fe842ba31d498192f6b86 100644 (file)
@@ -1681,7 +1681,7 @@ build_member_call (type, name, parmlist)
      tree type, name, parmlist;
 {
   tree t;
-  tree method_name = name;
+  tree method_name;
   int dtor = 0;
   int dont_use_this = 0;
   tree basetype_path, decl;
@@ -1690,6 +1690,11 @@ build_member_call (type, name, parmlist)
     return build_x_function_call (do_scoped_id (name, 0), parmlist,
                                  current_class_ref);
 
+  if (TREE_CODE (name) != TEMPLATE_ID_EXPR)
+    method_name = name;
+  else
+    method_name = TREE_OPERAND (name, 0);
+
   if (TREE_CODE (method_name) == BIT_NOT_EXPR)
     {
       method_name = TREE_OPERAND (method_name, 0);
@@ -1758,7 +1763,10 @@ build_member_call (type, name, parmlist)
       || method_name == constructor_name_full (type))
     return build_functional_cast (type, parmlist);
   if (t = lookup_fnfields (basetype_path, method_name, 0))
-    return build_method_call (decl, method_name, parmlist, basetype_path,
+    return build_method_call (decl, 
+                             TREE_CODE (name) == TEMPLATE_ID_EXPR
+                             ? name : method_name,
+                             parmlist, basetype_path,
                              LOOKUP_NORMAL|LOOKUP_NONVIRTUAL);
   if (TREE_CODE (name) == IDENTIFIER_NODE
       && ((t = lookup_field (TYPE_BINFO (type), name, 1, 0))))
index 73b37fb7d1d25042324b85c803e7db40c38fa3ae..6679030ad34746063c6c4a221103de63a774e055 100644 (file)
@@ -48,6 +48,8 @@ Boston, MA 02111-1307, USA.  */
   "-fno-external-templates",
   "-ffor-scope",
   "-fno-for-scope",
+  "-fguiding-decls",
+  "-fno-guiding-decls",
   "-fgnu-keywords",
   "-fno-gnu-keywords",
   "-fhandle-exceptions",
@@ -64,6 +66,7 @@ Boston, MA 02111-1307, USA.  */
   "-fno-labels-ok",
   "-fmemoize-lookups",
   "-fno-memoize-lookups",
+  "-fname-mangling-version-",
   "-fnonnull-objects",
   "-fno-nonnull-objects",
   "-foperator-names",
index 8bd9c57624aa3caa06dc0ec815ba355bdb6e6089..b60c09954eb159db07007268fd9437da10acb7e6 100644 (file)
@@ -2729,6 +2729,15 @@ identifier_type (decl)
     {
       if (TREE_CODE (DECL_RESULT (decl)) == TYPE_DECL)
        return PTYPENAME;
+      else if (looking_for_template) 
+       return PFUNCNAME;
+    }
+  if (looking_for_template && really_overloaded_fn (decl))
+    {
+      tree t;
+      for (t = TREE_VALUE (decl); t != NULL_TREE; t = DECL_CHAIN (t))
+       if (DECL_FUNCTION_TEMPLATE_P (t)) 
+         return PFUNCNAME;
     }
   if (TREE_CODE (decl) == NAMESPACE_DECL)
     return NSNAME;
index 8a50dabac993941a6de554295837bf3fb1a8bcbc..53417b2dbf07b9e1d41d3ba200231f7a3d2a9012 100644 (file)
@@ -71,6 +71,10 @@ static char *thunk_printable_name PROTO((tree));
 static void do_build_assign_ref PROTO((tree));
 static void do_build_copy_constructor PROTO((tree));
 static tree largest_union_member PROTO((tree));
+static tree build_decl_overload_real PROTO((tree, tree, tree, tree,
+                                           tree, int)); 
+static void build_template_parm_names PROTO((tree, tree));
+static void build_underscore_int PROTO((int));
 
 # define OB_INIT() (scratch_firstobj ? (obstack_free (&scratch_obstack, scratch_firstobj), 0) : 0)
 # define OB_PUTC(C) (obstack_1grow (&scratch_obstack, (C)))
@@ -383,9 +387,16 @@ build_overload_nested_name (decl)
   if (DECL_CONTEXT (decl))
     {
       tree context = DECL_CONTEXT (decl);
-      if (TREE_CODE_CLASS (TREE_CODE (context)) == 't')
-       context = TYPE_NAME (context);
-      build_overload_nested_name (context);
+      /* For a template type parameter, we want to output an 'Xn'
+        rather than 'T' or some such. */
+      if (TREE_CODE (context) == TEMPLATE_TYPE_PARM)
+       build_overload_name (context, 0, 0);
+      else
+       {
+         if (TREE_CODE_CLASS (TREE_CODE (context)) == 't')
+           context = TYPE_NAME (context);
+         build_overload_nested_name (context);
+       }
     }
 
   if (TREE_CODE (decl) == FUNCTION_DECL)
@@ -406,6 +417,16 @@ build_overload_nested_name (decl)
     build_overload_identifier (decl);
 }
 
+static void
+build_underscore_int (int i)
+{
+  if (i > 9)
+    OB_PUTC ('_');
+  icat (i);
+  if (i > 9)
+    OB_PUTS ('_');
+}
+
 /* Encoding for an INTEGER_CST value.  */
 
 static void
@@ -416,11 +437,8 @@ build_overload_int (value, in_template)
   if (TREE_CODE (value) == TEMPLATE_CONST_PARM)
     {
       OB_PUTC ('Y');
-      if (TEMPLATE_CONST_IDX (value) > 9)
-       OB_PUTC ('_');
-      icat (TEMPLATE_CONST_IDX (value)); 
-      if (TEMPLATE_CONST_IDX (value) > 9)
-       OB_PUTC ('_');
+      build_underscore_int (TEMPLATE_CONST_IDX (value));
+      build_underscore_int (TEMPLATE_CONST_LEVEL (value));
       return;
     }
   else if (in_template
@@ -633,6 +651,41 @@ build_overload_value (type, value, in_template)
     }
 }
 
+
+/* Add encodings for the vector of template parameters in PARMLIST,
+   given the vector of arguments to be substituted in ARGLIST.  */
+
+void
+build_template_parm_names (parmlist, arglist)
+     tree parmlist;
+     tree arglist;
+{
+  int i, nparms;
+  
+  nparms = TREE_VEC_LENGTH (parmlist);
+  icat (nparms);
+  for (i = 0; i < nparms; i++)
+    {
+      tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i));
+      tree arg = TREE_VEC_ELT (arglist, i);
+      if (TREE_CODE (parm) == TYPE_DECL)
+       {
+         /* This parameter is a type.  */
+         OB_PUTC ('Z');
+         build_overload_name (arg, 0, 0);
+       }
+      else
+       {
+         parm = tsubst (parm, arglist,
+                        TREE_VEC_LENGTH (arglist), NULL_TREE);
+         /* It's a PARM_DECL.  */
+         build_overload_name (TREE_TYPE (parm), 0, 0);
+         build_overload_value (parm, arg, uses_template_parms (arglist));
+       }
+    }
+ }
+
+
 static void
 build_overload_identifier (name)
      tree name;
@@ -643,36 +696,15 @@ build_overload_identifier (name)
       && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (TREE_TYPE (name))))
     {
       tree template, parmlist, arglist, tname;
-      int i, nparms;
       template = CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (name));
       arglist = TREE_VALUE (template);
       template = TREE_PURPOSE (template);
       tname = DECL_NAME (template);
       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
-      nparms = TREE_VEC_LENGTH (parmlist);
       OB_PUTC ('t');
       icat (IDENTIFIER_LENGTH (tname));
       OB_PUTID (tname);
-      icat (nparms);
-      for (i = 0; i < nparms; i++)
-       {
-         tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i));
-         tree arg = TREE_VEC_ELT (arglist, i);
-         if (TREE_CODE (parm) == TYPE_DECL)
-           {
-             /* This parameter is a type.  */
-             OB_PUTC ('Z');
-             build_overload_name (arg, 0, 0);
-           }
-         else
-           {
-             parm = tsubst (parm, arglist,
-                            TREE_VEC_LENGTH (arglist), NULL_TREE);
-             /* It's a PARM_DECL.  */
-             build_overload_name (TREE_TYPE (parm), 0, 0);
-             build_overload_value (parm, arg, uses_template_parms (arglist));
-           }
-       }
+      build_template_parm_names (parmlist, arglist);
     }
   else
     {
@@ -1012,22 +1044,18 @@ build_overload_name (parmtypes, begin, end)
 
        case TEMPLATE_TYPE_PARM:
          OB_PUTC ('X');
-         if (TEMPLATE_TYPE_IDX (parmtype) > 9)
-           OB_PUTC ('_');
-         icat (TEMPLATE_TYPE_IDX (parmtype)); 
-         if (TEMPLATE_TYPE_IDX (parmtype) > 9)
-           OB_PUTC ('_');
+         build_underscore_int (TEMPLATE_TYPE_IDX (parmtype));
+         build_underscore_int (TEMPLATE_TYPE_LEVEL (parmtype));
          break;
            
        case TYPENAME_TYPE:
-         /* We don't ever want this output, but it's inconvenient not to
-            be able to build the string.  This should cause assembler
-            errors we'll notice.  */
-         {
-           static int n;
-           sprintf (digit_buffer, " *%d", n++);
-           OB_PUTCP (digit_buffer);
-         }
+         /* When mangling the type of a function template whose
+            declaration looks like:
+
+            template <class T> void foo(typename T::U)
+            
+            we have to mangle these.  */
+         build_qualified_name (parmtype);
          break;
 
        default:
@@ -1075,19 +1103,14 @@ build_static_name (context, name)
   return get_identifier ((char *)obstack_base (&scratch_obstack));
 }
 \f
-/* Change the name of a function definition so that it may be
-   overloaded. NAME is the name of the function to overload,
-   PARMS is the parameter list (which determines what name the
-   final function obtains).
-
-   FOR_METHOD is 1 if this overload is being performed
-   for a method, rather than a function type.  It is 2 if
-   this overload is being performed for a constructor.  */
-
-tree
-build_decl_overload (dname, parms, for_method)
+tree 
+build_decl_overload_real (dname, parms, ret_type, tparms, targs,
+                         for_method) 
      tree dname;
      tree parms;
+     tree ret_type;
+     tree tparms;
+     tree targs;
      int for_method;
 {
   char *name = IDENTIFIER_POINTER (dname);
@@ -1121,6 +1144,8 @@ build_decl_overload (dname, parms, for_method)
       /* We can get away without doing this.  */
       OB_PUTC ('M');
 #endif
+      if (tparms != NULL_TREE)
+       OB_PUTC ('H');
       {
        tree this_type = TREE_VALUE (parms);
 
@@ -1133,12 +1158,18 @@ build_decl_overload (dname, parms, for_method)
       }
     }
   else
-    OB_PUTC ('F');
+    OB_PUTC ((tparms != NULL_TREE) ? 'H' : 'F');
+
+  if (tparms)
+    {
+      build_template_parm_names (tparms, targs);
+      OB_PUTC ('_');
+    }
 
   if (parms == NULL_TREE)
-    OB_PUTC2 ('e', '\0');
+    OB_PUTC ('e');
   else if (parms == void_list_node)
-    OB_PUTC2 ('v', '\0');
+    OB_PUTC ('v');
   else
     {
       ALLOCATE_TYPEVEC (parms);
@@ -1151,14 +1182,23 @@ build_decl_overload (dname, parms, for_method)
          TREE_USED (TREE_VALUE (parms)) = 1;
 
          if (TREE_CHAIN (parms))
-           build_overload_name (TREE_CHAIN (parms), 0, 1);
+           build_overload_name (TREE_CHAIN (parms), 0, 0);
          else
-           OB_PUTC2 ('e', '\0');
+           OB_PUTC ('e');
        }
       else
-       build_overload_name (parms, 0, 1);
+       build_overload_name (parms, 0, 0);
       DEALLOCATE_TYPEVEC (parms);
     }
+
+  if (ret_type != NULL_TREE)
+    {
+      /* Add the return type. */
+      OB_PUTC ('_');
+      build_overload_name (ret_type, 0, 0);
+    }
+
+  OB_FINISH ();
   {
     tree n = get_identifier (obstack_base (&scratch_obstack));
     if (IDENTIFIER_OPNAME_P (dname))
@@ -1167,6 +1207,43 @@ build_decl_overload (dname, parms, for_method)
   }
 }
 
+/* Change the name of a function definition so that it may be
+   overloaded. NAME is the name of the function to overload,
+   PARMS is the parameter list (which determines what name the
+   final function obtains).
+
+   FOR_METHOD is 1 if this overload is being performed
+   for a method, rather than a function type.  It is 2 if
+   this overload is being performed for a constructor.  */
+
+tree
+build_decl_overload (dname, parms, for_method)
+     tree dname;
+     tree parms;
+     int for_method;
+{
+  return build_decl_overload_real (dname, parms, NULL_TREE, NULL_TREE,
+                                  NULL_TREE, for_method); 
+}
+
+
+/* Like build_decl_overload, but for template functions. */
+
+tree
+build_template_decl_overload (dname, parms, ret_type, tparms, targs,
+                             for_method) 
+     tree dname;
+     tree parms;
+     tree ret_type;
+     tree tparms;
+     tree targs;
+     int for_method;
+{
+  return build_decl_overload_real (dname, parms, ret_type, tparms, targs,
+                                  for_method); 
+}
+
+
 /* Build an overload name for the type expression TYPE.  */
 
 tree
index 848ee1724d8f4bf856e932da0d3ff80791a9c768..1e8529d990cfc9b05c132d790c3e076ac94a06de 100644 (file)
@@ -8,89 +8,90 @@
 #define        IDENTIFIER      258
 #define        TYPENAME        259
 #define        SELFNAME        260
-#define        SCSPEC  261
-#define        TYPESPEC        262
-#define        CV_QUALIFIER    263
-#define        CONSTANT        264
-#define        STRING  265
-#define        ELLIPSIS        266
-#define        SIZEOF  267
-#define        ENUM    268
-#define        IF      269
-#define        ELSE    270
-#define        WHILE   271
-#define        DO      272
-#define        FOR     273
-#define        SWITCH  274
-#define        CASE    275
-#define        DEFAULT 276
-#define        BREAK   277
-#define        CONTINUE        278
-#define        RETURN  279
-#define        GOTO    280
-#define        ASM_KEYWORD     281
-#define        GCC_ASM_KEYWORD 282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        SIGOF   285
-#define        ATTRIBUTE       286
-#define        EXTENSION       287
-#define        LABEL   288
-#define        REALPART        289
-#define        IMAGPART        290
-#define        AGGR    291
-#define        VISSPEC 292
-#define        DELETE  293
-#define        NEW     294
-#define        THIS    295
-#define        OPERATOR        296
-#define        CXX_TRUE        297
-#define        CXX_FALSE       298
-#define        NAMESPACE       299
-#define        TYPENAME_KEYWORD        300
-#define        USING   301
-#define        LEFT_RIGHT      302
-#define        TEMPLATE        303
-#define        TYPEID  304
-#define        DYNAMIC_CAST    305
-#define        STATIC_CAST     306
-#define        REINTERPRET_CAST        307
-#define        CONST_CAST      308
-#define        SCOPE   309
-#define        EMPTY   310
-#define        PTYPENAME       311
-#define        NSNAME  312
-#define        THROW   313
-#define        ASSIGN  314
-#define        OROR    315
-#define        ANDAND  316
-#define        MIN_MAX 317
-#define        EQCOMPARE       318
-#define        ARITHCOMPARE    319
-#define        LSHIFT  320
-#define        RSHIFT  321
-#define        POINTSAT_STAR   322
-#define        DOT_STAR        323
-#define        UNARY   324
-#define        PLUSPLUS        325
-#define        MINUSMINUS      326
-#define        HYPERUNARY      327
-#define        PAREN_STAR_PAREN        328
-#define        POINTSAT        329
-#define        TRY     330
-#define        CATCH   331
-#define        TYPENAME_ELLIPSIS       332
-#define        PRE_PARSED_FUNCTION_DECL        333
-#define        EXTERN_LANG_STRING      334
-#define        ALL     335
-#define        PRE_PARSED_CLASS_DECL   336
-#define        DEFARG  337
-#define        DEFARG_MARKER   338
-#define        TYPENAME_DEFN   339
-#define        IDENTIFIER_DEFN 340
-#define        PTYPENAME_DEFN  341
-#define        END_OF_LINE     342
-#define        END_OF_SAVED_INPUT      343
+#define        PFUNCNAME       261
+#define        SCSPEC  262
+#define        TYPESPEC        263
+#define        CV_QUALIFIER    264
+#define        CONSTANT        265
+#define        STRING  266
+#define        ELLIPSIS        267
+#define        SIZEOF  268
+#define        ENUM    269
+#define        IF      270
+#define        ELSE    271
+#define        WHILE   272
+#define        DO      273
+#define        FOR     274
+#define        SWITCH  275
+#define        CASE    276
+#define        DEFAULT 277
+#define        BREAK   278
+#define        CONTINUE        279
+#define        RETURN  280
+#define        GOTO    281
+#define        ASM_KEYWORD     282
+#define        GCC_ASM_KEYWORD 283
+#define        TYPEOF  284
+#define        ALIGNOF 285
+#define        SIGOF   286
+#define        ATTRIBUTE       287
+#define        EXTENSION       288
+#define        LABEL   289
+#define        REALPART        290
+#define        IMAGPART        291
+#define        AGGR    292
+#define        VISSPEC 293
+#define        DELETE  294
+#define        NEW     295
+#define        THIS    296
+#define        OPERATOR        297
+#define        CXX_TRUE        298
+#define        CXX_FALSE       299
+#define        NAMESPACE       300
+#define        TYPENAME_KEYWORD        301
+#define        USING   302
+#define        LEFT_RIGHT      303
+#define        TEMPLATE        304
+#define        TYPEID  305
+#define        DYNAMIC_CAST    306
+#define        STATIC_CAST     307
+#define        REINTERPRET_CAST        308
+#define        CONST_CAST      309
+#define        SCOPE   310
+#define        EMPTY   311
+#define        PTYPENAME       312
+#define        NSNAME  313
+#define        THROW   314
+#define        ASSIGN  315
+#define        OROR    316
+#define        ANDAND  317
+#define        MIN_MAX 318
+#define        EQCOMPARE       319
+#define        ARITHCOMPARE    320
+#define        LSHIFT  321
+#define        RSHIFT  322
+#define        POINTSAT_STAR   323
+#define        DOT_STAR        324
+#define        UNARY   325
+#define        PLUSPLUS        326
+#define        MINUSMINUS      327
+#define        HYPERUNARY      328
+#define        PAREN_STAR_PAREN        329
+#define        POINTSAT        330
+#define        TRY     331
+#define        CATCH   332
+#define        TYPENAME_ELLIPSIS       333
+#define        PRE_PARSED_FUNCTION_DECL        334
+#define        EXTERN_LANG_STRING      335
+#define        ALL     336
+#define        PRE_PARSED_CLASS_DECL   337
+#define        DEFARG  338
+#define        DEFARG_MARKER   339
+#define        TYPENAME_DEFN   340
+#define        IDENTIFIER_DEFN 341
+#define        PTYPENAME_DEFN  342
+#define        END_OF_LINE     343
+#define        END_OF_SAVED_INPUT      344
 
 #line 29 "parse.y"
 
@@ -164,7 +165,7 @@ empty_parms ()
 
 #line 101 "parse.y"
 typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE;
-#line 284 "parse.y"
+#line 289 "parse.y"
 
 /* List of types and structure classes of the current declaration.  */
 static tree current_declspecs = NULL_TREE;
@@ -193,26 +194,26 @@ extern tree combine_strings               PROTO((tree));
 
 
 
-#define        YYFINAL         1487
+#define        YYFINAL         1529
 #define        YYFLAG          -32768
-#define        YYNTBASE        113
+#define        YYNTBASE        114
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 343 ? yytranslate[x] : 371)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 344 ? yytranslate[x] : 376)
 
 static const char yytranslate[] = {     0,
      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,   111,     2,     2,     2,    82,    70,     2,    93,
-   109,    80,    78,    59,    79,    92,    81,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,    62,    60,    74,
-    64,    75,    65,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,   112,     2,     2,     2,    83,    71,     2,    94,
+   110,    81,    79,    60,    80,    93,    82,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,    63,    61,    75,
+    65,    76,    66,     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,
-    94,     2,   112,    69,     2,     2,     2,     2,     2,     2,
+    95,     2,   113,    70,     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,    58,    68,   110,    88,     2,     2,     2,     2,
+     2,     2,    59,    69,   111,    89,     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,     2,     2,
@@ -231,10 +232,10 @@ static const char yytranslate[] = {     0,
     26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
     36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
     46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-    56,    57,    61,    63,    66,    67,    71,    72,    73,    76,
-    77,    83,    84,    85,    86,    87,    89,    90,    91,    95,
+    56,    57,    58,    62,    64,    67,    68,    72,    73,    74,
+    77,    78,    84,    85,    86,    87,    88,    90,    91,    92,
     96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108
+   106,   107,   108,   109
 };
 
 #if YYDEBUG != 0
@@ -263,419 +264,428 @@ static const short yyprhs[] = {     0,
    691,   694,   698,   703,   705,   708,   714,   716,   720,   724,
    728,   732,   736,   740,   744,   748,   752,   756,   760,   764,
    768,   772,   776,   780,   784,   788,   792,   798,   802,   806,
-   808,   811,   815,   817,   819,   821,   823,   825,   827,   829,
-   831,   834,   837,   841,   843,   845,   849,   851,   853,   855,
-   857,   861,   865,   869,   870,   875,   880,   883,   888,   891,
-   894,   896,   901,   903,   911,   919,   927,   935,   940,   945,
-   948,   951,   953,   958,   961,   964,   967,   973,   977,   983,
-   987,   992,   999,  1002,  1004,  1007,  1009,  1012,  1014,  1016,
-  1018,  1021,  1022,  1025,  1028,  1032,  1036,  1040,  1043,  1046,
-  1049,  1051,  1053,  1055,  1058,  1061,  1064,  1067,  1069,  1071,
-  1073,  1075,  1078,  1081,  1085,  1089,  1093,  1098,  1100,  1103,
-  1106,  1109,  1111,  1113,  1115,  1118,  1121,  1124,  1126,  1128,
-  1131,  1134,  1138,  1140,  1143,  1145,  1147,  1149,  1154,  1159,
-  1164,  1169,  1171,  1173,  1175,  1177,  1181,  1183,  1187,  1189,
-  1193,  1194,  1199,  1200,  1207,  1211,  1212,  1219,  1223,  1224,
-  1231,  1235,  1236,  1243,  1247,  1248,  1250,  1252,  1255,  1262,
-  1264,  1268,  1269,  1271,  1276,  1283,  1288,  1290,  1292,  1294,
-  1296,  1298,  1302,  1303,  1306,  1308,  1311,  1315,  1320,  1322,
-  1324,  1328,  1333,  1340,  1344,  1350,  1352,  1357,  1361,  1365,
-  1366,  1370,  1374,  1378,  1379,  1382,  1385,  1386,  1394,  1399,
-  1400,  1407,  1411,  1414,  1417,  1420,  1421,  1422,  1432,  1434,
-  1435,  1437,  1438,  1440,  1442,  1445,  1448,  1451,  1454,  1457,
-  1460,  1464,  1469,  1473,  1476,  1480,  1481,  1483,  1487,  1490,
-  1493,  1495,  1497,  1498,  1501,  1505,  1507,  1512,  1514,  1518,
-  1520,  1522,  1527,  1532,  1535,  1538,  1542,  1546,  1548,  1549,
-  1551,  1554,  1559,  1563,  1565,  1568,  1571,  1574,  1577,  1580,
-  1583,  1586,  1588,  1591,  1594,  1597,  1602,  1607,  1610,  1612,
-  1618,  1623,  1625,  1628,  1629,  1631,  1635,  1636,  1638,  1642,
-  1644,  1646,  1648,  1650,  1655,  1660,  1665,  1670,  1675,  1679,
-  1684,  1689,  1694,  1699,  1703,  1705,  1709,  1711,  1715,  1718,
-  1720,  1727,  1728,  1731,  1733,  1736,  1737,  1740,  1745,  1750,
-  1753,  1758,  1762,  1766,  1769,  1772,  1776,  1778,  1780,  1783,
-  1785,  1787,  1790,  1793,  1798,  1803,  1807,  1811,  1814,  1816,
-  1820,  1824,  1827,  1830,  1834,  1836,  1840,  1844,  1847,  1850,
-  1854,  1856,  1861,  1865,  1870,  1874,  1876,  1879,  1882,  1884,
-  1887,  1892,  1897,  1900,  1902,  1904,  1906,  1908,  1911,  1914,
-  1917,  1920,  1923,  1925,  1928,  1931,  1933,  1936,  1939,  1942,
-  1945,  1948,  1951,  1954,  1957,  1959,  1962,  1965,  1969,  1971,
-  1975,  1978,  1982,  1985,  1988,  1992,  1994,  1998,  2003,  2007,
-  2010,  2013,  2015,  2019,  2022,  2025,  2027,  2030,  2034,  2036,
-  2040,  2042,  2049,  2054,  2059,  2063,  2069,  2073,  2077,  2081,
-  2084,  2086,  2088,  2091,  2094,  2097,  2098,  2099,  2100,  2102,
-  2104,  2107,  2111,  2113,  2116,  2117,  2123,  2124,  2125,  2132,
-  2134,  2135,  2140,  2142,  2144,  2146,  2149,  2150,  2151,  2158,
-  2160,  2161,  2162,  2170,  2171,  2172,  2180,  2181,  2182,  2183,
-  2184,  2199,  2200,  2201,  2211,  2212,  2218,  2219,  2227,  2228,
-  2233,  2236,  2239,  2242,  2246,  2253,  2262,  2273,  2286,  2291,
-  2295,  2298,  2301,  2303,  2305,  2306,  2307,  2314,  2315,  2316,
-  2322,  2324,  2327,  2328,  2329,  2330,  2339,  2341,  2343,  2347,
-  2351,  2354,  2357,  2360,  2363,  2366,  2368,  2371,  2372,  2374,
-  2375,  2377,  2379,  2380,  2382,  2384,  2388,  2393,  2395,  2399,
-  2400,  2402,  2404,  2406,  2409,  2412,  2415,  2417,  2419,  2422,
-  2425,  2428,  2431,  2432,  2436,  2438,  2440,  2442,  2445,  2448,
-  2451,  2456,  2459,  2462,  2465,  2468,  2471,  2474,  2476,  2479,
-  2481,  2484,  2486,  2488,  2489,  2490,  2492,  2493,  2498,  2501,
-  2503,  2505,  2509,  2510,  2514,  2518,  2522,  2524,  2527,  2530,
-  2533,  2536,  2539,  2542,  2545,  2548,  2551,  2554,  2557,  2560,
-  2563,  2566,  2569,  2572,  2575,  2578,  2581,  2584,  2587,  2590,
-  2593,  2597,  2600,  2603,  2606,  2609,  2613,  2616,  2619,  2624,
-  2629,  2633
+   808,   811,   815,   817,   819,   821,   823,   825,   830,   834,
+   839,   843,   849,   855,   861,   863,   865,   867,   869,   872,
+   875,   879,   884,   889,   891,   893,   895,   899,   901,   903,
+   905,   907,   911,   915,   919,   920,   925,   930,   933,   938,
+   941,   944,   946,   951,   953,   961,   969,   977,   985,   990,
+   995,   998,  1001,  1003,  1008,  1011,  1014,  1020,  1024,  1027,
+  1030,  1036,  1040,  1046,  1050,  1055,  1062,  1065,  1067,  1070,
+  1072,  1075,  1077,  1079,  1081,  1084,  1085,  1088,  1091,  1095,
+  1099,  1103,  1106,  1109,  1112,  1114,  1116,  1118,  1121,  1124,
+  1127,  1130,  1132,  1134,  1136,  1138,  1141,  1144,  1148,  1152,
+  1156,  1161,  1163,  1166,  1169,  1172,  1174,  1176,  1178,  1181,
+  1184,  1187,  1189,  1191,  1194,  1197,  1201,  1203,  1206,  1208,
+  1210,  1212,  1217,  1222,  1227,  1232,  1234,  1236,  1238,  1240,
+  1244,  1246,  1250,  1252,  1256,  1257,  1262,  1263,  1270,  1274,
+  1275,  1282,  1286,  1287,  1294,  1298,  1299,  1306,  1310,  1311,
+  1313,  1315,  1318,  1325,  1327,  1331,  1332,  1334,  1339,  1346,
+  1351,  1353,  1355,  1357,  1359,  1361,  1365,  1366,  1369,  1371,
+  1374,  1378,  1383,  1385,  1387,  1391,  1396,  1403,  1407,  1413,
+  1415,  1420,  1424,  1428,  1429,  1433,  1437,  1441,  1442,  1445,
+  1448,  1449,  1457,  1462,  1463,  1470,  1474,  1477,  1480,  1483,
+  1484,  1485,  1486,  1497,  1499,  1500,  1502,  1503,  1505,  1507,
+  1510,  1513,  1516,  1519,  1522,  1525,  1529,  1534,  1538,  1541,
+  1545,  1546,  1548,  1552,  1555,  1558,  1560,  1562,  1563,  1566,
+  1570,  1572,  1577,  1579,  1583,  1585,  1587,  1592,  1597,  1600,
+  1603,  1607,  1611,  1613,  1614,  1616,  1619,  1624,  1628,  1630,
+  1633,  1636,  1639,  1642,  1645,  1648,  1651,  1653,  1656,  1659,
+  1662,  1667,  1672,  1675,  1677,  1683,  1688,  1690,  1693,  1694,
+  1696,  1700,  1701,  1703,  1707,  1709,  1711,  1713,  1715,  1720,
+  1725,  1730,  1735,  1740,  1744,  1749,  1754,  1759,  1764,  1768,
+  1770,  1774,  1776,  1780,  1783,  1785,  1792,  1793,  1796,  1798,
+  1801,  1802,  1805,  1810,  1815,  1818,  1823,  1827,  1831,  1834,
+  1837,  1841,  1843,  1845,  1848,  1850,  1852,  1855,  1858,  1863,
+  1868,  1872,  1876,  1879,  1881,  1885,  1889,  1892,  1895,  1899,
+  1901,  1905,  1909,  1912,  1915,  1919,  1921,  1926,  1930,  1935,
+  1939,  1941,  1944,  1947,  1950,  1953,  1956,  1958,  1961,  1966,
+  1971,  1974,  1976,  1978,  1980,  1982,  1985,  1988,  1991,  1994,
+  1997,  1999,  2002,  2005,  2007,  2010,  2013,  2016,  2019,  2022,
+  2025,  2028,  2031,  2033,  2036,  2039,  2043,  2045,  2049,  2052,
+  2056,  2059,  2062,  2066,  2068,  2072,  2077,  2081,  2084,  2087,
+  2089,  2093,  2096,  2099,  2101,  2104,  2108,  2110,  2114,  2116,
+  2123,  2128,  2133,  2137,  2143,  2147,  2151,  2155,  2158,  2160,
+  2162,  2165,  2168,  2171,  2172,  2173,  2174,  2176,  2178,  2181,
+  2185,  2187,  2190,  2191,  2197,  2198,  2199,  2206,  2208,  2209,
+  2214,  2216,  2218,  2220,  2223,  2224,  2225,  2232,  2234,  2235,
+  2236,  2244,  2245,  2246,  2254,  2255,  2256,  2257,  2258,  2273,
+  2274,  2275,  2285,  2286,  2292,  2293,  2301,  2302,  2307,  2310,
+  2313,  2316,  2320,  2327,  2336,  2347,  2360,  2365,  2369,  2372,
+  2375,  2377,  2379,  2380,  2381,  2388,  2389,  2390,  2396,  2398,
+  2401,  2402,  2403,  2404,  2413,  2415,  2417,  2421,  2425,  2428,
+  2431,  2434,  2437,  2440,  2442,  2445,  2446,  2448,  2449,  2451,
+  2453,  2454,  2456,  2458,  2462,  2467,  2469,  2473,  2474,  2476,
+  2478,  2480,  2483,  2486,  2489,  2491,  2493,  2496,  2499,  2502,
+  2505,  2506,  2510,  2512,  2514,  2516,  2519,  2522,  2525,  2530,
+  2533,  2536,  2539,  2542,  2545,  2548,  2550,  2553,  2555,  2558,
+  2560,  2562,  2563,  2564,  2566,  2567,  2572,  2575,  2577,  2579,
+  2583,  2584,  2588,  2592,  2596,  2598,  2601,  2604,  2607,  2610,
+  2613,  2616,  2619,  2622,  2625,  2628,  2631,  2634,  2637,  2640,
+  2643,  2646,  2649,  2652,  2655,  2658,  2661,  2664,  2667,  2671,
+  2674,  2677,  2680,  2683,  2687,  2690,  2693,  2698,  2703,  2707
 };
 
 static const short yyrhs[] = {    -1,
-   114,     0,     0,   115,   121,     0,   114,   121,     0,   114,
-     0,     0,     0,     0,    32,     0,    26,     0,    27,     0,
-     0,   122,   123,     0,   139,   138,     0,   135,     0,   134,
-     0,   120,    93,   190,   109,    60,     0,   128,    58,   116,
-   110,     0,   128,   117,   139,   118,   138,     0,   128,   117,
-   135,   118,     0,     0,    44,   154,    58,   124,   116,   110,
-     0,     0,    44,    58,   125,   116,   110,     0,    44,   154,
-    64,   127,    60,     0,   126,    60,     0,    46,    44,   127,
-    60,     0,   119,   123,     0,    46,   282,     0,    46,   295,
-   282,     0,    46,   295,   182,     0,   182,     0,   282,     0,
-   295,   282,     0,   295,   182,     0,    99,     0,   128,    99,
-     0,     0,    48,    74,   130,   131,    75,     0,    48,    74,
-    75,     0,   133,     0,   131,    59,   133,     0,   239,     0,
-   239,   154,     0,    45,     0,    45,   154,     0,   132,     0,
-   132,    64,   196,     0,   362,     0,   362,    64,   180,     0,
-   129,   123,     0,   129,     1,     0,   207,    60,     0,   200,
-   206,    60,     0,   197,   205,    60,     0,   200,    60,     0,
-   157,    60,     0,   197,    60,     0,     1,    60,     0,     1,
-   110,     0,    60,     0,   191,     0,   150,     0,     0,   149,
-     0,   149,    60,     0,     0,   108,     0,   145,   137,   136,
-   307,     0,   145,   137,   332,     0,   145,   137,     1,     0,
-     0,   287,     5,    93,   141,   353,   109,   269,   365,     0,
-   287,     5,    47,   269,   365,     0,     0,   295,   287,     5,
-    93,   142,   353,   109,   269,   365,     0,   295,   287,     5,
-    47,   269,   365,     0,     0,   287,   159,    93,   143,   353,
-   109,   269,   365,     0,   287,   159,    47,   269,   365,     0,
-     0,   295,   287,   159,    93,   144,   353,   109,   269,   365,
-     0,   295,   287,   159,    47,   269,   365,     0,   197,   194,
-     0,   200,   279,     0,   279,     0,   200,   140,     0,   140,
-     0,     5,    93,   353,   109,   269,   365,     0,     5,    47,
-   269,   365,     0,   159,    93,   353,   109,   269,   365,     0,
-   159,    47,   269,   365,     0,   200,   146,     0,   146,     0,
-   197,   194,     0,   200,   279,     0,   279,     0,   200,   140,
-     0,   140,     0,   129,   147,     0,    24,     3,     0,   148,
-   224,     0,   148,    93,   174,   109,     0,   148,    47,     0,
-    62,   151,   152,     0,     0,     0,   153,     0,   152,    59,
-   153,     0,   152,     1,     0,    93,   174,   109,     0,    47,
-     0,   155,    93,   174,   109,     0,   155,    47,     0,   275,
-    93,   174,   109,     0,   275,    47,     0,   289,    93,   174,
-   109,     0,   289,    47,     0,     3,     0,     4,     0,     5,
-     0,    56,     0,    57,     0,     3,     0,    56,     0,    57,
-     0,   105,     0,   104,     0,   106,     0,    48,   203,    60,
-     0,    48,   197,   194,     0,    48,   279,     0,    48,   140,
-     0,     6,    48,   203,    60,     0,     6,    48,   197,   194,
-     0,     6,    48,   279,     0,     6,    48,   140,     0,    56,
-    74,   161,   160,     0,    56,    74,   160,     0,     4,    74,
-   161,   160,     0,     4,    74,   160,     0,   159,     0,     5,
-    74,   161,   160,     0,     5,    74,   160,     0,    75,     0,
-    77,     0,   162,     0,   161,    59,   162,     0,   196,     0,
-   180,     0,    79,     0,    78,     0,    86,     0,    87,     0,
-   111,     0,   173,     0,   180,     0,    47,     0,    93,   164,
-   109,     0,    47,     0,    93,   168,   109,     0,     0,   168,
-     0,     1,     0,     0,   343,   194,   208,   217,    64,   169,
-   225,     0,   164,     0,   110,     0,   304,   300,   110,     0,
-   304,   300,     1,   110,     0,   304,     1,   110,     0,     0,
-    58,   172,   170,     0,   316,     0,   180,    59,   180,     0,
-   180,    59,     1,     0,   173,    59,   180,     0,   173,    59,
-     1,     0,   180,     0,   173,     0,   185,     0,   119,   179,
-     0,    80,   179,     0,    70,   179,     0,    88,   179,     0,
-   163,   179,     0,    67,   154,     0,    12,   175,     0,    12,
-    93,   196,   109,     0,    29,   175,     0,    29,    93,   196,
-   109,     0,   187,   268,     0,   187,   268,   177,     0,   187,
-   176,   268,     0,   187,   176,   268,   177,     0,   187,    93,
-   196,   109,     0,   187,    93,   196,   109,   177,     0,   187,
-   176,    93,   196,   109,     0,   187,   176,    93,   196,   109,
-   177,     0,   188,   179,     0,   188,    94,   112,   179,     0,
-   188,    94,   164,   112,   179,     0,    34,   179,     0,    35,
-   179,     0,    93,   174,   109,     0,    58,   174,   110,     0,
-    93,   174,   109,     0,    47,     0,    93,   203,   109,     0,
-    64,   225,     0,    93,   196,   109,     0,   178,    93,   196,
-   109,     0,   175,     0,   178,   175,     0,   178,    58,   226,
-   237,   110,     0,   179,     0,   180,    83,   180,     0,   180,
-    84,   180,     0,   180,    78,   180,     0,   180,    79,   180,
-     0,   180,    80,   180,     0,   180,    81,   180,     0,   180,
-    82,   180,     0,   180,    76,   180,     0,   180,    77,   180,
-     0,   180,    73,   180,     0,   180,    74,   180,     0,   180,
-    75,   180,     0,   180,    72,   180,     0,   180,    71,   180,
-     0,   180,    70,   180,     0,   180,    68,   180,     0,   180,
-    69,   180,     0,   180,    67,   180,     0,   180,    66,   180,
-     0,   180,    65,   348,    62,   180,     0,   180,    64,   180,
-     0,   180,    63,   180,     0,    61,     0,    61,   180,     0,
-    88,   363,   154,     0,   370,     0,     3,     0,    56,     0,
-    57,     0,   181,     0,     4,     0,     5,     0,   181,     0,
-    80,   183,     0,    70,   183,     0,    93,   183,   109,     0,
-   281,     0,   181,     0,    93,   183,   109,     0,   181,     0,
-     9,     0,   189,     0,   190,     0,    93,   164,   109,     0,
-    93,   183,   109,     0,    93,     1,   109,     0,     0,    93,
-   186,   308,   109,     0,   185,    93,   174,   109,     0,   185,
-    47,     0,   185,    94,   164,   112,     0,   185,    86,     0,
-   185,    87,     0,    40,     0,     8,    93,   174,   109,     0,
-   285,     0,    50,    74,   196,    75,    93,   164,   109,     0,
-    51,    74,   196,    75,    93,   164,   109,     0,    52,    74,
-   196,    75,    93,   164,   109,     0,    53,    74,   196,    75,
-    93,   164,   109,     0,    49,    93,   164,   109,     0,    49,
-    93,   196,   109,     0,   295,     3,     0,   295,   370,     0,
-   284,     0,   284,    93,   174,   109,     0,   284,    47,     0,
-   192,   182,     0,   192,   284,     0,   192,   182,    93,   174,
-   109,     0,   192,   182,    47,     0,   192,   284,    93,   174,
-   109,     0,   192,   284,    47,     0,   192,    88,     7,    47,
-     0,   192,     7,    54,    88,     7,    47,     0,   192,     1,
-     0,    39,     0,   295,    39,     0,    38,     0,   295,   188,
-     0,    42,     0,    43,     0,    10,     0,   190,    10,     0,
-     0,   185,    92,     0,   185,    91,     0,   203,   205,    60,
-     0,   197,   205,    60,     0,   200,   206,    60,     0,   197,
-    60,     0,   200,    60,     0,   119,   193,     0,   274,     0,
-   279,     0,    47,     0,   195,    47,     0,   201,   298,     0,
-   270,   298,     0,   203,   298,     0,   201,     0,   270,     0,
-   201,     0,   198,     0,   200,   203,     0,   203,   199,     0,
-   203,   202,   199,     0,   200,   203,   199,     0,   200,   203,
-   202,     0,   200,   203,   202,   199,     0,     6,     0,   199,
-   204,     0,   199,     6,     0,   199,   218,     0,   218,     0,
-   270,     0,     6,     0,   200,     8,     0,   200,     6,     0,
-   200,   218,     0,   218,     0,   203,     0,   270,   203,     0,
-   203,   202,     0,   270,   203,   202,     0,   204,     0,   202,
-   204,     0,   232,     0,     7,     0,   276,     0,    28,    93,
-   164,   109,     0,    28,    93,   196,   109,     0,    30,    93,
-   164,   109,     0,    30,    93,   196,   109,     0,     7,     0,
-     8,     0,   232,     0,   209,     0,   205,    59,   211,     0,
-   213,     0,   206,    59,   211,     0,   215,     0,   207,    59,
-   211,     0,     0,   120,    93,   190,   109,     0,     0,   194,
-   208,   217,    64,   210,   225,     0,   194,   208,   217,     0,
-     0,   194,   208,   217,    64,   212,   225,     0,   194,   208,
-   217,     0,     0,   279,   208,   217,    64,   214,   225,     0,
-   279,   208,   217,     0,     0,   279,   208,   217,    64,   216,
-   225,     0,   279,   208,   217,     0,     0,   218,     0,   219,
-     0,   218,   219,     0,    31,    93,    93,   220,   109,   109,
-     0,   221,     0,   220,    59,   221,     0,     0,   222,     0,
-   222,    93,     3,   109,     0,   222,    93,     3,    59,   174,
-   109,     0,   222,    93,   174,   109,     0,   154,     0,     6,
-     0,     7,     0,     8,     0,   154,     0,   223,    59,   154,
-     0,     0,    64,   225,     0,   180,     0,    58,   110,     0,
-    58,   226,   110,     0,    58,   226,    59,   110,     0,     1,
-     0,   225,     0,   226,    59,   225,     0,    94,   180,   112,
-   225,     0,   226,    59,    20,   180,    62,   225,     0,   154,
-    62,   225,     0,   226,    59,   154,    62,   225,     0,    98,
-     0,   227,   137,   136,   307,     0,   227,   137,   332,     0,
-   227,   137,     1,     0,     0,   229,   228,   138,     0,   103,
-   180,   108,     0,   103,     1,   108,     0,     0,   231,   230,
-     0,   231,     1,     0,     0,    13,   154,    58,   233,   266,
-   238,   110,     0,    13,   154,    58,   110,     0,     0,    13,
-    58,   234,   266,   238,   110,     0,    13,    58,   110,     0,
-    13,   154,     0,    13,   293,     0,    45,   289,     0,     0,
-     0,   246,   252,   254,   110,   217,   235,   231,   236,   229,
-     0,   246,     0,     0,    59,     0,     0,    59,     0,    36,
-     0,   239,     6,     0,   239,     7,     0,   239,     8,     0,
-   239,    36,     0,   239,   154,     0,   239,   156,     0,   239,
-   287,   154,     0,   239,   295,   287,   154,     0,   239,   295,
-   154,     0,   239,   158,     0,   239,   287,   158,     0,     0,
-   240,     0,   241,   243,   247,     0,   242,   247,     0,   239,
-    58,     0,   245,     0,   244,     0,     0,    62,   363,     0,
-    62,   363,   248,     0,   249,     0,   248,    59,   363,   249,
-     0,   250,     0,   251,   363,   250,     0,   289,     0,   275,
-     0,    30,    93,   164,   109,     0,    30,    93,   196,   109,
-     0,    37,   363,     0,     6,   363,     0,   251,    37,   363,
-     0,   251,     6,   363,     0,    58,     0,     0,   253,     0,
-   253,   255,     0,   254,    37,    62,   255,     0,   254,    37,
-    62,     0,   256,     0,   255,   256,     0,   257,    60,     0,
-   257,   110,     0,   147,    62,     0,   147,    95,     0,   147,
-    24,     0,   147,    58,     0,    60,     0,   119,   256,     0,
-   197,   258,     0,   200,   259,     0,   279,   208,   217,   224,
-     0,   140,   208,   217,   224,     0,    62,   180,     0,     1,
-     0,   200,   146,   208,   217,   224,     0,   146,   208,   217,
-   224,     0,   126,     0,   129,   257,     0,     0,   260,     0,
-   258,    59,   261,     0,     0,   263,     0,   259,    59,   265,
-     0,   262,     0,   263,     0,   264,     0,   265,     0,   274,
-   208,   217,   224,     0,     4,    62,   180,   217,     0,   279,
-   208,   217,   224,     0,   140,   208,   217,   224,     0,     3,
-    62,   180,   217,     0,    62,   180,   217,     0,   274,   208,
-   217,   224,     0,     4,    62,   180,   217,     0,   279,   208,
-   217,   224,     0,     3,    62,   180,   217,     0,    62,   180,
-   217,     0,   267,     0,   266,    59,   267,     0,   154,     0,
-   154,    64,   180,     0,   343,   296,     0,   343,     0,    93,
-   196,   109,    94,   164,   112,     0,     0,   269,     8,     0,
-     8,     0,   270,     8,     0,     0,   271,   164,     0,   271,
-    93,   174,   109,     0,   271,    93,   353,   109,     0,   271,
-    47,     0,   271,    93,     1,   109,     0,    80,   270,   274,
-     0,    70,   270,   274,     0,    80,   274,     0,    70,   274,
-     0,   294,   269,   274,     0,   278,     0,   286,     0,   295,
-   286,     0,   275,     0,   277,     0,   295,   277,     0,   287,
-   286,     0,   278,   273,   269,   365,     0,   278,    94,   272,
-   112,     0,   278,    94,   112,     0,    93,   274,   109,     0,
-   287,   286,     0,   286,     0,    80,   270,   279,     0,    70,
-   270,   279,     0,    80,   279,     0,    70,   279,     0,   294,
-   269,   279,     0,   184,     0,    80,   270,   279,     0,    70,
-   270,   279,     0,    80,   280,     0,    70,   280,     0,   294,
-   269,   279,     0,   281,     0,   184,   273,   269,   365,     0,
-    93,   280,   109,     0,   184,    94,   272,   112,     0,   184,
-    94,   112,     0,   283,     0,   287,   182,     0,   287,   181,
-     0,   283,     0,   295,   283,     0,   203,    93,   174,   109,
-     0,   203,    93,   183,   109,     0,   203,   195,     0,     4,
-     0,     5,     0,   158,     0,   288,     0,   287,   288,     0,
-     4,    54,     0,     5,    54,     0,    57,    54,     0,   158,
-    54,     0,   290,     0,   295,   290,     0,   291,   154,     0,
-   292,     0,   291,   292,     0,     4,    54,     0,     5,    54,
-     0,   158,    54,     0,    56,    54,     0,     3,    54,     0,
-    57,    54,     0,   295,   286,     0,   277,     0,   295,   277,
-     0,   287,    80,     0,   295,   287,    80,     0,    54,     0,
-    80,   269,   296,     0,    80,   269,     0,    70,   269,   296,
-     0,    70,   269,     0,   294,   269,     0,   294,   269,   296,
-     0,   297,     0,    94,   164,   112,     0,   297,    94,   272,
-   112,     0,    80,   270,   298,     0,    80,   298,     0,    80,
-   270,     0,    80,     0,    70,   270,   298,     0,    70,   298,
-     0,    70,   270,     0,    70,     0,   294,   269,     0,   294,
-   269,   298,     0,   299,     0,    93,   298,   109,     0,    90,
-     0,   299,    93,   353,   109,   269,   365,     0,   299,    47,
-   269,   365,     0,   299,    94,   272,   112,     0,   299,    94,
-   112,     0,    93,   354,   109,   269,   365,     0,   178,   269,
-   365,     0,   195,   269,   365,     0,    94,   272,   112,     0,
-    94,   112,     0,   315,     0,   301,     0,   300,   315,     0,
-   300,   301,     0,     1,    60,     0,     0,     0,     0,   305,
-     0,   306,     0,   305,   306,     0,    33,   223,    60,     0,
-   308,     0,     1,   308,     0,     0,    58,   309,   302,   170,
-   303,     0,     0,     0,    14,   311,   302,   166,   312,   313,
-     0,   308,     0,     0,   302,   314,   316,   303,     0,   308,
-     0,   316,     0,   193,     0,   164,    60,     0,     0,     0,
-   310,    15,   317,   313,   318,   303,     0,   310,     0,     0,
-     0,    16,   319,   302,   166,   320,   171,   303,     0,     0,
-     0,    17,   321,   313,    16,   322,   165,    60,     0,     0,
-     0,     0,     0,    18,   323,    93,   346,   324,   302,   167,
-    60,   325,   348,   109,   326,   171,   303,     0,     0,     0,
-    19,   302,    93,   168,   109,   327,   313,   328,   303,     0,
-     0,    20,   180,    62,   329,   315,     0,     0,    20,   180,
-    11,   180,    62,   330,   315,     0,     0,    21,    62,   331,
-   315,     0,    22,    60,     0,    23,    60,     0,    24,    60,
-     0,    24,   164,    60,     0,   120,   347,    93,   190,   109,
-    60,     0,   120,   347,    93,   190,    62,   349,   109,    60,
-     0,   120,   347,    93,   190,    62,   349,    62,   349,   109,
-    60,     0,   120,   347,    93,   190,    62,   349,    62,   349,
-    62,   352,   109,    60,     0,    25,    80,   164,    60,     0,
-    25,   154,    60,     0,   345,   315,     0,   345,   110,     0,
-    60,     0,   335,     0,     0,     0,    95,   333,   136,   308,
-   334,   338,     0,     0,     0,    95,   336,   308,   337,   338,
-     0,   339,     0,   338,   339,     0,     0,     0,     0,    96,
-   340,   302,   344,   341,   308,   342,   303,     0,   201,     0,
-   270,     0,    93,    11,   109,     0,    93,   362,   109,     0,
-     3,    62,     0,    56,    62,     0,     4,    62,     0,     5,
-    62,     0,   348,    60,     0,   193,     0,    58,   170,     0,
-     0,     8,     0,     0,   164,     0,     1,     0,     0,   350,
-     0,   351,     0,   350,    59,   351,     0,    10,    93,   164,
-   109,     0,    10,     0,   352,    59,    10,     0,     0,   354,
-     0,   196,     0,   358,     0,   359,    11,     0,   358,    11,
-     0,   196,    11,     0,    11,     0,    97,     0,   358,    97,
-     0,   196,    97,     0,   358,    62,     0,   196,    62,     0,
-     0,    64,   356,   357,     0,   102,     0,   225,     0,   360,
-     0,   362,   355,     0,   359,   361,     0,   359,   364,     0,
-   359,   364,    64,   225,     0,   358,    59,     0,   196,    59,
-     0,   198,   194,     0,   201,   194,     0,   203,   194,     0,
-   198,   298,     0,   198,     0,   200,   279,     0,   362,     0,
-   362,   355,     0,   360,     0,   196,     0,     0,     0,   279,
-     0,     0,    61,    93,   367,   109,     0,    61,    47,     0,
-   196,     0,   366,     0,   367,    59,   366,     0,     0,    80,
-   269,   368,     0,    70,   269,   368,     0,   294,   269,   368,
-     0,    41,     0,   369,    80,     0,   369,    81,     0,   369,
-    82,     0,   369,    78,     0,   369,    79,     0,   369,    70,
-     0,   369,    68,     0,   369,    69,     0,   369,    88,     0,
-   369,    59,     0,   369,    73,     0,   369,    74,     0,   369,
-    75,     0,   369,    72,     0,   369,    63,     0,   369,    64,
-     0,   369,    76,     0,   369,    77,     0,   369,    86,     0,
-   369,    87,     0,   369,    67,     0,   369,    66,     0,   369,
-   111,     0,   369,    65,    62,     0,   369,    71,     0,   369,
-    91,     0,   369,    83,     0,   369,    47,     0,   369,    94,
-   112,     0,   369,    39,     0,   369,    38,     0,   369,    39,
-    94,   112,     0,   369,    38,    94,   112,     0,   369,   343,
-   368,     0,   369,     1,     0
+   115,     0,     0,   116,   122,     0,   115,   122,     0,   115,
+     0,     0,     0,     0,    33,     0,    27,     0,    28,     0,
+     0,   123,   124,     0,   140,   139,     0,   136,     0,   135,
+     0,   121,    94,   194,   110,    61,     0,   129,    59,   117,
+   111,     0,   129,   118,   140,   119,   139,     0,   129,   118,
+   136,   119,     0,     0,    45,   155,    59,   125,   117,   111,
+     0,     0,    45,    59,   126,   117,   111,     0,    45,   155,
+    65,   128,    61,     0,   127,    61,     0,    47,    45,   128,
+    61,     0,   120,   124,     0,    47,   287,     0,    47,   300,
+   287,     0,    47,   300,   185,     0,   185,     0,   287,     0,
+   300,   287,     0,   300,   185,     0,   100,     0,   129,   100,
+     0,     0,    49,    75,   131,   132,    76,     0,    49,    75,
+    76,     0,   134,     0,   132,    60,   134,     0,   244,     0,
+   244,   155,     0,    46,     0,    46,   155,     0,   133,     0,
+   133,    65,   200,     0,   367,     0,   367,    65,   181,     0,
+   130,   124,     0,   130,     1,     0,   211,    61,     0,   204,
+   210,    61,     0,   201,   209,    61,     0,   204,    61,     0,
+   158,    61,     0,   201,    61,     0,     1,    61,     0,     1,
+   111,     0,    61,     0,   195,     0,   151,     0,     0,   150,
+     0,   150,    61,     0,     0,   109,     0,   146,   138,   137,
+   312,     0,   146,   138,   337,     0,   146,   138,     1,     0,
+     0,   292,     5,    94,   142,   358,   110,   274,   370,     0,
+   292,     5,    48,   274,   370,     0,     0,   300,   292,     5,
+    94,   143,   358,   110,   274,   370,     0,   300,   292,     5,
+    48,   274,   370,     0,     0,   292,   160,    94,   144,   358,
+   110,   274,   370,     0,   292,   160,    48,   274,   370,     0,
+     0,   300,   292,   160,    94,   145,   358,   110,   274,   370,
+     0,   300,   292,   160,    48,   274,   370,     0,   201,   198,
+     0,   204,   284,     0,   284,     0,   204,   141,     0,   141,
+     0,     5,    94,   358,   110,   274,   370,     0,     5,    48,
+   274,   370,     0,   160,    94,   358,   110,   274,   370,     0,
+   160,    48,   274,   370,     0,   204,   147,     0,   147,     0,
+   201,   198,     0,   204,   284,     0,   284,     0,   204,   141,
+     0,   141,     0,   130,   148,     0,    25,     3,     0,   149,
+   228,     0,   149,    94,   175,   110,     0,   149,    48,     0,
+    63,   152,   153,     0,     0,     0,   154,     0,   153,    60,
+   154,     0,   153,     1,     0,    94,   175,   110,     0,    48,
+     0,   156,    94,   175,   110,     0,   156,    48,     0,   280,
+    94,   175,   110,     0,   280,    48,     0,   294,    94,   175,
+   110,     0,   294,    48,     0,     3,     0,     4,     0,     5,
+     0,    57,     0,    58,     0,     3,     0,    57,     0,    58,
+     0,   106,     0,   105,     0,   107,     0,    49,   207,    61,
+     0,    49,   201,   198,     0,    49,   284,     0,    49,   141,
+     0,     7,    49,   207,    61,     0,     7,    49,   201,   198,
+     0,     7,    49,   284,     0,     7,    49,   141,     0,    57,
+    75,   162,   161,     0,    57,    75,   161,     0,     4,    75,
+   162,   161,     0,     4,    75,   161,     0,   160,     0,     5,
+    75,   162,   161,     0,     5,    75,   161,     0,    76,     0,
+    78,     0,   163,     0,   162,    60,   163,     0,   200,     0,
+   181,     0,    80,     0,    79,     0,    87,     0,    88,     0,
+   112,     0,   174,     0,   181,     0,    48,     0,    94,   165,
+   110,     0,    48,     0,    94,   169,   110,     0,     0,   169,
+     0,     1,     0,     0,   348,   198,   212,   221,    65,   170,
+   229,     0,   165,     0,   111,     0,   309,   305,   111,     0,
+   309,   305,     1,   111,     0,   309,     1,   111,     0,     0,
+    59,   173,   171,     0,   321,     0,   181,    60,   181,     0,
+   181,    60,     1,     0,   174,    60,   181,     0,   174,    60,
+     1,     0,   181,     0,   174,     0,   189,     0,   120,   180,
+     0,    81,   180,     0,    71,   180,     0,    89,   180,     0,
+   164,   180,     0,    68,   155,     0,    13,   176,     0,    13,
+    94,   200,   110,     0,    30,   176,     0,    30,    94,   200,
+   110,     0,   191,   273,     0,   191,   273,   178,     0,   191,
+   177,   273,     0,   191,   177,   273,   178,     0,   191,    94,
+   200,   110,     0,   191,    94,   200,   110,   178,     0,   191,
+   177,    94,   200,   110,     0,   191,   177,    94,   200,   110,
+   178,     0,   192,   180,     0,   192,    95,   113,   180,     0,
+   192,    95,   165,   113,   180,     0,    35,   180,     0,    36,
+   180,     0,    94,   175,   110,     0,    59,   175,   111,     0,
+    94,   175,   110,     0,    48,     0,    94,   207,   110,     0,
+    65,   229,     0,    94,   200,   110,     0,   179,    94,   200,
+   110,     0,   176,     0,   179,   176,     0,   179,    59,   230,
+   242,   111,     0,   180,     0,   181,    84,   181,     0,   181,
+    85,   181,     0,   181,    79,   181,     0,   181,    80,   181,
+     0,   181,    81,   181,     0,   181,    82,   181,     0,   181,
+    83,   181,     0,   181,    77,   181,     0,   181,    78,   181,
+     0,   181,    74,   181,     0,   181,    75,   181,     0,   181,
+    76,   181,     0,   181,    73,   181,     0,   181,    72,   181,
+     0,   181,    71,   181,     0,   181,    69,   181,     0,   181,
+    70,   181,     0,   181,    68,   181,     0,   181,    67,   181,
+     0,   181,    66,   353,    63,   181,     0,   181,    65,   181,
+     0,   181,    64,   181,     0,    62,     0,    62,   181,     0,
+    89,   368,   155,     0,   183,     0,   375,     0,     3,     0,
+    57,     0,    58,     0,     6,    75,   162,   161,     0,     6,
+    75,   161,     0,   375,    75,   162,   161,     0,   375,    75,
+   161,     0,    49,   155,    75,   162,   161,     0,    49,     6,
+    75,   162,   161,     0,    49,   375,    75,   162,   161,     0,
+   182,     0,     4,     0,     5,     0,   182,     0,    81,   186,
+     0,    71,   186,     0,    94,   186,   110,     0,     3,    75,
+   162,   161,     0,    58,    75,   162,   161,     0,   286,     0,
+   182,     0,   187,     0,    94,   186,   110,     0,   182,     0,
+    10,     0,   193,     0,   194,     0,    94,   165,   110,     0,
+    94,   186,   110,     0,    94,     1,   110,     0,     0,    94,
+   190,   313,   110,     0,   189,    94,   175,   110,     0,   189,
+    48,     0,   189,    95,   165,   113,     0,   189,    87,     0,
+   189,    88,     0,    41,     0,     9,    94,   175,   110,     0,
+   290,     0,    51,    75,   200,    76,    94,   165,   110,     0,
+    52,    75,   200,    76,    94,   165,   110,     0,    53,    75,
+   200,    76,    94,   165,   110,     0,    54,    75,   200,    76,
+    94,   165,   110,     0,    50,    94,   165,   110,     0,    50,
+    94,   200,   110,     0,   300,     3,     0,   300,   375,     0,
+   289,     0,   289,    94,   175,   110,     0,   289,    48,     0,
+   196,   184,     0,   196,   184,    94,   175,   110,     0,   196,
+   184,    48,     0,   196,   185,     0,   196,   289,     0,   196,
+   185,    94,   175,   110,     0,   196,   185,    48,     0,   196,
+   289,    94,   175,   110,     0,   196,   289,    48,     0,   196,
+    89,     8,    48,     0,   196,     8,    55,    89,     8,    48,
+     0,   196,     1,     0,    40,     0,   300,    40,     0,    39,
+     0,   300,   192,     0,    43,     0,    44,     0,    11,     0,
+   194,    11,     0,     0,   189,    93,     0,   189,    92,     0,
+   207,   209,    61,     0,   201,   209,    61,     0,   204,   210,
+    61,     0,   201,    61,     0,   204,    61,     0,   120,   197,
+     0,   279,     0,   284,     0,    48,     0,   199,    48,     0,
+   205,   303,     0,   275,   303,     0,   207,   303,     0,   205,
+     0,   275,     0,   205,     0,   202,     0,   204,   207,     0,
+   207,   203,     0,   207,   206,   203,     0,   204,   207,   203,
+     0,   204,   207,   206,     0,   204,   207,   206,   203,     0,
+     7,     0,   203,   208,     0,   203,     7,     0,   203,   222,
+     0,   222,     0,   275,     0,     7,     0,   204,     9,     0,
+   204,     7,     0,   204,   222,     0,   222,     0,   207,     0,
+   275,   207,     0,   207,   206,     0,   275,   207,   206,     0,
+   208,     0,   206,   208,     0,   236,     0,     8,     0,   281,
+     0,    29,    94,   165,   110,     0,    29,    94,   200,   110,
+     0,    31,    94,   165,   110,     0,    31,    94,   200,   110,
+     0,     8,     0,     9,     0,   236,     0,   213,     0,   209,
+    60,   215,     0,   217,     0,   210,    60,   215,     0,   219,
+     0,   211,    60,   215,     0,     0,   121,    94,   194,   110,
+     0,     0,   198,   212,   221,    65,   214,   229,     0,   198,
+   212,   221,     0,     0,   198,   212,   221,    65,   216,   229,
+     0,   198,   212,   221,     0,     0,   284,   212,   221,    65,
+   218,   229,     0,   284,   212,   221,     0,     0,   284,   212,
+   221,    65,   220,   229,     0,   284,   212,   221,     0,     0,
+   222,     0,   223,     0,   222,   223,     0,    32,    94,    94,
+   224,   110,   110,     0,   225,     0,   224,    60,   225,     0,
+     0,   226,     0,   226,    94,     3,   110,     0,   226,    94,
+     3,    60,   175,   110,     0,   226,    94,   175,   110,     0,
+   155,     0,     7,     0,     8,     0,     9,     0,   155,     0,
+   227,    60,   155,     0,     0,    65,   229,     0,   181,     0,
+    59,   111,     0,    59,   230,   111,     0,    59,   230,    60,
+   111,     0,     1,     0,   229,     0,   230,    60,   229,     0,
+    95,   181,   113,   229,     0,   230,    60,    21,   181,    63,
+   229,     0,   155,    63,   229,     0,   230,    60,   155,    63,
+   229,     0,    99,     0,   231,   138,   137,   312,     0,   231,
+   138,   337,     0,   231,   138,     1,     0,     0,   233,   232,
+   139,     0,   104,   181,   109,     0,   104,     1,   109,     0,
+     0,   235,   234,     0,   235,     1,     0,     0,    14,   155,
+    59,   237,   271,   243,   111,     0,    14,   155,    59,   111,
+     0,     0,    14,    59,   238,   271,   243,   111,     0,    14,
+    59,   111,     0,    14,   155,     0,    14,   298,     0,    46,
+   294,     0,     0,     0,     0,   251,   257,   239,   259,   111,
+   221,   240,   235,   241,   233,     0,   251,     0,     0,    60,
+     0,     0,    60,     0,    37,     0,   244,     7,     0,   244,
+     8,     0,   244,     9,     0,   244,    37,     0,   244,   155,
+     0,   244,   157,     0,   244,   292,   155,     0,   244,   300,
+   292,   155,     0,   244,   300,   155,     0,   244,   159,     0,
+   244,   292,   159,     0,     0,   245,     0,   246,   248,   252,
+     0,   247,   252,     0,   244,    59,     0,   250,     0,   249,
+     0,     0,    63,   368,     0,    63,   368,   253,     0,   254,
+     0,   253,    60,   368,   254,     0,   255,     0,   256,   368,
+   255,     0,   294,     0,   280,     0,    31,    94,   165,   110,
+     0,    31,    94,   200,   110,     0,    38,   368,     0,     7,
+   368,     0,   256,    38,   368,     0,   256,     7,   368,     0,
+    59,     0,     0,   258,     0,   258,   260,     0,   259,    38,
+    63,   260,     0,   259,    38,    63,     0,   261,     0,   260,
+   261,     0,   262,    61,     0,   262,   111,     0,   148,    63,
+     0,   148,    96,     0,   148,    25,     0,   148,    59,     0,
+    61,     0,   120,   261,     0,   201,   263,     0,   204,   264,
+     0,   284,   212,   221,   228,     0,   141,   212,   221,   228,
+     0,    63,   181,     0,     1,     0,   204,   147,   212,   221,
+   228,     0,   147,   212,   221,   228,     0,   127,     0,   130,
+   262,     0,     0,   265,     0,   263,    60,   266,     0,     0,
+   268,     0,   264,    60,   270,     0,   267,     0,   268,     0,
+   269,     0,   270,     0,   279,   212,   221,   228,     0,     4,
+    63,   181,   221,     0,   284,   212,   221,   228,     0,   141,
+   212,   221,   228,     0,     3,    63,   181,   221,     0,    63,
+   181,   221,     0,   279,   212,   221,   228,     0,     4,    63,
+   181,   221,     0,   284,   212,   221,   228,     0,     3,    63,
+   181,   221,     0,    63,   181,   221,     0,   272,     0,   271,
+    60,   272,     0,   155,     0,   155,    65,   181,     0,   348,
+   301,     0,   348,     0,    94,   200,   110,    95,   165,   113,
+     0,     0,   274,     9,     0,     9,     0,   275,     9,     0,
+     0,   276,   165,     0,   276,    94,   175,   110,     0,   276,
+    94,   358,   110,     0,   276,    48,     0,   276,    94,     1,
+   110,     0,    81,   275,   279,     0,    71,   275,   279,     0,
+    81,   279,     0,    71,   279,     0,   299,   274,   279,     0,
+   283,     0,   291,     0,   300,   291,     0,   280,     0,   282,
+     0,   300,   282,     0,   292,   291,     0,   283,   278,   274,
+   370,     0,   283,    95,   277,   113,     0,   283,    95,   113,
+     0,    94,   279,   110,     0,   292,   291,     0,   291,     0,
+    81,   275,   284,     0,    71,   275,   284,     0,    81,   284,
+     0,    71,   284,     0,   299,   274,   284,     0,   188,     0,
+    81,   275,   284,     0,    71,   275,   284,     0,    81,   285,
+     0,    71,   285,     0,   299,   274,   284,     0,   286,     0,
+   188,   278,   274,   370,     0,    94,   285,   110,     0,   188,
+    95,   277,   113,     0,   188,    95,   113,     0,   288,     0,
+   292,   187,     0,   292,   185,     0,   292,   184,     0,   292,
+   182,     0,   292,   184,     0,   288,     0,   300,   288,     0,
+   207,    94,   175,   110,     0,   207,    94,   186,   110,     0,
+   207,   199,     0,     4,     0,     5,     0,   159,     0,   293,
+     0,   292,   293,     0,     4,    55,     0,     5,    55,     0,
+    58,    55,     0,   159,    55,     0,   295,     0,   300,   295,
+     0,   296,   155,     0,   297,     0,   296,   297,     0,     4,
+    55,     0,     5,    55,     0,   159,    55,     0,    57,    55,
+     0,     3,    55,     0,    58,    55,     0,   300,   291,     0,
+   282,     0,   300,   282,     0,   292,    81,     0,   300,   292,
+    81,     0,    55,     0,    81,   274,   301,     0,    81,   274,
+     0,    71,   274,   301,     0,    71,   274,     0,   299,   274,
+     0,   299,   274,   301,     0,   302,     0,    95,   165,   113,
+     0,   302,    95,   277,   113,     0,    81,   275,   303,     0,
+    81,   303,     0,    81,   275,     0,    81,     0,    71,   275,
+   303,     0,    71,   303,     0,    71,   275,     0,    71,     0,
+   299,   274,     0,   299,   274,   303,     0,   304,     0,    94,
+   303,   110,     0,    91,     0,   304,    94,   358,   110,   274,
+   370,     0,   304,    48,   274,   370,     0,   304,    95,   277,
+   113,     0,   304,    95,   113,     0,    94,   359,   110,   274,
+   370,     0,   179,   274,   370,     0,   199,   274,   370,     0,
+    95,   277,   113,     0,    95,   113,     0,   320,     0,   306,
+     0,   305,   320,     0,   305,   306,     0,     1,    61,     0,
+     0,     0,     0,   310,     0,   311,     0,   310,   311,     0,
+    34,   227,    61,     0,   313,     0,     1,   313,     0,     0,
+    59,   314,   307,   171,   308,     0,     0,     0,    15,   316,
+   307,   167,   317,   318,     0,   313,     0,     0,   307,   319,
+   321,   308,     0,   313,     0,   321,     0,   197,     0,   165,
+    61,     0,     0,     0,   315,    16,   322,   318,   323,   308,
+     0,   315,     0,     0,     0,    17,   324,   307,   167,   325,
+   172,   308,     0,     0,     0,    18,   326,   318,    17,   327,
+   166,    61,     0,     0,     0,     0,     0,    19,   328,    94,
+   351,   329,   307,   168,    61,   330,   353,   110,   331,   172,
+   308,     0,     0,     0,    20,   307,    94,   169,   110,   332,
+   318,   333,   308,     0,     0,    21,   181,    63,   334,   320,
+     0,     0,    21,   181,    12,   181,    63,   335,   320,     0,
+     0,    22,    63,   336,   320,     0,    23,    61,     0,    24,
+    61,     0,    25,    61,     0,    25,   165,    61,     0,   121,
+   352,    94,   194,   110,    61,     0,   121,   352,    94,   194,
+    63,   354,   110,    61,     0,   121,   352,    94,   194,    63,
+   354,    63,   354,   110,    61,     0,   121,   352,    94,   194,
+    63,   354,    63,   354,    63,   357,   110,    61,     0,    26,
+    81,   165,    61,     0,    26,   155,    61,     0,   350,   320,
+     0,   350,   111,     0,    61,     0,   340,     0,     0,     0,
+    96,   338,   137,   313,   339,   343,     0,     0,     0,    96,
+   341,   313,   342,   343,     0,   344,     0,   343,   344,     0,
+     0,     0,     0,    97,   345,   307,   349,   346,   313,   347,
+   308,     0,   205,     0,   275,     0,    94,    12,   110,     0,
+    94,   367,   110,     0,     3,    63,     0,    57,    63,     0,
+     4,    63,     0,     5,    63,     0,   353,    61,     0,   197,
+     0,    59,   171,     0,     0,     9,     0,     0,   165,     0,
+     1,     0,     0,   355,     0,   356,     0,   355,    60,   356,
+     0,    11,    94,   165,   110,     0,    11,     0,   357,    60,
+    11,     0,     0,   359,     0,   200,     0,   363,     0,   364,
+    12,     0,   363,    12,     0,   200,    12,     0,    12,     0,
+    98,     0,   363,    98,     0,   200,    98,     0,   363,    63,
+     0,   200,    63,     0,     0,    65,   361,   362,     0,   103,
+     0,   229,     0,   365,     0,   367,   360,     0,   364,   366,
+     0,   364,   369,     0,   364,   369,    65,   229,     0,   363,
+    60,     0,   200,    60,     0,   202,   198,     0,   205,   198,
+     0,   207,   198,     0,   202,   303,     0,   202,     0,   204,
+   284,     0,   367,     0,   367,   360,     0,   365,     0,   200,
+     0,     0,     0,   284,     0,     0,    62,    94,   372,   110,
+     0,    62,    48,     0,   200,     0,   371,     0,   372,    60,
+   371,     0,     0,    81,   274,   373,     0,    71,   274,   373,
+     0,   299,   274,   373,     0,    42,     0,   374,    81,     0,
+   374,    82,     0,   374,    83,     0,   374,    79,     0,   374,
+    80,     0,   374,    71,     0,   374,    69,     0,   374,    70,
+     0,   374,    89,     0,   374,    60,     0,   374,    74,     0,
+   374,    75,     0,   374,    76,     0,   374,    73,     0,   374,
+    64,     0,   374,    65,     0,   374,    77,     0,   374,    78,
+     0,   374,    87,     0,   374,    88,     0,   374,    68,     0,
+   374,    67,     0,   374,   112,     0,   374,    66,    63,     0,
+   374,    72,     0,   374,    92,     0,   374,    84,     0,   374,
+    48,     0,   374,    95,   113,     0,   374,    40,     0,   374,
+    39,     0,   374,    40,    95,   113,     0,   374,    39,    95,
+   113,     0,   374,   348,   373,     0,   374,     1,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   305,   307,   321,   324,   325,   329,   331,   334,   339,   343,
-   349,   351,   354,   357,   361,   364,   366,   368,   371,   373,
-   376,   379,   381,   383,   385,   387,   389,   391,   397,   401,
-   404,   406,   410,   412,   413,   415,   419,   422,   428,   431,
-   433,   437,   440,   444,   457,   459,   461,   465,   475,   477,
-   479,   483,   487,   492,   495,   497,   501,   503,   504,   511,
-   512,   513,   516,   519,   523,   525,   526,   529,   531,   534,
-   537,   539,   543,   553,   555,   565,   574,   576,   586,   595,
-   597,   607,   616,   618,   630,   638,   645,   650,   657,   664,
-   667,   669,   671,   677,   687,   689,   692,   695,   697,   700,
-   702,   720,   729,   732,   734,   738,   751,   771,   774,   776,
-   777,   780,   787,   793,   795,   797,   799,   801,   804,   809,
-   811,   812,   813,   814,   817,   819,   820,   823,   825,   826,
-   829,   833,   836,   838,   840,   843,   846,   848,   856,   863,
-   869,   875,   881,   884,   891,   899,   901,   909,   912,   916,
-   919,   922,   925,   927,   929,   931,   935,   938,   941,   946,
-   950,   955,   959,   962,   964,   968,   988,   995,   998,  1000,
-  1001,  1002,  1005,  1016,  1025,  1029,  1033,  1036,  1038,  1042,
-  1045,  1048,  1052,  1055,  1057,  1059,  1061,  1068,  1079,  1081,
-  1083,  1085,  1091,  1094,  1097,  1100,  1103,  1107,  1110,  1113,
-  1117,  1119,  1123,  1127,  1129,  1133,  1136,  1143,  1146,  1148,
-  1156,  1165,  1171,  1178,  1180,  1182,  1195,  1198,  1200,  1202,
-  1204,  1206,  1208,  1210,  1212,  1214,  1216,  1218,  1220,  1222,
-  1224,  1226,  1228,  1230,  1232,  1234,  1236,  1238,  1242,  1244,
-  1246,  1263,  1266,  1267,  1268,  1269,  1272,  1274,  1275,  1278,
-  1280,  1282,  1284,  1288,  1290,  1291,  1295,  1303,  1304,  1305,
-  1313,  1321,  1329,  1331,  1339,  1360,  1367,  1374,  1376,  1385,
-  1390,  1413,  1457,  1458,  1462,  1466,  1470,  1474,  1476,  1480,
-  1482,  1490,  1492,  1497,  1503,  1505,  1510,  1525,  1540,  1551,
-  1563,  1571,  1580,  1624,  1627,  1631,  1634,  1638,  1641,  1646,
-  1648,  1652,  1665,  1668,  1675,  1682,  1687,  1689,  1694,  1696,
-  1703,  1705,  1709,  1713,  1719,  1723,  1726,  1729,  1732,  1742,
-  1744,  1747,  1751,  1754,  1757,  1760,  1763,  1769,  1775,  1777,
-  1782,  1784,  1793,  1796,  1798,  1801,  1807,  1809,  1819,  1823,
-  1826,  1829,  1834,  1837,  1845,  1847,  1849,  1851,  1854,  1857,
-  1872,  1891,  1894,  1896,  1899,  1901,  1904,  1906,  1909,  1911,
-  1914,  1917,  1921,  1940,  1942,  1962,  1968,  1969,  1975,  1984,
-  1986,  1996,  2005,  2007,  2019,  2022,  2026,  2029,  2033,  2038,
-  2041,  2045,  2048,  2050,  2052,  2054,  2061,  2063,  2064,  2065,
-  2069,  2072,  2076,  2079,  2085,  2087,  2090,  2093,  2096,  2102,
-  2105,  2108,  2110,  2112,  2114,  2118,  2124,  2132,  2134,  2138,
-  2140,  2145,  2148,  2151,  2153,  2155,  2159,  2163,  2168,  2172,
-  2175,  2180,  2184,  2187,  2190,  2194,  2229,  2235,  2241,  2253,
-  2255,  2258,  2260,  2265,  2267,  2269,  2271,  2273,  2277,  2282,
-  2287,  2293,  2298,  2303,  2305,  2309,  2314,  2317,  2324,  2352,
-  2358,  2360,  2363,  2366,  2368,  2372,  2374,  2378,  2404,  2433,
-  2436,  2437,  2458,  2481,  2483,  2487,  2513,  2522,  2605,  2612,
-  2615,  2623,  2634,  2643,  2647,  2662,  2665,  2670,  2672,  2674,
-  2676,  2678,  2680,  2685,  2691,  2693,  2696,  2699,  2701,  2712,
-  2717,  2720,  2722,  2741,  2744,  2745,  2756,  2759,  2760,  2771,
-  2773,  2776,  2778,  2781,  2788,  2796,  2803,  2809,  2815,  2823,
-  2827,  2832,  2836,  2839,  2848,  2850,  2854,  2857,  2862,  2866,
-  2871,  2881,  2884,  2888,  2892,  2900,  2905,  2911,  2914,  2916,
-  2918,  2924,  2927,  2929,  2931,  2933,  2937,  2940,  2961,  2971,
-  2973,  2974,  2978,  2983,  2986,  2988,  2990,  2992,  2996,  3002,
-  3005,  3007,  3009,  3011,  3015,  3018,  3021,  3023,  3025,  3027,
-  3031,  3034,  3037,  3039,  3041,  3043,  3052,  3058,  3064,  3066,
-  3070,  3073,  3075,  3079,  3081,  3082,  3085,  3087,  3093,  3108,
-  3114,  3120,  3134,  3136,  3140,  3152,  3158,  3169,  3176,  3182,
-  3184,  3185,  3186,  3194,  3203,  3204,  3208,  3211,  3217,  3223,
-  3226,  3228,  3230,  3232,  3236,  3240,  3244,  3247,  3252,  3255,
-  3257,  3259,  3261,  3263,  3265,  3267,  3269,  3273,  3277,  3281,
-  3285,  3286,  3288,  3290,  3292,  3294,  3296,  3298,  3300,  3302,
-  3310,  3312,  3313,  3314,  3317,  3325,  3330,  3337,  3339,  3344,
-  3346,  3349,  3363,  3366,  3369,  3378,  3390,  3401,  3421,  3431,
-  3434,  3442,  3454,  3457,  3460,  3463,  3479,  3482,  3493,  3494,
-  3498,  3513,  3532,  3544,  3558,  3572,  3585,  3604,  3622,  3641,
-  3649,  3670,  3688,  3701,  3702,  3705,  3705,  3708,  3708,  3711,
-  3711,  3717,  3723,  3726,  3731,  3738,  3747,  3756,  3765,  3773,
-  3786,  3788,  3792,  3794,  3797,  3804,  3807,  3815,  3831,  3842,
-  3854,  3856,  3859,  3869,  3879,  3890,  3892,  3894,  3897,  3914,
-  3920,  3928,  3930,  3932,  3936,  3939,  3940,  3948,  3952,  3956,
-  3959,  3960,  3966,  3969,  3972,  3974,  3978,  3983,  3986,  3996,
-  4001,  4002,  4010,  4016,  4021,  4025,  4030,  4034,  4038,  4042,
-  4047,  4058,  4072,  4076,  4079,  4081,  4085,  4089,  4092,  4095,
-  4097,  4101,  4103,  4110,  4117,  4120,  4123,  4127,  4131,  4137,
-  4141,  4146,  4148,  4151,  4156,  4162,  4172,  4175,  4177,  4181,
-  4186,  4188,  4195,  4198,  4200,  4202,  4208,  4213,  4216,  4218,
-  4220,  4222,  4224,  4226,  4228,  4230,  4232,  4234,  4236,  4238,
-  4240,  4242,  4244,  4246,  4248,  4250,  4252,  4254,  4256,  4258,
-  4260,  4262,  4264,  4266,  4268,  4270,  4272,  4274,  4276,  4278,
-  4281,  4283
+   310,   312,   326,   329,   330,   334,   336,   339,   344,   348,
+   354,   356,   359,   362,   366,   369,   371,   373,   376,   378,
+   381,   384,   386,   388,   390,   392,   394,   396,   402,   406,
+   409,   411,   415,   417,   418,   420,   424,   427,   433,   436,
+   438,   443,   446,   450,   463,   465,   467,   471,   481,   483,
+   485,   489,   498,   508,   511,   513,   517,   519,   520,   527,
+   528,   529,   532,   535,   539,   541,   542,   545,   547,   550,
+   553,   555,   559,   569,   571,   581,   590,   592,   602,   611,
+   613,   623,   632,   634,   646,   654,   661,   666,   673,   680,
+   683,   685,   687,   693,   703,   705,   708,   711,   713,   716,
+   718,   741,   750,   753,   755,   759,   772,   792,   795,   797,
+   798,   801,   808,   814,   816,   818,   820,   822,   825,   830,
+   832,   833,   834,   835,   838,   840,   841,   844,   846,   847,
+   850,   854,   857,   859,   861,   864,   867,   869,   877,   884,
+   890,   896,   902,   905,   912,   920,   922,   930,   933,   937,
+   940,   943,   946,   948,   950,   952,   956,   959,   962,   967,
+   971,   976,   980,   983,   985,   989,  1009,  1016,  1019,  1021,
+  1022,  1023,  1026,  1037,  1046,  1050,  1054,  1057,  1059,  1063,
+  1066,  1069,  1073,  1076,  1078,  1080,  1082,  1089,  1100,  1102,
+  1104,  1106,  1112,  1115,  1118,  1121,  1124,  1128,  1131,  1134,
+  1138,  1140,  1144,  1148,  1150,  1154,  1157,  1164,  1167,  1169,
+  1177,  1186,  1192,  1199,  1201,  1203,  1216,  1219,  1221,  1223,
+  1225,  1227,  1229,  1231,  1233,  1235,  1237,  1239,  1241,  1243,
+  1245,  1247,  1249,  1251,  1253,  1255,  1257,  1259,  1263,  1265,
+  1267,  1284,  1287,  1288,  1289,  1290,  1291,  1294,  1297,  1299,
+  1302,  1307,  1310,  1312,  1316,  1318,  1319,  1322,  1324,  1326,
+  1328,  1332,  1335,  1339,  1341,  1342,  1343,  1347,  1355,  1356,
+  1357,  1365,  1373,  1381,  1383,  1391,  1412,  1419,  1426,  1428,
+  1437,  1442,  1465,  1509,  1510,  1514,  1518,  1522,  1526,  1528,
+  1532,  1534,  1542,  1544,  1549,  1555,  1559,  1564,  1569,  1571,
+  1576,  1591,  1606,  1617,  1629,  1637,  1646,  1690,  1693,  1697,
+  1700,  1704,  1707,  1712,  1714,  1718,  1731,  1734,  1741,  1748,
+  1753,  1755,  1760,  1762,  1769,  1771,  1775,  1779,  1785,  1789,
+  1792,  1795,  1798,  1808,  1810,  1813,  1817,  1820,  1823,  1826,
+  1829,  1835,  1841,  1843,  1848,  1850,  1859,  1862,  1864,  1867,
+  1873,  1875,  1885,  1889,  1892,  1895,  1900,  1903,  1911,  1913,
+  1915,  1917,  1920,  1923,  1938,  1957,  1960,  1962,  1965,  1967,
+  1970,  1972,  1975,  1977,  1980,  1983,  1987,  2006,  2008,  2028,
+  2034,  2035,  2041,  2050,  2052,  2062,  2071,  2073,  2085,  2088,
+  2092,  2095,  2099,  2104,  2107,  2111,  2114,  2116,  2118,  2120,
+  2127,  2129,  2130,  2131,  2135,  2138,  2142,  2145,  2151,  2153,
+  2156,  2159,  2162,  2168,  2171,  2174,  2176,  2178,  2180,  2184,
+  2190,  2198,  2200,  2204,  2206,  2211,  2214,  2217,  2219,  2221,
+  2225,  2229,  2234,  2238,  2241,  2246,  2250,  2253,  2256,  2260,
+  2262,  2297,  2303,  2309,  2321,  2323,  2326,  2328,  2333,  2335,
+  2337,  2339,  2341,  2345,  2350,  2355,  2361,  2366,  2371,  2373,
+  2377,  2382,  2385,  2392,  2420,  2426,  2428,  2431,  2434,  2436,
+  2440,  2442,  2446,  2472,  2501,  2504,  2505,  2526,  2549,  2551,
+  2555,  2581,  2590,  2673,  2680,  2683,  2691,  2702,  2711,  2715,
+  2730,  2733,  2738,  2740,  2742,  2744,  2746,  2748,  2753,  2759,
+  2761,  2764,  2767,  2769,  2780,  2785,  2788,  2790,  2814,  2817,
+  2818,  2829,  2832,  2833,  2844,  2846,  2849,  2851,  2854,  2861,
+  2869,  2876,  2882,  2888,  2896,  2900,  2905,  2909,  2912,  2921,
+  2923,  2927,  2930,  2935,  2939,  2944,  2954,  2957,  2961,  2965,
+  2973,  2978,  2984,  2987,  2989,  2991,  2997,  3000,  3002,  3004,
+  3006,  3010,  3013,  3034,  3044,  3046,  3047,  3051,  3056,  3059,
+  3061,  3063,  3065,  3069,  3075,  3078,  3080,  3082,  3084,  3088,
+  3091,  3094,  3096,  3098,  3100,  3104,  3107,  3110,  3112,  3114,
+  3116,  3123,  3134,  3138,  3143,  3147,  3152,  3154,  3158,  3161,
+  3163,  3167,  3169,  3170,  3173,  3175,  3181,  3196,  3202,  3208,
+  3222,  3224,  3228,  3240,  3246,  3257,  3264,  3270,  3272,  3273,
+  3274,  3282,  3291,  3292,  3296,  3299,  3305,  3311,  3314,  3316,
+  3318,  3320,  3324,  3328,  3332,  3335,  3340,  3343,  3345,  3347,
+  3349,  3351,  3353,  3355,  3357,  3361,  3365,  3369,  3373,  3374,
+  3376,  3378,  3380,  3382,  3384,  3386,  3388,  3390,  3398,  3400,
+  3401,  3402,  3405,  3413,  3418,  3425,  3427,  3432,  3434,  3437,
+  3451,  3454,  3457,  3466,  3478,  3489,  3509,  3519,  3522,  3530,
+  3542,  3545,  3548,  3551,  3567,  3570,  3581,  3582,  3586,  3601,
+  3620,  3632,  3646,  3660,  3673,  3692,  3710,  3729,  3737,  3758,
+  3776,  3789,  3790,  3793,  3793,  3796,  3796,  3799,  3799,  3805,
+  3811,  3814,  3819,  3826,  3835,  3844,  3853,  3861,  3874,  3876,
+  3880,  3882,  3885,  3892,  3895,  3903,  3919,  3930,  3942,  3944,
+  3947,  3957,  3967,  3978,  3980,  3982,  3985,  4002,  4008,  4016,
+  4018,  4020,  4024,  4027,  4028,  4036,  4040,  4044,  4047,  4048,
+  4054,  4057,  4060,  4062,  4066,  4071,  4074,  4084,  4089,  4090,
+  4098,  4104,  4109,  4113,  4118,  4122,  4126,  4130,  4135,  4146,
+  4160,  4164,  4167,  4169,  4173,  4177,  4180,  4183,  4185,  4189,
+  4191,  4198,  4205,  4208,  4211,  4215,  4219,  4225,  4229,  4234,
+  4236,  4239,  4244,  4250,  4260,  4263,  4265,  4269,  4274,  4276,
+  4283,  4286,  4288,  4290,  4296,  4301,  4304,  4306,  4308,  4310,
+  4312,  4314,  4316,  4318,  4320,  4322,  4324,  4326,  4328,  4330,
+  4332,  4334,  4336,  4338,  4340,  4342,  4344,  4346,  4348,  4350,
+  4352,  4354,  4356,  4358,  4360,  4362,  4364,  4366,  4369,  4371
 };
 #endif
 
@@ -683,11 +693,11 @@ static const short yyrline[] = { 0,
 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
 
 static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER",
-"TYPENAME","SELFNAME","SCSPEC","TYPESPEC","CV_QUALIFIER","CONSTANT","STRING",
-"ELLIPSIS","SIZEOF","ENUM","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
-"BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","GCC_ASM_KEYWORD","TYPEOF",
-"ALIGNOF","SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","AGGR",
-"VISSPEC","DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE",
+"TYPENAME","SELFNAME","PFUNCNAME","SCSPEC","TYPESPEC","CV_QUALIFIER","CONSTANT",
+"STRING","ELLIPSIS","SIZEOF","ENUM","IF","ELSE","WHILE","DO","FOR","SWITCH",
+"CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","GCC_ASM_KEYWORD",
+"TYPEOF","ALIGNOF","SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART",
+"AGGR","VISSPEC","DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE",
 "TYPENAME_KEYWORD","USING","LEFT_RIGHT","TEMPLATE","TYPEID","DYNAMIC_CAST","STATIC_CAST",
 "REINTERPRET_CAST","CONST_CAST","SCOPE","EMPTY","PTYPENAME","NSNAME","'{'","','",
 "';'","THROW","':'","ASSIGN","'='","'?'","OROR","ANDAND","'|'","'^'","'&'","MIN_MAX",
@@ -708,16 +718,17 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "template_arg","unop","expr","paren_expr_or_null","paren_cond_or_null","xcond",
 "condition","@10","compstmtend","already_scoped_stmt","@11","nontrivial_exprlist",
 "nonnull_exprlist","unary_expr","new_placement","new_initializer","regcast_or_absdcl",
-"cast_expr","expr_no_commas","notype_unqualified_id","unqualified_id","expr_or_declarator",
-"direct_notype_declarator","primary","@12","new","delete","boolean.literal",
-"string","nodecls","object","decl","declarator","fcast_or_absdcl","type_id",
-"typed_declspecs","typed_declspecs1","reserved_declspecs","declmods","typed_typespecs",
-"reserved_typespecquals","typespec","typespecqual_reserved","initdecls","notype_initdecls",
-"nomods_initdecls","maybeasm","initdcl0","@13","initdcl","@14","notype_initdcl0",
-"@15","nomods_initdcl0","@16","maybe_attribute","attributes","attribute","attribute_list",
-"attrib","any_word","identifiers_or_typenames","maybe_init","init","initlist",
-"fn.defpen","pending_inline","pending_inlines","defarg_again","pending_defargs",
-"structsp","@17","@18","@19","@20","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype",
+"cast_expr","expr_no_commas","notype_unqualified_id","template_id","object_template_id",
+"unqualified_id","expr_or_declarator","notype_template_declarator","direct_notype_declarator",
+"primary","@12","new","delete","boolean.literal","string","nodecls","object",
+"decl","declarator","fcast_or_absdcl","type_id","typed_declspecs","typed_declspecs1",
+"reserved_declspecs","declmods","typed_typespecs","reserved_typespecquals","typespec",
+"typespecqual_reserved","initdecls","notype_initdecls","nomods_initdecls","maybeasm",
+"initdcl0","@13","initdcl","@14","notype_initdcl0","@15","nomods_initdcl0","@16",
+"maybe_attribute","attributes","attribute","attribute_list","attrib","any_word",
+"identifiers_or_typenames","maybe_init","init","initlist","fn.defpen","pending_inline",
+"pending_inlines","defarg_again","pending_defargs","structsp","@17","@18","@19",
+"@20","@21","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype",
 "named_class_head_sans_basetype_defn","named_complex_class_head_sans_basetype",
 "do_xref_defn","named_class_head","unnamed_class_head","class_head","maybe_base_class_list",
 "base_class_list","base_class","base_class.1","base_class_access_list","left_curly",
@@ -733,13 +744,13 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "typename_sub","typename_sub0","typename_sub1","typename_sub2","complex_type_name",
 "ptr_to_mem","global_scope","new_declarator","direct_new_declarator","absdcl",
 "direct_abstract_declarator","stmts","errstmt",".pushlevel",".poplevel","maybe_label_decls",
-"label_decls","label_decl","compstmt_or_error","compstmt","@21","simple_if",
-"@22","@23","implicitly_scoped_stmt","@24","stmt","simple_stmt","@25","@26",
-"@27","@28","@29","@30","@31","@32","@33","@34","@35","@36","@37","@38","@39",
-"function_try_block","@40","@41","try_block","@42","@43","handler_seq","handler",
-"@44","@45","@46","type_specifier_seq","handler_args","label_colon","for.init.statement",
+"label_decls","label_decl","compstmt_or_error","compstmt","@22","simple_if",
+"@23","@24","implicitly_scoped_stmt","@25","stmt","simple_stmt","@26","@27",
+"@28","@29","@30","@31","@32","@33","@34","@35","@36","@37","@38","@39","@40",
+"function_try_block","@41","@42","try_block","@43","@44","handler_seq","handler",
+"@45","@46","@47","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","@47","defarg1","parms",
+"asm_clobbers","parmlist","complex_parmlist","defarg","@48","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
@@ -747,88 +758,89 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 #endif
 
 static const short yyr1[] = {     0,
-   113,   113,   115,   114,   114,   116,   116,   117,   118,   119,
-   120,   120,   122,   121,   123,   123,   123,   123,   123,   123,
-   123,   124,   123,   125,   123,   123,   123,   123,   123,   126,
-   126,   126,   127,   127,   127,   127,   128,   128,   130,   129,
-   129,   131,   131,   132,   132,   132,   132,   133,   133,   133,
-   133,   134,   134,   135,   135,   135,   135,   135,   135,   135,
-   135,   135,   136,   136,   137,   137,   137,   138,   138,   139,
-   139,   139,   141,   140,   140,   142,   140,   140,   143,   140,
-   140,   144,   140,   140,   145,   145,   145,   145,   145,   146,
-   146,   146,   146,   147,   147,   147,   147,   147,   147,   147,
-   147,   148,   149,   149,   149,   150,   151,   152,   152,   152,
-   152,   153,   153,   153,   153,   153,   153,   153,   153,   154,
-   154,   154,   154,   154,   155,   155,   155,   156,   156,   156,
-   157,   157,   157,   157,   157,   157,   157,   157,   158,   158,
-   158,   158,   158,   159,   159,   160,   160,   161,   161,   162,
-   162,   163,   163,   163,   163,   163,   164,   164,   165,   165,
-   166,   166,   167,   167,   167,   169,   168,   168,   170,   170,
-   170,   170,   172,   171,   171,   173,   173,   173,   173,   174,
-   174,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-   175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-   175,   175,   175,   175,   175,   176,   176,   177,   177,   177,
-   177,   178,   178,   179,   179,   179,   180,   180,   180,   180,
-   180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-   180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-   180,   181,   181,   181,   181,   181,   182,   182,   182,   183,
-   183,   183,   183,   184,   184,   184,   185,   185,   185,   185,
-   185,   185,   185,   186,   185,   185,   185,   185,   185,   185,
-   185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-   185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-   185,   185,   185,   187,   187,   188,   188,   189,   189,   190,
-   190,   191,   192,   192,   193,   193,   193,   193,   193,   193,
-   194,   194,   195,   195,   196,   196,   196,   196,   196,   197,
-   197,   198,   198,   198,   198,   198,   198,   199,   199,   199,
-   199,   199,   200,   200,   200,   200,   200,   200,   201,   201,
-   201,   201,   202,   202,   203,   203,   203,   203,   203,   203,
-   203,   204,   204,   204,   205,   205,   206,   206,   207,   207,
-   208,   208,   210,   209,   209,   212,   211,   211,   214,   213,
-   213,   216,   215,   215,   217,   217,   218,   218,   219,   220,
-   220,   221,   221,   221,   221,   221,   222,   222,   222,   222,
-   223,   223,   224,   224,   225,   225,   225,   225,   225,   226,
-   226,   226,   226,   226,   226,   227,   228,   228,   228,   229,
-   229,   230,   230,   231,   231,   231,   233,   232,   232,   234,
-   232,   232,   232,   232,   232,   235,   236,   232,   232,   237,
-   237,   238,   238,   239,   239,   239,   239,   239,   240,   241,
-   242,   242,   242,   242,   242,   243,   244,   244,   244,   245,
-   246,   246,   247,   247,   247,   248,   248,   249,   249,   250,
-   250,   250,   250,   251,   251,   251,   251,   252,   253,   254,
-   254,   254,   254,   255,   255,   256,   256,   256,   256,   256,
-   256,   256,   256,   257,   257,   257,   257,   257,   257,   257,
-   257,   257,   257,   258,   258,   258,   259,   259,   259,   260,
-   260,   261,   261,   262,   262,   263,   263,   263,   263,   264,
-   264,   265,   265,   265,   266,   266,   267,   267,   268,   268,
-   268,   269,   269,   270,   270,   271,   272,   273,   273,   273,
-   273,   274,   274,   274,   274,   274,   274,   275,   275,   276,
-   276,   276,   277,   278,   278,   278,   278,   278,   278,   279,
-   279,   279,   279,   279,   279,   280,   280,   280,   280,   280,
-   280,   281,   281,   281,   281,   281,   282,   283,   284,   284,
-   285,   285,   285,   286,   286,   286,   287,   287,   288,   288,
-   288,   288,   289,   289,   290,   291,   291,   292,   292,   292,
-   292,   292,   292,   293,   293,   293,   294,   294,   295,   296,
-   296,   296,   296,   296,   296,   296,   297,   297,   298,   298,
-   298,   298,   298,   298,   298,   298,   298,   298,   298,   299,
-   299,   299,   299,   299,   299,   299,   299,   299,   299,   299,
-   300,   300,   300,   300,   301,   302,   303,   304,   304,   305,
-   305,   306,   307,   307,   309,   308,   311,   312,   310,   313,
-   314,   313,   315,   315,   316,   316,   317,   318,   316,   316,
-   319,   320,   316,   321,   322,   316,   323,   324,   325,   326,
-   316,   327,   328,   316,   329,   316,   330,   316,   331,   316,
-   316,   316,   316,   316,   316,   316,   316,   316,   316,   316,
-   316,   316,   316,   316,   333,   334,   332,   336,   337,   335,
-   338,   338,   340,   341,   342,   339,   343,   343,   344,   344,
-   345,   345,   345,   345,   346,   346,   346,   347,   347,   348,
-   348,   348,   349,   349,   350,   350,   351,   352,   352,   353,
-   353,   353,   354,   354,   354,   354,   354,   354,   354,   354,
-   354,   354,   356,   355,   357,   357,   358,   358,   358,   358,
-   358,   359,   359,   360,   360,   360,   360,   360,   360,   361,
-   361,   362,   362,   363,   364,   364,   365,   365,   365,   366,
-   367,   367,   368,   368,   368,   368,   369,   370,   370,   370,
-   370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
-   370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
-   370,   370,   370,   370,   370,   370,   370,   370,   370,   370,
-   370,   370
+   114,   114,   116,   115,   115,   117,   117,   118,   119,   120,
+   121,   121,   123,   122,   124,   124,   124,   124,   124,   124,
+   124,   125,   124,   126,   124,   124,   124,   124,   124,   127,
+   127,   127,   128,   128,   128,   128,   129,   129,   131,   130,
+   130,   132,   132,   133,   133,   133,   133,   134,   134,   134,
+   134,   135,   135,   136,   136,   136,   136,   136,   136,   136,
+   136,   136,   137,   137,   138,   138,   138,   139,   139,   140,
+   140,   140,   142,   141,   141,   143,   141,   141,   144,   141,
+   141,   145,   141,   141,   146,   146,   146,   146,   146,   147,
+   147,   147,   147,   148,   148,   148,   148,   148,   148,   148,
+   148,   149,   150,   150,   150,   151,   152,   153,   153,   153,
+   153,   154,   154,   154,   154,   154,   154,   154,   154,   155,
+   155,   155,   155,   155,   156,   156,   156,   157,   157,   157,
+   158,   158,   158,   158,   158,   158,   158,   158,   159,   159,
+   159,   159,   159,   160,   160,   161,   161,   162,   162,   163,
+   163,   164,   164,   164,   164,   164,   165,   165,   166,   166,
+   167,   167,   168,   168,   168,   170,   169,   169,   171,   171,
+   171,   171,   173,   172,   172,   174,   174,   174,   174,   175,
+   175,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+   176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+   176,   176,   176,   176,   176,   177,   177,   178,   178,   178,
+   178,   179,   179,   180,   180,   180,   181,   181,   181,   181,
+   181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+   181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+   181,   182,   182,   182,   182,   182,   182,   183,   183,   183,
+   183,   184,   184,   184,   185,   185,   185,   186,   186,   186,
+   186,   187,   187,   188,   188,   188,   188,   189,   189,   189,
+   189,   189,   189,   189,   190,   189,   189,   189,   189,   189,
+   189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
+   189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
+   189,   189,   189,   189,   189,   189,   189,   191,   191,   192,
+   192,   193,   193,   194,   194,   195,   196,   196,   197,   197,
+   197,   197,   197,   197,   198,   198,   199,   199,   200,   200,
+   200,   200,   200,   201,   201,   202,   202,   202,   202,   202,
+   202,   203,   203,   203,   203,   203,   204,   204,   204,   204,
+   204,   204,   205,   205,   205,   205,   206,   206,   207,   207,
+   207,   207,   207,   207,   207,   208,   208,   208,   209,   209,
+   210,   210,   211,   211,   212,   212,   214,   213,   213,   216,
+   215,   215,   218,   217,   217,   220,   219,   219,   221,   221,
+   222,   222,   223,   224,   224,   225,   225,   225,   225,   225,
+   226,   226,   226,   226,   227,   227,   228,   228,   229,   229,
+   229,   229,   229,   230,   230,   230,   230,   230,   230,   231,
+   232,   232,   232,   233,   233,   234,   234,   235,   235,   235,
+   237,   236,   236,   238,   236,   236,   236,   236,   236,   239,
+   240,   241,   236,   236,   242,   242,   243,   243,   244,   244,
+   244,   244,   244,   245,   246,   247,   247,   247,   247,   247,
+   248,   249,   249,   249,   250,   251,   251,   252,   252,   252,
+   253,   253,   254,   254,   255,   255,   255,   255,   256,   256,
+   256,   256,   257,   258,   259,   259,   259,   259,   260,   260,
+   261,   261,   261,   261,   261,   261,   261,   261,   262,   262,
+   262,   262,   262,   262,   262,   262,   262,   262,   263,   263,
+   263,   264,   264,   264,   265,   265,   266,   266,   267,   267,
+   268,   268,   268,   268,   269,   269,   270,   270,   270,   271,
+   271,   272,   272,   273,   273,   273,   274,   274,   275,   275,
+   276,   277,   278,   278,   278,   278,   279,   279,   279,   279,
+   279,   279,   280,   280,   281,   281,   281,   282,   283,   283,
+   283,   283,   283,   283,   284,   284,   284,   284,   284,   284,
+   285,   285,   285,   285,   285,   285,   286,   286,   286,   286,
+   286,   286,   287,   287,   288,   288,   289,   289,   290,   290,
+   290,   291,   291,   291,   292,   292,   293,   293,   293,   293,
+   294,   294,   295,   296,   296,   297,   297,   297,   297,   297,
+   297,   298,   298,   298,   299,   299,   300,   301,   301,   301,
+   301,   301,   301,   301,   302,   302,   303,   303,   303,   303,
+   303,   303,   303,   303,   303,   303,   303,   304,   304,   304,
+   304,   304,   304,   304,   304,   304,   304,   304,   305,   305,
+   305,   305,   306,   307,   308,   309,   309,   310,   310,   311,
+   312,   312,   314,   313,   316,   317,   315,   318,   319,   318,
+   320,   320,   321,   321,   322,   323,   321,   321,   324,   325,
+   321,   326,   327,   321,   328,   329,   330,   331,   321,   332,
+   333,   321,   334,   321,   335,   321,   336,   321,   321,   321,
+   321,   321,   321,   321,   321,   321,   321,   321,   321,   321,
+   321,   321,   338,   339,   337,   341,   342,   340,   343,   343,
+   345,   346,   347,   344,   348,   348,   349,   349,   350,   350,
+   350,   350,   351,   351,   351,   352,   352,   353,   353,   353,
+   354,   354,   355,   355,   356,   357,   357,   358,   358,   358,
+   359,   359,   359,   359,   359,   359,   359,   359,   359,   359,
+   361,   360,   362,   362,   363,   363,   363,   363,   363,   364,
+   364,   365,   365,   365,   365,   365,   365,   366,   366,   367,
+   367,   368,   369,   369,   370,   370,   370,   371,   372,   372,
+   373,   373,   373,   373,   374,   375,   375,   375,   375,   375,
+   375,   375,   375,   375,   375,   375,   375,   375,   375,   375,
+   375,   375,   375,   375,   375,   375,   375,   375,   375,   375,
+   375,   375,   375,   375,   375,   375,   375,   375,   375,   375
 };
 
 static const short yyr2[] = {     0,
@@ -856,2560 +868,2631 @@ static const short yyr2[] = {     0,
      2,     3,     4,     1,     2,     5,     1,     3,     3,     3,
      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
      3,     3,     3,     3,     3,     3,     5,     3,     3,     1,
-     2,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-     2,     2,     3,     1,     1,     3,     1,     1,     1,     1,
-     3,     3,     3,     0,     4,     4,     2,     4,     2,     2,
-     1,     4,     1,     7,     7,     7,     7,     4,     4,     2,
-     2,     1,     4,     2,     2,     2,     5,     3,     5,     3,
-     4,     6,     2,     1,     2,     1,     2,     1,     1,     1,
-     2,     0,     2,     2,     3,     3,     3,     2,     2,     2,
-     1,     1,     1,     2,     2,     2,     2,     1,     1,     1,
-     1,     2,     2,     3,     3,     3,     4,     1,     2,     2,
-     2,     1,     1,     1,     2,     2,     2,     1,     1,     2,
-     2,     3,     1,     2,     1,     1,     1,     4,     4,     4,
-     4,     1,     1,     1,     1,     3,     1,     3,     1,     3,
-     0,     4,     0,     6,     3,     0,     6,     3,     0,     6,
-     3,     0,     6,     3,     0,     1,     1,     2,     6,     1,
-     3,     0,     1,     4,     6,     4,     1,     1,     1,     1,
-     1,     3,     0,     2,     1,     2,     3,     4,     1,     1,
-     3,     4,     6,     3,     5,     1,     4,     3,     3,     0,
-     3,     3,     3,     0,     2,     2,     0,     7,     4,     0,
-     6,     3,     2,     2,     2,     0,     0,     9,     1,     0,
-     1,     0,     1,     1,     2,     2,     2,     2,     2,     2,
-     3,     4,     3,     2,     3,     0,     1,     3,     2,     2,
-     1,     1,     0,     2,     3,     1,     4,     1,     3,     1,
-     1,     4,     4,     2,     2,     3,     3,     1,     0,     1,
-     2,     4,     3,     1,     2,     2,     2,     2,     2,     2,
-     2,     1,     2,     2,     2,     4,     4,     2,     1,     5,
-     4,     1,     2,     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,
-     6,     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,     3,
-     3,     2,     2,     3,     1,     3,     3,     2,     2,     3,
-     1,     4,     3,     4,     3,     1,     2,     2,     1,     2,
-     4,     4,     2,     1,     1,     1,     1,     2,     2,     2,
-     2,     2,     1,     2,     2,     1,     2,     2,     2,     2,
-     2,     2,     2,     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,     0,     0,     1,     1,
-     2,     3,     1,     2,     0,     5,     0,     0,     6,     1,
-     0,     4,     1,     1,     1,     2,     0,     0,     6,     1,
-     0,     0,     7,     0,     0,     7,     0,     0,     0,     0,
-    14,     0,     0,     9,     0,     5,     0,     7,     0,     4,
-     2,     2,     2,     3,     6,     8,    10,    12,     4,     3,
-     2,     2,     1,     1,     0,     0,     6,     0,     0,     5,
-     1,     2,     0,     0,     0,     8,     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,     1,     2,     2,
-     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,     3,     1,     1,     1,     1,     1,     4,     3,     4,
+     3,     5,     5,     5,     1,     1,     1,     1,     2,     2,
+     3,     4,     4,     1,     1,     1,     3,     1,     1,     1,
+     1,     3,     3,     3,     0,     4,     4,     2,     4,     2,
+     2,     1,     4,     1,     7,     7,     7,     7,     4,     4,
+     2,     2,     1,     4,     2,     2,     5,     3,     2,     2,
+     5,     3,     5,     3,     4,     6,     2,     1,     2,     1,
+     2,     1,     1,     1,     2,     0,     2,     2,     3,     3,
+     3,     2,     2,     2,     1,     1,     1,     2,     2,     2,
+     2,     1,     1,     1,     1,     2,     2,     3,     3,     3,
+     4,     1,     2,     2,     2,     1,     1,     1,     2,     2,
+     2,     1,     1,     2,     2,     3,     1,     2,     1,     1,
+     1,     4,     4,     4,     4,     1,     1,     1,     1,     3,
+     1,     3,     1,     3,     0,     4,     0,     6,     3,     0,
+     6,     3,     0,     6,     3,     0,     6,     3,     0,     1,
+     1,     2,     6,     1,     3,     0,     1,     4,     6,     4,
+     1,     1,     1,     1,     1,     3,     0,     2,     1,     2,
+     3,     4,     1,     1,     3,     4,     6,     3,     5,     1,
+     4,     3,     3,     0,     3,     3,     3,     0,     2,     2,
+     0,     7,     4,     0,     6,     3,     2,     2,     2,     0,
+     0,     0,    10,     1,     0,     1,     0,     1,     1,     2,
+     2,     2,     2,     2,     2,     3,     4,     3,     2,     3,
+     0,     1,     3,     2,     2,     1,     1,     0,     2,     3,
+     1,     4,     1,     3,     1,     1,     4,     4,     2,     2,
+     3,     3,     1,     0,     1,     2,     4,     3,     1,     2,
+     2,     2,     2,     2,     2,     2,     1,     2,     2,     2,
+     4,     4,     2,     1,     5,     4,     1,     2,     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,     6,     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,     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,     2,     2,     2,     2,
+     1,     2,     2,     1,     2,     2,     2,     2,     2,     2,
+     2,     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,     0,     0,     1,     1,     2,     3,
+     1,     2,     0,     5,     0,     0,     6,     1,     0,     4,
+     1,     1,     1,     2,     0,     0,     6,     1,     0,     0,
+     7,     0,     0,     7,     0,     0,     0,     0,    14,     0,
+     0,     9,     0,     5,     0,     7,     0,     4,     2,     2,
+     2,     3,     6,     8,    10,    12,     4,     3,     2,     2,
+     1,     1,     0,     0,     6,     0,     0,     5,     1,     2,
+     0,     0,     0,     8,     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,     1,     2,     2,     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,
-     3,     2,     2,     2,     2,     3,     2,     2,     4,     4,
-     3,     2
+     2,     2,     2,     2,     2,     2,     2,     2,     3,     2,
+     2,     2,     2,     3,     2,     2,     4,     4,     3,     2
 };
 
 static const short yydefact[] = {     3,
-    13,    13,     5,     0,     4,     0,   244,   574,   575,   334,
-   346,   524,     0,    11,    12,     0,     0,     0,    10,   434,
-   777,     0,     0,     0,     0,   599,   245,   246,    62,     0,
-     0,   764,     0,    37,     0,     0,    14,     0,     8,     0,
-    17,    16,    68,    89,    65,     0,   576,   143,   255,   555,
-     0,   321,     0,   320,   339,     0,   359,   338,   377,   345,
-     0,   447,   446,   453,   452,   451,   429,   333,   540,   347,
-   541,    87,   254,   566,   538,     0,   577,   522,     0,     0,
-   243,    60,    61,   579,     0,   580,     0,     0,   120,   121,
-   122,   123,   124,   420,   423,     0,   595,     0,   424,     0,
-     0,     0,     0,   121,   122,   123,   124,    24,     0,     0,
-     0,     0,     0,     0,     0,   425,   583,     0,   586,     0,
-     0,     0,     0,     0,     0,    30,     0,     0,   334,    39,
-   134,     0,     0,   339,   133,     0,   581,     0,   553,     0,
-     0,     0,   552,     0,     0,     0,     0,   255,     0,   526,
-     0,   254,   522,    29,     0,    27,     3,    38,     0,    53,
-    52,    69,    15,     0,     0,   393,    66,    58,   582,   526,
-     0,   522,    59,     0,     0,     0,    85,     0,   355,   311,
-   537,   312,   549,     0,   522,   336,   335,    57,    88,   322,
-     0,   357,   337,    86,   328,   352,   353,   323,   341,   343,
-   332,   354,     0,    54,   378,   435,   436,   437,   438,   450,
-   129,   128,   130,   439,   440,   444,     0,     0,   453,   764,
-   449,   468,   469,   525,   340,     0,     0,   375,   575,   597,
-   143,   568,   543,   578,     0,   542,   539,     0,   812,   808,
-   807,   805,   787,   792,   793,     0,   799,   798,   784,   785,
-   783,   802,   791,   788,   789,   790,   794,   795,   781,   782,
-   778,   779,   780,   804,   796,   797,   786,   803,     0,   800,
-   707,   339,   708,   773,   524,   258,   300,     0,     0,     0,
-     0,   296,   294,   271,   298,   299,     0,     0,     0,     0,
-     0,   240,     0,     0,   146,   147,   153,   152,     0,   154,
-   155,     0,     0,   156,     0,   142,     0,   148,     0,   214,
-     0,   217,   151,   257,   182,     0,     0,   259,   260,     0,
-   150,   318,   339,   319,   569,   282,   273,     0,     0,   145,
-     0,   138,     0,   339,   137,   422,     0,   417,   596,   594,
-     0,   157,   158,     0,     0,     0,   382,     3,    22,     0,
-   592,   588,   589,   591,   593,   590,   120,   121,   122,   123,
-   124,   585,   587,   584,   248,   249,     0,   247,    33,    34,
-     0,   567,    32,    31,    41,     0,   132,   131,   140,     0,
-   551,     0,   550,   242,   252,     0,   559,   251,     0,   558,
-     0,   256,   563,     0,     0,    13,     0,     0,     9,     9,
-   102,    72,   107,   695,     0,    64,    63,    71,   105,     0,
-     0,   103,    67,   565,     0,     0,   530,     0,   767,     0,
-   535,     0,   534,     0,     0,     0,     0,   522,   375,     0,
-    56,   526,   522,   548,     0,   325,   326,     0,    55,   375,
-   330,   329,   331,   324,   344,   361,   360,   441,   445,   443,
-     0,   448,   454,     0,     0,   342,     0,   374,   376,   522,
-    73,   522,    79,   523,   554,   575,   598,   143,     0,     0,
-   801,   806,   341,   522,   522,     0,   522,   811,     0,     0,
-     0,   189,     0,     0,   191,   204,   205,     0,     0,     0,
-     0,     0,   241,   188,   185,   184,   186,     0,     0,     0,
-     0,     0,   257,     0,     0,     0,   183,     0,   141,   187,
-     0,     0,   215,     0,     0,     0,     0,     0,     0,     0,
+    13,    13,     5,     0,     4,     0,   245,   592,   593,     0,
+   348,   360,   539,     0,    11,    12,     0,     0,     0,    10,
+   449,   795,     0,     0,     0,     0,   617,   246,   247,    62,
+     0,     0,   782,     0,    37,     0,     0,    14,     0,     8,
+     0,    17,    16,    68,    89,    65,     0,   594,   143,   265,
+   243,   266,   570,     0,   335,     0,   334,   353,     0,   373,
+   352,   391,   359,     0,   462,   461,   468,   467,   466,   444,
+   347,   555,   361,   556,    87,   264,   581,   553,     0,   595,
+   537,     0,     0,   244,    60,    61,     0,   597,     0,   598,
+     0,     0,     0,   120,   121,   122,   123,   124,   434,   437,
+     0,   613,     0,   438,     0,     0,     0,     0,   121,   122,
+   123,   124,    24,     0,     0,     0,     0,     0,     0,     0,
+   439,   601,     0,   604,     0,     0,     0,     0,     0,     0,
+    30,     0,     0,   348,    39,   134,     0,     0,   353,   133,
+     0,   599,     0,     0,   568,     0,     0,     0,   567,     0,
+     0,     0,     0,   265,     0,   541,     0,   264,   537,    29,
+     0,    27,     3,    38,     0,    53,    52,    69,    15,     0,
+     0,   407,    66,    58,   600,   541,     0,   537,    59,     0,
+     0,     0,    85,     0,   369,   325,   552,   326,   564,     0,
+   537,   350,   349,    57,    88,   336,     0,   371,   351,    86,
+   342,   366,   367,   337,   355,   357,   346,   368,     0,    54,
+   392,   450,   451,   452,   453,   465,   129,   128,   130,   454,
+   455,   459,     0,     0,   468,   782,   464,   483,   440,   540,
+   354,     0,     0,   389,   593,     0,   615,   143,   585,   586,
+   582,   558,   596,     0,   557,   554,     0,   830,   826,   825,
+   823,   805,   810,   811,     0,   817,   816,   802,   803,   801,
+   820,   809,   806,   807,   808,   812,   813,   799,   800,   796,
+   797,   798,   822,   814,   815,   804,   821,     0,   818,   725,
+   353,   726,   791,     0,   245,   539,   269,   314,     0,     0,
+     0,     0,   310,   308,   282,   312,   313,     0,     0,     0,
+     0,     0,   247,   240,     0,     0,   153,   152,     0,   154,
+   155,     0,     0,   156,     0,     0,   148,     0,   214,     0,
+   217,   151,   268,   182,     0,     0,   270,   271,     0,   150,
+   332,   353,   333,   587,   293,   284,     0,     0,   146,   147,
+   142,     0,   145,     0,   249,     0,   138,     0,   353,   137,
+   436,     0,   431,   614,   612,     0,   157,   158,     0,     0,
+     0,   396,     3,    22,     0,   610,   606,   607,   609,   611,
+   608,   120,   121,   122,   123,   124,   603,   605,   602,   256,
+   257,     0,   255,    33,    34,     0,   584,   583,    32,    31,
+    41,     0,   132,   131,   140,     0,     0,   566,     0,   565,
+   242,   260,     0,   574,   259,     0,   573,     0,   267,   578,
+     0,     0,    13,     0,     0,     9,     9,   102,    72,   107,
+   713,     0,    64,    63,    71,   105,     0,     0,   103,    67,
+   580,     0,     0,   545,     0,   785,     0,   550,     0,   549,
+     0,     0,     0,     0,   537,   389,     0,    56,   541,   537,
+   563,     0,   339,   340,     0,    55,   389,   344,   343,   345,
+   338,   358,   375,   374,   456,   460,   458,     0,   463,   469,
+   484,   356,     0,   388,   390,   537,    73,     0,     0,     0,
+   537,    79,   538,   569,   593,   616,   143,     0,     0,   819,
+   824,   355,   537,   537,     0,   537,   829,   251,     0,     0,
+     0,     0,   189,     0,     0,   191,   204,   205,     0,     0,
+     0,     0,     0,   241,   188,   185,   184,   186,     0,     0,
+     0,     0,     0,   268,     0,     0,     0,   183,     0,   262,
+   187,     0,     0,   215,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   267,   269,   270,   304,   303,
-     0,     0,     0,     0,     0,   193,   520,     0,   201,   301,
-   293,     0,   764,   285,   286,     0,     0,   313,   616,   612,
-   621,     0,   526,   522,   522,   522,   315,   619,     0,   573,
-   317,     0,     0,   316,   284,     0,   280,   295,   297,   570,
-     0,   281,   144,   136,   135,   517,   432,   515,   419,     0,
-   348,     0,     0,   349,   350,   351,   388,   389,   390,   387,
-     0,   380,   383,     0,     3,     0,    28,    36,    35,    46,
-     0,    48,    42,   763,   758,     0,   318,   339,    44,   319,
-   762,    50,   139,   557,   556,   256,   560,     0,    19,    21,
-    68,   108,   302,     0,   645,    70,   643,   399,     0,   395,
-   394,   181,     0,   180,   527,   564,     0,   737,   738,     0,
-   732,   339,     0,   731,   733,   765,   747,     0,     0,   562,
-   533,   532,     0,     0,   547,     0,   365,   356,   546,     0,
-   767,   536,   327,   358,   371,   375,   442,   574,   575,   764,
-     0,   764,   576,   455,   456,   458,   764,   461,   460,     0,
-   489,   575,     0,     0,   482,     0,     0,   492,     0,   100,
-    95,     0,   143,   494,   497,     0,   474,     0,    98,     0,
-   375,     0,   372,   767,   730,   767,   730,   522,    76,   522,
-    82,   810,   809,   773,   773,   773,     0,     0,     0,   573,
-     0,     0,     0,     0,   339,     0,     0,     0,   263,     0,
-   261,   262,     0,   212,   149,   244,   574,   575,   245,   246,
-     0,     0,   400,   430,     0,   239,   238,   722,   721,     0,
+     0,     0,     0,     0,     0,     0,   278,   280,   281,   318,
+   317,     0,     0,     0,     0,     0,   193,   535,     0,   201,
+   315,   307,     0,   782,   296,   299,   300,     0,     0,   327,
+   634,   630,   639,     0,   541,   537,   537,   537,   329,   637,
+     0,   591,   331,     0,     0,   330,   295,     0,   291,   309,
+   311,   588,     0,   292,   141,   144,   248,   136,   135,   532,
+   447,   530,   433,     0,   362,     0,     0,   363,   364,   365,
+   402,   403,   404,   401,     0,   394,   397,     0,     3,     0,
+    28,    36,    35,    46,     0,    48,    42,   781,   776,     0,
+   332,   353,    44,   333,   780,    50,   139,   263,   572,   571,
+   267,   575,     0,    19,    21,    68,   108,   316,     0,   663,
+    70,   661,   413,     0,   409,   408,   181,     0,   180,   542,
+   579,     0,   755,   756,     0,   750,   353,     0,   749,   751,
+   783,   765,     0,     0,   577,   548,   547,     0,     0,   562,
+     0,   379,   370,   561,     0,   785,   551,   341,   372,   385,
+   389,   457,   592,   593,   782,     0,   782,   594,   470,   471,
+   473,   782,   476,   475,     0,     0,     0,     0,   386,   785,
+   748,     0,     0,     0,   785,   748,   537,    76,   537,    82,
+   828,   827,   791,   791,   791,   250,     0,     0,     0,   591,
+     0,     0,     0,     0,   353,     0,     0,     0,   274,     0,
+   272,   273,     0,   212,   149,   245,   592,   593,   246,   247,
+     0,     0,   414,   445,     0,   239,   238,   740,   739,     0,
    236,   235,   233,   234,   232,   231,   230,   227,   228,   229,
    225,   226,   220,   221,   222,   223,   224,   218,   219,     0,
      0,     0,     0,     0,     0,   195,   209,     0,     0,   194,
-   522,   522,     0,   522,   519,   606,     0,     0,     0,     0,
-   288,     0,   290,     0,   615,   614,   611,   610,   763,     0,
-     0,   630,     0,     0,   767,   314,   767,   617,   522,   730,
-   526,   616,   612,     0,     0,   522,     0,     0,     0,     0,
-     0,     0,   433,     0,   432,   179,   178,   177,   176,   382,
-     0,     0,    25,     0,    26,    47,     0,    40,     0,   616,
-   612,     0,   754,   522,   757,   759,   755,   756,   439,     0,
-    18,    20,   125,   113,   126,   127,     0,   106,   109,     0,
-     0,     0,     0,   644,   636,   396,     0,   104,   531,   528,
-   736,   753,   742,   740,     0,   529,   735,   752,   741,   739,
-   734,   766,   749,   760,   750,   743,   748,   769,     0,   363,
-   545,   544,   369,   368,   465,     0,   464,   764,   764,   764,
-     0,   522,   730,   488,   483,   101,   493,   375,   375,   480,
-   481,   478,   479,   522,   730,   244,   574,     0,   361,    96,
-   484,   495,   500,   501,   361,   361,     0,     0,   361,    94,
-   485,   498,   361,   475,   476,   477,   375,     0,   426,   362,
-     0,    75,     0,    81,     0,   767,   730,   767,   730,   775,
-   774,   776,   272,   190,   192,   278,   279,     0,     0,     0,
-     0,   262,   265,     0,     0,     0,     0,   213,     0,   266,
-   268,   207,   206,   197,     0,   196,   211,     0,     0,   603,
-   601,     0,   604,   526,   202,     0,     0,   291,     0,     0,
-   613,   609,   620,   522,   629,   627,   628,   618,   767,     0,
-   625,     0,   571,   572,     0,   283,   518,   516,   421,     0,
-   381,   379,   244,     0,    23,    43,    49,   615,   611,   616,
-   612,     0,   538,     0,   522,   617,    51,     0,   111,     0,
-   115,     0,   117,     0,   119,     0,   696,   638,     0,   397,
-   616,   612,     0,   257,     0,   569,   761,     0,     0,   770,
-   771,     0,     0,     0,   366,     0,     0,     0,   467,   466,
-   459,   767,     0,   393,   393,   767,     0,     0,     0,   375,
-   375,     0,   375,   375,     0,   375,     0,   393,     0,   414,
-   373,   522,   522,    78,     0,    84,     0,     0,     0,     0,
-     0,     0,   404,     0,     0,   401,   216,   237,     0,   198,
-   199,   208,   210,   602,   600,   607,   605,     0,   203,     0,
-   287,   289,   767,   623,   522,   624,   418,     0,   384,   386,
-   615,   611,   543,   617,   112,   110,     0,     0,     0,     0,
-     0,   169,   637,     0,   639,   640,   398,     0,   572,   751,
-   745,   746,   744,     0,   768,   364,   370,     0,   462,   463,
-   457,    91,   522,   487,   491,    93,   522,   375,   375,   509,
-   393,   244,   574,     0,   496,   502,   503,   361,   361,   393,
-   393,     0,   393,   499,   486,     0,   767,   767,   522,   522,
-     0,     0,     0,     0,   402,     0,     0,     0,   200,   608,
-   292,   626,   767,     0,   114,   116,   118,   703,   697,   701,
-   391,     0,   646,     0,   244,   574,   575,   647,   661,   664,
-   667,   636,     0,     0,     0,     0,     0,     0,   245,   693,
-   698,     0,   718,     0,   655,     0,     0,   339,     0,   632,
-   653,   660,   631,   654,   694,     0,   641,   262,   772,   367,
-   767,   767,   508,   505,   507,     0,     0,   375,   375,   375,
-   504,   506,   490,   416,     0,   415,   410,    74,    80,   767,
-   767,   274,   275,   276,   277,     0,   405,   521,   622,   385,
-   636,   702,     0,   642,   635,   172,   711,   713,   714,   636,
-   636,   636,     0,     0,     0,   679,   681,   682,   683,     0,
-     0,     0,   712,     0,   310,   719,     0,   656,   308,   361,
-     0,   309,     0,   361,     0,     0,     0,   170,   634,   633,
-   657,   692,   691,    90,    92,   375,   375,   514,   393,   393,
-     0,     0,   428,    77,    83,   403,     0,   392,     0,     0,
-   651,   650,     0,     0,     0,     0,   675,     0,   684,     0,
-   690,   699,     0,   306,   307,     0,     0,     0,   305,   171,
-   636,   513,   511,   510,   512,   413,   412,   406,    65,    68,
-     0,   704,   161,     0,   648,   662,     0,   665,   638,   716,
-   668,     0,   168,     0,   339,     0,     0,     0,   680,   689,
-     0,     0,   658,     0,   411,     0,     0,     0,     0,   636,
-     0,   637,     0,   717,   636,   715,   672,   361,   677,   676,
-   700,   723,     0,   637,   409,     0,   408,   709,   710,   705,
-   162,   649,   173,   637,   175,   652,   159,     0,     0,     0,
-   636,   375,     0,     0,     0,   724,   725,   685,   659,   407,
-   637,   638,   663,     0,   666,   165,     0,   164,   673,     0,
-   678,     0,   723,     0,     0,   706,   174,   160,   669,   637,
-   166,     0,     0,   686,   726,     0,   674,     0,   727,     0,
-     0,     0,   167,   728,     0,   687,   670,     0,     0,     0,
-   729,   688,   637,   671,     0,     0,     0
+   537,   537,     0,   537,   534,   624,     0,     0,     0,     0,
+   298,     0,   302,     0,   304,     0,   633,   632,   629,   628,
+   781,     0,     0,   648,     0,     0,   785,   328,   785,   635,
+   537,   748,   541,   634,   630,     0,     0,   537,     0,     0,
+     0,     0,     0,     0,   448,     0,   447,   179,   178,   177,
+   176,   396,     0,     0,    25,     0,    26,    47,     0,    40,
+     0,   634,   630,     0,   772,   537,   775,   777,     0,   773,
+   774,   454,     0,    18,    20,   125,   113,   126,   127,     0,
+   106,   109,     0,     0,     0,     0,   662,   654,   410,     0,
+   104,   546,   543,   754,   771,   760,   758,     0,   544,   753,
+   770,   759,   757,   752,   784,   767,   778,   768,   761,   766,
+   787,     0,   377,   560,   559,   383,   382,   480,     0,   479,
+   782,   782,   782,     0,   504,   593,     0,     0,   497,     0,
+     0,   507,     0,   100,    95,     0,   143,   509,   512,     0,
+   489,     0,    98,     0,   389,   376,     0,    75,     0,     0,
+     0,     0,    81,     0,   785,   748,   785,   748,   793,   792,
+   794,   283,   190,   192,   289,   290,     0,     0,     0,     0,
+   273,   276,     0,     0,     0,     0,   213,     0,   277,   279,
+   207,   206,   197,     0,   196,   211,     0,     0,   621,   619,
+     0,   622,   541,   202,     0,     0,   305,     0,     0,     0,
+   631,   627,   638,   537,   647,   645,   646,   636,   785,     0,
+   643,     0,   589,   590,     0,   294,   533,   531,   435,     0,
+   395,   393,   245,     0,    23,    43,    49,   633,   629,   634,
+   630,     0,   553,     0,   537,   635,    51,     0,   111,     0,
+   115,     0,   117,     0,   119,     0,   714,   656,     0,   411,
+   634,   630,     0,   268,     0,   587,   779,     0,     0,   788,
+   789,     0,     0,     0,   380,     0,     0,     0,   482,   481,
+   474,   537,   748,   503,   498,   101,   508,   389,   389,   495,
+   496,   493,   494,   537,   748,   245,   592,     0,   375,    96,
+   499,   510,   515,   516,   375,   375,     0,     0,   375,    94,
+   500,   513,   375,   490,   491,   492,   389,     0,   441,   387,
+   537,   253,   252,   254,   537,    78,     0,    84,     0,     0,
+     0,     0,     0,     0,   418,     0,     0,   415,   216,   237,
+     0,   198,   199,   208,   210,   620,   618,   625,   623,     0,
+   203,     0,   297,   301,   303,   785,   641,   537,   642,   432,
+     0,   398,   400,   633,   629,   558,   635,   112,   110,     0,
+     0,     0,     0,     0,   169,   655,     0,   657,   658,   412,
+     0,   590,   769,   763,   764,   762,     0,   786,   378,   384,
+     0,   477,   478,   472,   785,     0,   407,   407,   785,     0,
+     0,     0,   389,   389,     0,   389,   389,     0,   389,     0,
+   407,     0,   428,   785,   785,   537,   537,     0,     0,     0,
+     0,   416,     0,     0,     0,   200,   626,   306,   644,   785,
+     0,   114,   116,   118,   721,   715,   719,   405,     0,   664,
+     0,   245,   592,   593,   665,   679,   682,   685,   654,     0,
+     0,     0,     0,     0,     0,   246,   711,   716,     0,   736,
+     0,   673,     0,     0,   353,     0,   650,   671,   678,   649,
+   672,   712,     0,   659,   273,   790,   381,    91,   537,   502,
+   506,    93,   537,   389,   389,   524,   407,   245,   592,     0,
+   511,   517,   518,   375,   375,   407,   407,     0,   407,   514,
+   501,     0,    74,    80,   785,   785,   285,   286,   287,   288,
+     0,   419,   536,   640,   399,   654,   720,     0,   660,   653,
+   172,   729,   731,   732,   654,   654,   654,     0,     0,     0,
+   697,   699,   700,   701,     0,     0,     0,   730,     0,   324,
+   737,     0,   674,   322,   375,     0,   323,     0,   375,     0,
+     0,     0,   170,   652,   651,   675,   710,   709,   785,   785,
+   523,   520,   522,     0,     0,   389,   389,   389,   519,   521,
+   505,   430,     0,   429,   424,    77,    83,   417,     0,   406,
+     0,     0,   669,   668,     0,     0,     0,     0,   693,     0,
+   702,     0,   708,   717,     0,   320,   321,     0,     0,     0,
+   319,   171,   654,    90,    92,   389,   389,   529,   407,   407,
+     0,     0,   443,     0,   722,   161,     0,   666,   680,     0,
+   683,   656,   734,   686,     0,   168,     0,   353,     0,     0,
+     0,   698,   707,     0,     0,   676,   528,   526,   525,   527,
+   427,   426,   420,    65,    68,     0,     0,     0,     0,   654,
+     0,   655,     0,   735,   654,   733,   690,   375,   695,   694,
+   718,   741,     0,   655,     0,   425,   727,   728,   723,   162,
+   667,   173,   655,   175,   670,   159,     0,     0,     0,   654,
+   389,     0,     0,     0,   742,   743,   703,   677,   423,     0,
+   422,   655,   656,   681,     0,   684,   165,     0,   164,   691,
+     0,   696,     0,   741,     0,     0,   421,   724,   174,   160,
+   687,   655,   166,     0,     0,   704,   744,     0,   692,     0,
+   745,     0,     0,     0,   167,   746,     0,   705,   688,     0,
+     0,     0,   747,   706,   655,   689,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1485,
-   396,     2,   397,   159,   630,   305,   227,     3,     4,    37,
-   605,   348,   698,   367,    39,   699,   376,   611,   612,   613,
-    41,    42,   405,   165,   163,    43,   700,   715,   957,   717,
-   959,    45,   701,   702,   166,   167,   406,   632,   868,   869,
-   586,   870,   215,    46,    47,    48,   306,   307,   308,   309,
-  1234,  1429,  1375,  1447,  1384,  1468,  1143,  1424,  1442,   342,
-   825,   310,   545,   790,   311,   312,   343,   314,   369,   385,
-    50,   315,   505,   316,   317,   318,   319,   407,   320,  1235,
-   446,   565,   651,  1236,    52,   198,   616,    54,   199,   483,
-   200,   178,   191,    56,   429,   179,  1063,   447,  1158,   192,
-  1064,    57,   951,   458,    58,    59,   601,   602,   603,  1212,
-   412,   753,   754,  1369,  1370,  1333,  1266,  1186,    60,   590,
-   337,  1090,  1267,   977,   834,    61,    62,    63,    64,   219,
-    65,    66,    67,   221,   684,   685,   686,   687,   223,   454,
-   455,   706,   707,   708,   931,   941,   932,  1175,   933,   934,
-  1176,  1177,   587,   588,   546,   815,    68,   415,   416,   172,
-   180,    69,    70,    71,   181,   182,   151,    73,   126,   325,
-   326,   327,    75,   328,    77,   689,   117,   118,   119,    99,
-    78,   329,   795,   796,   810,   568,  1239,  1240,  1341,  1213,
-  1144,  1145,  1146,   636,  1241,   875,  1242,  1290,  1400,  1343,
-  1377,  1243,  1244,  1361,  1414,  1291,  1401,  1292,  1403,  1293,
-  1405,  1466,  1480,  1431,  1460,  1388,  1433,  1348,   408,   633,
-  1140,  1245,  1304,  1391,  1209,  1210,  1281,  1398,  1441,  1386,
-  1372,  1246,  1381,  1307,   760,  1435,  1436,  1437,  1475,   653,
-   654,   897,  1059,  1153,   655,   656,   657,   893,   658,   144,
-   895,   660,  1061,  1062,   478,    80,    81
+static const short yydefgoto[] = {  1527,
+   413,     2,   414,   165,   655,   315,   233,     3,     4,    38,
+   629,   363,   932,   382,    40,   933,   392,   635,   636,   637,
+    42,    43,   422,   171,   169,    44,   934,   721,   956,   726,
+   958,    46,   935,   936,   172,   173,   423,   657,   881,   882,
+   610,   883,   221,    47,    48,    49,   341,   316,   317,   318,
+  1251,  1468,  1408,  1488,  1417,  1510,  1166,  1463,  1483,   357,
+   837,   319,   566,   800,   320,   321,   358,   323,    51,   240,
+   384,   402,    52,    53,   324,   526,   325,   326,   327,   328,
+   424,   329,  1252,   463,   587,   330,  1253,    55,   204,   640,
+   331,   205,   504,   206,   184,   197,    59,   446,   185,  1063,
+   464,  1181,   198,  1064,    60,   947,   474,    61,    62,   625,
+   626,   627,  1229,   429,   763,   764,  1434,  1435,  1403,  1364,
+  1292,    63,   614,   352,   471,  1203,  1365,   976,   846,    64,
+    65,    66,    67,   225,    68,    69,    70,   227,   709,   710,
+   711,   712,   229,   716,   717,   940,   941,   942,  1091,  1101,
+  1092,  1281,  1093,  1094,  1282,  1283,   611,   612,   567,   827,
+   333,   432,   433,   178,   186,    72,    73,    74,   187,   188,
+   157,    76,   131,   334,   335,   336,    78,   337,    80,   714,
+   122,   123,   124,   104,    81,   338,   805,   806,   822,   590,
+  1256,  1257,  1373,  1230,  1167,  1168,  1169,   661,  1258,   888,
+  1259,  1315,  1440,  1375,  1410,  1260,  1261,  1393,  1454,  1316,
+  1441,  1317,  1443,  1318,  1445,  1508,  1522,  1470,  1502,  1421,
+  1472,  1380,   425,   658,  1163,  1262,  1329,  1424,  1226,  1227,
+  1306,  1438,  1482,  1419,  1405,  1263,  1414,  1332,   770,  1474,
+  1475,  1476,  1517,   678,   679,   910,  1059,  1176,   680,   681,
+   682,   906,   683,   150,   908,   685,  1061,  1062,   497,    83,
+    84
 };
 
-static const short yypact[] = {   115,
-   119,-32768,-32768,  9991,-32768,    30,-32768,    37,   157,    97,
--32768,-32768,   927,-32768,-32768,    78,   123,   130,-32768,-32768,
--32768,  1216,   779,  1646,  3278,-32768,   234,   307,-32768,  1690,
-  1690,-32768,  4141,-32768,  9991,   277,-32768,   313,   152, 10061,
--32768,-32768,   279,-32768,   361,   365,   335,-32768,-32768,   286,
-   468,-32768,  5105,-32768,  2181,   530,-32768,   368,-32768,-32768,
-  1388,-32768,-32768,   375,-32768,-32768,   372,  3072,-32768,-32768,
--32768,   914,-32768,-32768,-32768,   215,-32768,-32768,   732,  3460,
--32768,-32768,-32768,-32768,  8512,-32768,  8512, 10273,-32768,    37,
-   157,   234,   307,   358,   393,   335,-32768,   732,-32768,   732,
-  8961,  8961,   408,-32768,-32768,-32768,-32768,-32768,   287,   501,
-   160,   370,   388,   515,   542,-32768,-32768,   241,-32768,   460,
-    37,   157,   851,   234,   307,-32768,   402,   402,-32768,   456,
--32768,  4611,  4548,  1999,-32768,  8512,-32768,  2467,-32768,  1940,
-  1049,  2467,-32768,   741,  2537,  2537,  4141,   493,   502,   519,
-   525,   549,-32768,-32768,   629,-32768,   550,-32768,  5978,    30,
--32768,-32768,-32768,   679,   126,    46,   630,-32768,-32768,   582,
-    70,-32768,-32768,  3172,  3172,  4632,   914,   596,-32768,-32768,
-   288,-32768,-32768,  2125,-32768,-32768,-32768,-32768,-32768,  2181,
-   650,-32768,   368,   914,-32768,-32768,-32768,  2185,  2181,-32768,
-   368,-32768,  4611,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   335,  1265,  1265,   375,-32768,
--32768,-32768,-32768,-32768,   671,   732,   604,   368,   473,-32768,
-   196,-32768,-32768,-32768,  3589,-32768,-32768,   259,-32768,   606,
-   618,-32768,-32768,-32768,-32768,   653,-32768,-32768,-32768,-32768,
+static const short yypact[] = {   114,
+   129,-32768,-32768, 10013,-32768,    40,    57,    45,    73,    68,
+   155,-32768,-32768,  1229,-32768,-32768,   202,   239,   260,-32768,
+-32768,-32768,  1097,  1036,   915, 10243,-32768,   264,   168,-32768,
+  2214,  2214,-32768,  2014,-32768, 10013,   323,-32768,   317,   182,
+ 10072,-32768,-32768,   311,-32768,   398,   366,   389,-32768,-32768,
+-32768,-32768,   246,  3367,-32768,  4571,-32768,   975,   284,-32768,
+   414,-32768,-32768,  1604,-32768,-32768,   415,-32768,-32768,   438,
+ 10673,-32768,-32768,-32768,  1694,-32768,-32768,-32768,  2132,-32768,
+-32768,   609,  7413,   377,-32768,-32768,  8981,-32768,  8529,-32768,
+  8529,  8529, 10450,-32768,    45,    73,   264,   447,   408,   467,
+   389,-32768,   609,-32768,   609,  8981,  8981,   450,-32768,-32768,
+-32768,-32768,-32768,   207,   528,   419,   503,   556,   537,   578,
+-32768,-32768,   814,-32768,  1121,    45,    73,   508,   264,   447,
+-32768,  1164,  1000,-32768,   495,-32768,  5263,  5847,  1894,-32768,
+  8529,-32768,  8981,  4134,-32768,  2240,   649,  4134,-32768,  1259,
+  4258,  4258,  2014,   531,   552,   570,   559,   562,-32768,-32768,
+   670,-32768,   573,-32768,  5005,    40,-32768,-32768,-32768,   694,
+   130,   370,   642,-32768,-32768,   610,   212,-32768,-32768,  4314,
+  4314,  5429,  1694,   399,-32768,-32768,   256,-32768,-32768,  2528,
+-32768,-32768,-32768,-32768,-32768,   975,   492,-32768,   414,  1694,
+-32768,-32768,-32768,  1501,   975,-32768,   414,-32768,  5263,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   389,  1289,  1289,   415,-32768,-32768,-32768,-32768,-32768,
+   767,   609,   627,   414,   441,  1133,-32768,   338,-32768,-32768,
+-32768,-32768,-32768,  4666,-32768,-32768,   231,-32768,   632,   645,
+-32768,-32768,-32768,-32768,   674,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   611,-32768,
--32768,   671,  3072,   751,   634,-32768,-32768,  9575,  9662,  9749,
-  9749,-32768,-32768,-32768,-32768,-32768,   636,   657,   664,   666,
-   675,  9048,   741,  9749,-32768,-32768,-32768,-32768,  9749,-32768,
--32768,  9749,  7003,-32768,  9749,-32768,   477,-32768,  9749,-32768,
-  9135,-32768,  5223,-32768,  2024,  1109,  9222,-32768,   743,  1274,
--32768,   339,  4069,  1583,-32768,   221,-32768,  1120,  2327,-32768,
-   477,-32768,  4611,  2113,-32768,-32768,   741,   641,-32768,-32768,
-   648,   708, 10430,   685,   687,   693,  1796,   550,-32768,   851,
--32768,-32768,-32768,-32768,-32768,-32768,   501,   160,   370,   388,
-   515,-32768,-32768,-32768,    37,   157,   715,-32768,-32768,-32768,
-   402,-32768,-32768,-32768,-32768,  5045,-32768,-32768,-32768,   477,
--32768,   487,-32768,-32768,-32768,  2467,-32768,-32768,  2467,-32768,
-   695,-32768,-32768,  3589,    38,   705,   724, 10273,-32768,-32768,
--32768,-32768,-32768,-32768,   140,-32768,-32768,-32768,-32768,  7094,
-  9048,-32768,-32768,-32768,  9048,   718,-32768,  6354,    35,  3647,
--32768,  3647,-32768,  4457,  4457,  4632,   735,-32768,   368,  4611,
--32768,   748,-32768,-32768,  4518,  2185,  2181,  4611,-32768,   368,
--32768,-32768,   368,  2185,-32768,   421,-32768,-32768,   335,-32768,
-  1265,-32768,  1329,  3108,    49,   671,   629,   803,   368,-32768,
--32768,-32768,-32768,-32768,-32768,   554,-32768,   327,   758,   761,
--32768,-32768,   671,-32768,-32768,   837,-32768,-32768,  9048,   634,
-  7003,-32768,   341,  7003,-32768,-32768,-32768,  8961,  3868,  3868,
-  3868,  3868, 10500,-32768,-32768,-32768,-32768,   766,  9836,  9836,
-  7003,   770,   493,   778,   831,   782,-32768,  8961,-32768,-32768,
-  6818,  7003,-32768,  9048,  9048,  7185,  9048,  9048,  9048,  9048,
-  9048,  9048,  9048,  9048,  9048,  9048,  9048,  9048,  9048,  9048,
-  9048,  9048,  9048,  9048,  9048,-32768,-32768,-32768,-32768,-32768,
-  9048,  9048,  9048,  8961,  4335,   299,   589,  7818,-32768,-32768,
--32768,   846,   896,   364,   464,  1402,  1049,-32768,   413,   413,
--32768,  2684,   794,   818,   880,-32768,-32768,   452,  8322,   980,
--32768,   919,   732,-32768,-32768,  9048,-32768,-32768,-32768,-32768,
-   187,-32768,-32768,-32768,-32768,   855,   878,-32768,-32768,   741,
--32768,  7549,  7640,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   143,-32768,   853,   838,   550,   889,-32768,-32768,-32768,  1578,
-   235,   887,-32768,-32768,  2192, 10328,  2192,  2831,  1388,  4882,
--32768,   895,-32768,-32768,-32768,   852,-32768,   904,-32768,-32768,
-   279,   716,   903,   831,-32768,-32768,-32768,-32768,  6540, 10500,
--32768,   708,   859, 10430,-32768,-32768,   863,-32768,-32768,   868,
-   153,  2993,   871,-32768,   127, 10122,   922,   925,   482,-32768,
--32768,-32768,  3647,  3647,-32768,  4518,   928,-32768,-32768,   890,
-    35,-32768,  2185,-32768,   939,   368,-32768,   160,   370,-32768,
-   913,-32768,   542,   951,-32768,-32768,    98,-32768,-32768,  1550,
--32768,   579,  1414,   944,-32768,  9048,  3786,-32768,  3578,   561,
-   561,   269,   506,  2044, 10167,  3976,-32768,   176,   561,   964,
-   368,    67,-32768,    35,  1863,    35,  1863,-32768,-32768,-32768,
--32768,-32768,-32768,   872,   872,   872,   923,   924,  9314,   880,
-   926,   929,   931,   938,  4171,   959,   972,   973,-32768,   950,
--32768,-32768,   953,-32768,-32768,  1001,   387,   459,    74,   346,
-  9048,  1002,-32768,  1006,   961, 10500, 10500,-32768,-32768,  1009,
- 10518,  7844,  4697, 10533,  3356,  3862,  4825,  2555,  2555,  2555,
-  1417,  1417,  1183,  1183,   681,   681,   681,-32768,-32768,   966,
-   969,   968,   974,   978,  3868,   299,-32768,  7094,  9048,-32768,
--32768,-32768,  9048,-32768,-32768,   982,  9749,   970,  1005,  1043,
--32768,  9048,-32768,  9048,  1394,-32768,  1394,-32768,    69,   983,
-   985,-32768,   989,  3868,    35,-32768,    35,  1802,-32768,  1863,
-   997,  8599,  8599,  5796,   986,  9135,   988,  2125,  2327,  1004,
-  1010,  9048,   741,  1000,   878,-32768, 10500,-32768, 10500,  1796,
-  1011,  9401,-32768,  1008,-32768,-32768,  5045,-32768,  3868,  1881,
-  1881,  1504,-32768,-32768,-32768,-32768,-32768,-32768,   747,  9048,
--32768,-32768,   501,-32768,   388,   515,  9048,  1056,-32768,   516,
-   517,   527,   831,-32768,-32768,-32768,    95,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  8417,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   925,  1057,-32768,-32768,-32768,  3868,-32768,
--32768,-32768,-32768,  1064,-32768,  8961,-32768,-32768,-32768,-32768,
-  1193,-32768,  1863, 10500,-32768,-32768,-32768,   368,   368,-32768,
--32768,-32768,-32768,-32768,  1863,  1067,   614,  9048,   421,-32768,
-  1074,-32768,-32768,-32768,   936,  1156,   215,  1049,  1648,   561,
-  1075,-32768,  1765,-32768,-32768,-32768,   368,  5308,-32768,-32768,
-  7094,-32768,  1027,-32768,  1029,    35,  1863,    35,  1863,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  1048,  1054,  1059,
-  1060,   852,-32768, 10404,  7094,  6634,  1032,-32768,  9048,-32768,
--32768,-32768,-32768,   381,  1040,-32768,-32768,  1051,    90,   720,
-   720,  1050,   720,-32768,-32768,  9749,  1157,-32768,  1062,  1065,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    35,  1069,
--32768,  1061,-32768,-32768,  2272,-32768, 10500,-32768,-32768,  1071,
--32768,-32768,   174,  1076,-32768,-32768,-32768,  2019,  2019,  2886,
-  2886,  1504,-32768,  2125,-32768,  3200,  5223,  1079,-32768,   716,
--32768,  9048,-32768,  9048,-32768,  9048,-32768,    33,  6727,-32768,
-  8691,  8691,  6259,   145,  1084,   244,-32768,  7094,  6912,-32768,
--32768,   178,  7094,  7094,-32768,  1086,  1097,  1329,-32768,-32768,
--32768,    35,  1098,  1105,  1105,    35,  1100,  9048,  9048,  5532,
-   368,  3300,   368,   368,  1046,   368,  3669,  1105,  5907,-32768,
--32768,-32768,-32768,-32768,  1101,-32768,  1104,  9048,  9048,  9048,
-  9048,  7094,-32768,  9048,  1122,-32768,-32768, 10500,  9048,-32768,
-   381,-32768,-32768,-32768,-32768,-32768,-32768,  1103,-32768,  1169,
--32768,-32768,    35,-32768,-32768,-32768,-32768,  9048,-32768,-32768,
-  2019,  2019,-32768,  3200,-32768,-32768,  1113,  1118,  1121,  1136,
-   741,-32768,-32768,  6166,  1204,-32768,-32768,  1131,   907,-32768,
--32768,-32768,-32768,  3868,-32768,-32768,-32768,  7094,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  5532,  5532,-32768,
-  1105,  1182,   660,  9048,-32768,-32768,-32768,   421,   421,  1105,
-  1105,   554,  1105,-32768,-32768,  6056,    35,    35,-32768,-32768,
-  1143,  1144,  1145,  1147,-32768, 10455,  7094,  1148,-32768,-32768,
--32768,-32768,    35,  1162,-32768,-32768,-32768,-32768,  1136,-32768,
--32768,   780,-32768,   218,  1214,   717,   739,-32768,-32768,-32768,
--32768,-32768,  9048,  1218,  1222,  1223,  8783,   398,   185,-32768,
--32768,  8874,  1277,  1226,-32768,  2432, 10228, 10373,  5632,-32768,
--32768,  1273,-32768,-32768,-32768,  7928,-32768,   329,-32768,-32768,
-    35,    35,-32768,-32768,-32768,  9048,  9048,  5532,   368,   368,
--32768,-32768,-32768,-32768,  7731,-32768,-32768,-32768,-32768,    35,
-    35,-32768,-32768,-32768,-32768,  7094,-32768,-32768,-32768,-32768,
--32768,-32768,   741,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   831,  1196,  1219,  5510,-32768,-32768,-32768,-32768,  1253,
-  9048,  1256,-32768,   831,-32768,-32768,  1225,-32768,-32768,   421,
-   787,-32768,   792,   421,  9488,   826,   232,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,  5532,  5532,-32768,  1105,  1105,
-  1217,  5690,  1228,-32768,-32768,-32768,  1243,-32768,   538,   538,
--32768,-32768,  1322,  6449,  8961,  9048,-32768,  8037,-32768,  1293,
--32768,-32768,   629,-32768,-32768,  9923,  9923,  7276,-32768,-32768,
-   831,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   361,   279,
-  4479,-32768,-32768,  8961,-32768,-32768,  8229,-32768,    33,-32768,
--32768,  1295,-32768,  1242,   149,  4611, 10478,  8037,-32768,-32768,
-  1136,    63,-32768,   133,-32768,  1247,  1249,   831,  1251,   831,
-  8133,-32768,   558,-32768,-32768,-32768,-32768,   421,-32768,-32768,
-  1136,  1351,  1305,-32768,-32768,   140,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  9048,  1314,  7367,
-   831,   368,  8037,  1285,    13,  1321,-32768,-32768,-32768,-32768,
--32768,    33,-32768,  1272,-32768,-32768,  1344,-32768,-32768,  1318,
--32768,  9048,  1351,  1348,  1351,-32768,-32768,-32768,-32768,-32768,
--32768,  1280,    71,-32768,-32768,  7458,-32768,  7094,-32768,  1403,
-  1354,  1312,-32768,-32768,   275,-32768,-32768,  1412,  1363,  8133,
--32768,-32768,-32768,-32768,  1425,  1427,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   620,-32768,-32768,
+   767, 10673,   820,  8529,-32768,   668,-32768,-32768,  9596,  9683,
+  9770,  9770,-32768,-32768,-32768,-32768,-32768,   679,   704,   708,
+   714,   719,   447,  9068,  1259,  9770,-32768,-32768,  9770,-32768,
+-32768,  9770,  6885,-32768,  9770,   270,-32768,  9770,-32768,  9155,
+-32768, 10546,-32768,  1405,  3136,  9242,-32768,   786,  1307,-32768,
+   752,  3651,  3496,-32768,   360,-32768,  1295,  2118,-32768,-32768,
+-32768,   270,-32768,   270,-32768,   270,-32768,  5263,  1999,-32768,
+-32768,  1259,   697,-32768,-32768,   693,   745, 10765,   705,   716,
+   724,  1784,   573,-32768,   508,-32768,-32768,-32768,-32768,-32768,
+-32768,   528,   419,   503,   556,   537,-32768,-32768,-32768,    45,
+    73,   784,-32768,-32768,-32768,  1000,-32768,-32768,-32768,-32768,
+-32768, 10666,-32768,-32768,-32768,   270,   270,-32768,   536,-32768,
+-32768,-32768,  4134,-32768,-32768,  4134,-32768,   732,-32768,-32768,
+  4666,    36,   741,   748, 10450,-32768,-32768,-32768,-32768,-32768,
+-32768,   124,-32768,-32768,-32768,-32768,  6977,  9068,-32768,-32768,
+-32768,  9068,   750,-32768,  6213,   103,  4770,-32768,  4770,-32768,
+  4797,  4797,  5429,   757,-32768,   414,  5263,-32768,   761,-32768,
+-32768,  5108,  1501,   975,  5263,-32768,   414,-32768,-32768,   414,
+  1501,-32768,   673,-32768,-32768,   389,-32768,  1289,-32768,  1596,
+-32768,   767,   670,   762,   414,-32768,-32768,   801,   807,   809,
+-32768,-32768,-32768,-32768,   580,-32768,   374,   772,   775,-32768,
+-32768,   767,-32768,-32768,   551,-32768,-32768,-32768,   270,  9068,
+   668,  6885,-32768,   451,  6885,-32768,-32768,-32768,  8981, 10680,
+ 10680, 10680, 10680, 10833,-32768,-32768,-32768,-32768,   782,  9857,
+  9857,  6885,   785,   531,   789,   841,   795,-32768,  8981,-32768,
+-32768,  6694,  6885,-32768,  9068,  9068,  7069,  9068,  9068,  9068,
+  9068,  9068,  9068,  9068,  9068,  9068,  9068,  9068,  9068,  9068,
+  9068,  9068,  9068,  9068,  9068,  9068,-32768,-32768,-32768,-32768,
+-32768,  9068,  9068,  9068,  8981,  4897,   439,   876,  7777,-32768,
+-32768,-32768,   859,   914,   491,   516,   525,  1537,   649,-32768,
+  1863,  1863,-32768,  2957,   813,   834,   882,-32768,-32768,   269,
+  8337,   648,-32768,   730,   609,-32768,-32768,  9068,-32768,-32768,
+-32768,-32768,   200,-32768,-32768,-32768,-32768,-32768,-32768,   872,
+   881,-32768,-32768,  1259,-32768,  7506,  7598,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,    78,-32768,   849,   835,   573,   884,
+-32768,-32768,-32768,  1058,   187,   885,-32768,-32768,  3026, 10506,
+  3026, 10131,  1604,  5167,-32768,   886,-32768,-32768,-32768,-32768,
+   848,-32768,   898,-32768,-32768,   311,   322,   903,   841,-32768,
+-32768,-32768,-32768,  6415, 10833,-32768,   745,   866, 10765,-32768,
+-32768,   867,-32768,-32768,   869,   188, 10187,   870,-32768,   245,
+ 10299,   922,   923,   526,-32768,-32768,-32768,  4770,  4770,-32768,
+  5108,   926,-32768,-32768,   883,   103,-32768,  1501,-32768,   933,
+   414,-32768,   419,   503,-32768,   906,-32768,   578,   942,-32768,
+-32768,   220,-32768,-32768,  1330,  3254,    58,    66,-32768,   103,
+  1767,  8981,  8981,  8981,   103,  1767,-32768,-32768,-32768,-32768,
+-32768,-32768,   618,   618,   618,-32768,   899,   904,  9335,   882,
+   905,   913,   917,   948,  4231,   955,   958,   961,-32768,   934,
+-32768,-32768,   941,-32768,-32768,   980,   684,   717,   286,   201,
+  9068,   990,-32768,   994,   945, 10833, 10833,-32768,-32768,   993,
+  3688,  4340,  3916,  4445,  4416,  2273,  2982,  2009,  2009,  2009,
+  1064,  1064,  1243,  1243,   664,   664,   664,-32768,-32768,   950,
+   957,   962,   966,   967, 10680,   439,-32768,  6977,  9068,-32768,
+-32768,-32768,  9068,-32768,-32768,   977,  9770,   971,  1010,  1031,
+-32768,  9068,-32768,  9068,-32768,  9068,  3128,-32768,  3128,-32768,
+   205,   995,   999,-32768,  1007, 10680,   103,-32768,   103,  3833,
+-32768,  1767,  1008,  8616,  8616,  6002,  1013,  9155,  1017,  3489,
+  2118,   773,  1018,  9068,  1259,   992,   881,-32768, 10833,-32768,
+ 10833,  1784,  1021,  9422,-32768,  1029,-32768,-32768, 10666,-32768,
+ 10680,  2070,  2070,  3775,-32768,-32768,-32768,-32768,  2528,-32768,
+-32768,    59,  9068,-32768,-32768,   528,-32768,   556,   537,  9068,
+  1069,-32768,   553,   591,   611,   841,-32768,-32768,-32768,    31,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  8433,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   923,  1076,-32768,-32768,
+-32768, 10680,-32768,-32768,-32768,-32768,  1085,-32768,  8981,-32768,
+-32768,-32768,-32768,  1404,-32768,   608,  1191,  1082,-32768,  9068,
+  5357,-32768,  3428,   291,   291,   365,   622,  1689, 10344,  5508,
+-32768,   110,   291,  1095,   414,-32768,  6977,-32768,  1049,   270,
+   270,   270,-32768,  1051,   103,  1767,   103,  1767,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  1070,  1072,  1077,  1078,
+   848,-32768, 10697,  6977,  6510,  1073,-32768,  9068,-32768,-32768,
+-32768,-32768,   388,  1071,-32768,-32768,  1083,    42,   633,   633,
+  1074,   633,-32768,-32768,  9770,  1175,-32768,  1087,  1089,  1093,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   103,  1099,
+-32768,  1092,-32768,-32768,  3635,-32768, 10833,-32768,-32768,  1096,
+-32768,-32768,   142,  1100,-32768,-32768,-32768,  2358,  2358,  2480,
+  2480,  3775,-32768,  2528,-32768,  2623, 10546,  1102,-32768,   322,
+-32768,  9068,-32768,  9068,-32768,  9068,-32768,    64,  6602,-32768,
+  8709,  8709,  6098,   305,  1106,   356,-32768,  6977,  6789,-32768,
+-32768,   151,  6977,  6977,-32768,  1108,  1109,  1596,-32768,-32768,
+-32768,-32768,  1767, 10833,-32768,-32768,-32768,   414,   414,-32768,
+-32768,-32768,-32768,-32768,  1767,   297,   727,  9068,   673,-32768,
+  1160,-32768,-32768,-32768,   181,   879,  2132,   649,   936,   291,
+  1163,-32768,  1055,-32768,-32768,-32768,   414,  5635,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  1115,-32768,  1119,  9068,
+  9068,  9068,  9068,  6977,-32768,  9068,  1168,-32768,-32768, 10833,
+  9068,-32768,   388,-32768,-32768,-32768,-32768,-32768,-32768,  1122,
+-32768,  1189,-32768,-32768,-32768,   103,-32768,-32768,-32768,-32768,
+  9068,-32768,-32768,  2358,  2358,-32768,  2623,-32768,-32768,  1129,
+  1130,  1132,  1147,  1259,-32768,-32768,  5908,  1217,-32768,-32768,
+  1144,  1610,-32768,-32768,-32768,-32768, 10680,-32768,-32768,-32768,
+  6977,-32768,-32768,-32768,   103,  1145,  1192,  1192,   103,  1146,
+  9068,  9068, 10675,   414,  3067,   414,   414,   780,   414,  4911,
+  1192,  7846,-32768,   103,   103,-32768,-32768,  1157,  1166,  1167,
+  1170,-32768, 10788,  6977,  1161,-32768,-32768,-32768,-32768,   103,
+  1171,-32768,-32768,-32768,-32768,  1147,-32768,-32768,   692,-32768,
+   158,  1207,   766,   781,-32768,-32768,-32768,-32768,-32768,  9068,
+  1226,  1234,  1235,  8802,   518,   428,-32768,-32768,  8894,  1296,
+  1245,-32768,  5246, 10405, 10551,  5754,-32768,-32768,  1288,-32768,
+-32768,-32768,  7941,-32768,   436,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768, 10675, 10675,-32768,  1192,   605,   893,  9068,
+-32768,-32768,-32768,   673,   673,  1192,  1192,   580,  1192,-32768,
+-32768,  4001,-32768,-32768,   103,   103,-32768,-32768,-32768,-32768,
+  6977,-32768,-32768,-32768,-32768,-32768,-32768,  1259,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   841,  1213,  1215, 10584,
+-32768,-32768,-32768,-32768,  1253,  9068,  1261,-32768,   841,-32768,
+-32768,  1236,-32768,-32768,   673,   707,-32768,   779,   673,  9509,
+   788,   164,-32768,-32768,-32768,-32768,-32768,-32768,   103,   103,
+-32768,-32768,-32768,  9068,  9068, 10675,   414,   414,-32768,-32768,
+-32768,-32768,  7690,-32768,-32768,-32768,-32768,-32768,  1237,-32768,
+   638,   638,-32768,-32768,  1321,  6323,  8981,  9068,-32768,  8051,
+-32768,  1281,-32768,-32768,   670,-32768,-32768,  9944,  9944,  7161,
+-32768,-32768,   841,-32768,-32768, 10675, 10675,-32768,  1192,  1192,
+  1239, 10719,  1246,  5696,-32768,-32768,  8981,-32768,-32768,  8243,
+-32768,    64,-32768,-32768,  1290,-32768,  1240,   373,  5263, 10811,
+  8051,-32768,-32768,  1147,    44,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   398,   311,  1244,  1247,   841,  1251,   841,
+  8147,-32768,   647,-32768,-32768,-32768,-32768,   673,-32768,-32768,
+  1147,  1352,  1305,-32768,   132,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  9068,  1306,  7253,   841,
+   414,  8051,  1275,   257,  1310,-32768,-32768,-32768,-32768,   124,
+-32768,-32768,    64,-32768,  1264,-32768,-32768,  1314,-32768,-32768,
+  1312,-32768,  9068,  1352,  1332,  1352,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1272,   274,-32768,-32768,  7345,-32768,  6977,
+-32768,  1380,  1333,  1285,-32768,-32768,   171,-32768,-32768,  1386,
+  1340,  8147,-32768,-32768,-32768,-32768,  1412,  1413,-32768
 };
 
 static const short yypgoto[] = {-32768,
-  1428,-32768,  -323,-32768,  1030,     2,     0,  1429,-32768,   192,
--32768,-32768,   533,  1087,-32768,   640,-32768,-32768,-32768,   587,
--32768,  1279,  -628,    80,  -620,  1281,    54,-32768,-32768,-32768,
--32768,-32768,   731,   740,-32768,-32768,-32768,-32768,-32768,   407,
-    31,-32768,-32768,-32768,  5011,    42,   -31,   121,   945,-32768,
-   311,-32768,   114,-32768, -1300,-32768, -1318,   -25,-32768,  1357,
-  -218,  -256,-32768,  -754,  4384,    60,   776,  3267,   -19,    14,
-   472,-32768,-32768,-32768,  -311,-32768,  -153,-32768,-32768, -1167,
-   -37,  -316,   667,    81,  1380,  -131,    -1,  3825,  -173,    -4,
-  -171,  -870,   219,-32768,   -71,-32768,-32768,   202,-32768,-32768,
--32768,-32768,-32768,   -69,  1935,   -28,-32768,   617,-32768,-32768,
-  -974,  -372,   821,-32768,-32768,-32768,-32768,-32768,   -46,-32768,
--32768,-32768,-32768,-32768,   626,  -347,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1244,-32768,   394,   562,-32768,-32768,-32768,
--32768,   521,  -643,   784,-32768,-32768,-32768,-32768,-32768,   772,
--32768,   391,   885,   652,   941,  2234,   173,    20,  -417,  1308,
-  1291,  -445,-32768,     3,-32768,  4844,   -95,   490,   -66,  3712,
-  1206,-32768,  4393,  1591,  1430,   -10,  -108,-32768,  1395,-32768,
-  3627,  2426,  -287,-32768,  1739,-32768,-32768,   294,  -855,  -540,
--32768,-32768,   392,   120,  -379,-32768,-32768,-32768,-32768, -1249,
--32768, -1126, -1299,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   154,-32768,
--32768,-32768,-32768,-32768,   148, -1176,-32768,-32768,-32768,   -35,
--32768,-32768,-32768,-32768, -1298,   103,-32768,    91,-32768,  -646,
-  -502,   656,-32768,-32768,-32768,-32768,  -366,-32768,  -335,  -148,
--32768,   967,   405,-32768,    93,-32768,  -310
+  1415,-32768,  -329,-32768,  1001,     9,    10,  1414,-32768,    69,
+-32768,-32768,   226,  1056,-32768,   393,-32768,-32768,-32768,   565,
+-32768,  1260,  -657,    -8,  -649,  1262,   136,-32768,-32768,-32768,
+-32768,-32768,   489,   496,-32768,-32768,-32768,-32768,-32768,   394,
+   219,-32768,-32768,-32768,  5249,    77,   146,   -30,   907,-32768,
+  1490,-32768,    61,-32768, -1303,-32768, -1330,   -83,-32768,  1186,
+  -230,  -249,-32768,  -767,  3615,    83,  1019,  3530,-32768,   -97,
+   -79,    15,   -49,   288,-32768,-32768,-32768,  -313,-32768,  -157,
+-32768,-32768, -1173,   -51,  -330,  1866,   119,   808,  -163,    22,
+    80,  -188,    -4,   -96,  -917,   186,-32768,   -70,-32768,-32768,
+  -176,-32768,-32768,-32768,-32768,-32768,   845,   540,    11,-32768,
+   590,-32768,-32768, -1107,  -415,   794,-32768,-32768,-32768,-32768,
+-32768,   -47,-32768,-32768,-32768,-32768,-32768,-32768,   598,  -374,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1223,-32768,   381,
+   542,-32768,-32768,-32768,-32768,   344,  -904,   534,-32768,-32768,
+-32768,-32768,-32768,   530,-32768,   273,   856,   629,   910,  2154,
+    34,     3,  -421,  1291,  1443,  -461,-32768,    17,-32768,  2697,
+  -128,   328,   -55,  4100,  1148,-32768,  4430,  1823,  2703,    -5,
+  -110,-32768,  1357,-32768,  4154,  2763,  -422,-32768,  4073,-32768,
+-32768,   227,  -868, -1069,-32768,-32768,   318,     8,  -348,-32768,
+-32768,-32768,-32768, -1246,-32768, -1199, -1315,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,    41,-32768,-32768,-32768,-32768,-32768,    67, -1205,
+-32768,-32768,-32768,   -66,-32768,-32768,-32768,-32768, -1307,     1,
+-32768,     6,-32768,  -682,  -371,   597,-32768,-32768,-32768,-32768,
+  -386,-32768,  -382,  -158,-32768,   978,   330,-32768,   176,-32768,
+  -220
 };
 
 
-#define        YYLAST          10617
-
-
-static const short yytable[] = {    55,
-   228,   395,    53,    36,   873,    35,   570,   688,   202,   621,
-   862,   364,   116,   177,   670,    97,   437,   579,   582,  1048,
-   134,   482,   485,   133,   604,   637,   442,   445,   619,   205,
-    55,   986,  1282,    53,    36,    55,    35,   641,    53,    36,
-   622,    35,   464,    95,   274,  1382,   149,   550,   190,   387,
-   390,   456,   109,   915,   513,   330,   370,    44,   436,   811,
-  1404,   374,   944,   225,  1305,  1141,   811,   444,   953,   171,
-   955,   453,   550,  1399,  1453,   272,   550,  1402,   131,   881,
-   323,   236,   323,   334,    51,   710,   133,   202,    44,    82,
-    84,   214,   409,    44,   377,   659,   323,   323,   473,  1164,
-  1165,  1425,   339,   909,   379,   132,   189,   372,   373,   410,
-    85,  1393,  1320,  1185,    -1,    51,   417,   231,    -2,  1323,
-    51,  1454,   440,  1457,  1412,   743,   402,   882,   190,  1448,
-   883,   323,  1470,  1415,   910,  -123,   558,   887,   411,    83,
-   634,   332,  1142,   202,    88,   813,   628,   136,   362,   473,
-  1422,   202,   202,  1049,    55,   196,   197,    53,   711,   388,
-   391,    13,   418,   881,   205,   884,   730,  1472,   333,   171,
-   101,  1413,   205,  1010,   384,   950,  1380,   744,   202,  1471,
-  1425,  1449,   729,  -302,    20,   888,   871,   403,   889,   149,
-  -302,  -255,   643,    23,   403,   558,  1255,   635,  1113,   650,
-   171,   840,   138,   142,  1050,  1261,  1262,   331,  1263,   157,
-    86,   882,    44,   352,   883,   102,  -763,     7,     8,   229,
-   404,  1389,   103,   890,   282,   202,   154,   404,   236,  1110,
-    87,   161,  1128,    85,  1282,   945,  1154,  -255,  -255,    51,
-    26,   729,   462,   357,   358,   359,  1303,   448,   450,   884,
-   158,   841,   273,  -250,   874,    21,   380,   324,   136,   324,
-   727,  1410,     8,   466,   442,   445,  1073,   575,   225,   579,
-    27,    28,   442,   324,   324,   509,   202,  1285,  1077,   468,
-   547,   844,  1129,   370,   445,   946,  1155,   202,   463,   621,
-  -566,  1285,   920,   847,   230,   584,   360,   361,   323,   583,
-   554,   445,    32,   712,   609,   673,  1451,   136,   324,   848,
-  1095,   272,  1097,   576,   124,   125,   504,   386,   389,   225,
-   894,   811,   780,   494,   782,   783,   921,  1286,   387,   390,
-   922,   236,  -526,  1478,  -526,   570,  -566,  -566,   467,   486,
-   487,  1360,   121,   122,   349,   787,   420,   422,   623,   811,
-   350,   608,  -566,   495,  1364,  1365,  1199,   831,   496,   667,
-   137,   497,   788,   923,   507,  1311,  1294,  1316,   510,   155,
-   675,   618,   156,   720,   676,  -256,   549,   600,  -526,   170,
-  -526,   432,   811,  1479,   164,   558,   162,   558,   169,   202,
-   202,   789,    26,   134,   124,   125,   133,   202,    18,   137,
-    89,   104,   105,  1012,     7,   365,   366,  -124,   559,   202,
-   801,   341,   345,   652,   205,   987,   121,   122,   560,   721,
-    12,  -256,  -256,   353,   168,  1337,   202,   787,   561,   222,
-   205,   562,   563,   729,  1339,  1340,   220,  -253,   388,   391,
-    84,   354,    21,    87,   788,   944,    14,    15,  -121,    55,
-   338,   131,   705,   106,   107,   697,   802,    27,    28,   558,
-    85,   136,   110,   111,   112,   688,    26,   336,   124,   125,
-     7,     8,     9,   789,  1109,   324,   323,  1301,   132,   323,
-   621,   677,   559,   323,   735,   735,   735,   735,   273,    32,
-   121,   122,   560,  1047,   504,   703,   323,   504,   819,   619,
-   347,   442,   561,   323,   150,   562,   563,   323,    21,   547,
-   803,   622,    86,   388,   740,   113,   114,   579,   582,   460,
-  -122,    26,   152,    27,    28,   504,    86,   173,   898,   811,
-   375,   905,    87,   907,   704,   508,    38,   174,   911,   323,
-   272,   752,   124,   125,   820,   821,    87,   175,   620,  1430,
-   811,   295,   924,   296,   351,    32,   804,   618,   495,   496,
-   176,   473,  1041,  1043,   652,   461,   467,    38,   355,   513,
-   988,   202,    38,  1045,   899,   236,  1118,   853,  1091,   857,
-   858,   364,   827,   999,  1373,  1000,    14,    15,   203,   204,
-   620,  -361,   121,   122,   871,   356,   663,   664,   925,   116,
-   718,  -250,  1103,  1106,  1427,   202,   904,    86,  1042,  1044,
-   392,   190,   170,   502,   858,   225,   150,   150,   150,  1046,
-  -361,   872,   688,  1024,  -361,   912,   202,    87,   918,   919,
-  1374,   668,    86,   393,   152,   152,   152,   947,   277,   674,
-   846,   949,    26,    40,   124,   125,   719,   150,  1038,   859,
-  1428,   618,    87,   324,   430,   431,   324,  -561,   791,    -7,
-   324,   324,   324,   324,   324,   152,   930,    84,   792,   752,
-  -361,   913,   730,   324,    40,  1079,  1106,   196,   197,    40,
-   324,   401,   793,    13,   324,  1150,  1152,    85,   202,   413,
-  1156,  1157,    55,   414,    55,   705,   457,   705,   697,   469,
-   190,    55,  1114,  1115,   705,  1117,    20,   697,   438,   439,
-   618,   470,   618,    84,   471,    23,   324,   273,   863,   678,
-   679,  1257,   472,   121,   122,   645,   479,   464,   488,  1195,
-   489,   805,   807,    85,   620,     8,     9,   490,   703,   491,
-   703,   620,   827,    89,   104,   105,   703,   703,   492,  1395,
-   589,   321,   550,   321,   121,   122,   591,   929,   939,  1068,
-  1069,  1070,   864,   534,   535,  1416,   592,   344,   346,    26,
-    84,   865,   866,    26,   607,   124,   125,   704,  1288,   704,
-   735,   110,   111,   112,   989,  1250,   704,   124,   125,   791,
-    85,   502,    86,   594,   502,   595,   106,   107,   732,   792,
-  1289,   596,   321,   626,    26,   -45,   124,   125,   867,   735,
-   -45,   502,    87,   793,    -6,   618,   960,   961,   962,   652,
-   474,   -45,   502,  1137,  1277,  1138,   759,  1139,   620,   646,
-   475,   236,    26,   629,   113,   114,   388,   740,  1283,  1284,
-   121,   122,   618,   665,   735,   430,  1354,   618,  1074,  1075,
-   438,  1355,   781,     7,   365,   366,   995,  1081,   798,   669,
-   313,  1426,   313,  1083,  1084,   149,   713,  1081,  1086,   722,
-   600,  1084,   723,  1439,   739,   121,   122,  1088,   741,   464,
-   652,   495,   496,  1443,   430,  1359,   742,   620,   635,   620,
-   744,    21,   124,   125,   735,   150,   150,   150,  1055,   799,
-  1456,   323,   800,  1336,    26,   812,    27,    28,   618,  1204,
-   814,   313,  1342,   152,   152,   152,   230,  -256,   832,  1467,
-   618,   730,     8,     9,  1352,    26,   816,   124,   125,    89,
-    90,    91,  -256,  -256,   387,   390,   833,  -256,    32,    14,
-    15,   474,  1484,    55,  -361,   842,   705,   843,   845,   697,
-   849,   475,   618,  -256,   618,   387,   390,   324,   860,  -311,
-  -253,    14,    15,   861,   403,  -256,  -256,   878,  -256,   506,
-  -256,   879,  -361,  -361,   124,   125,   880,  -361,   231,   886,
-    26,  1342,    92,    93,    94,  -762,   324,  -522,   896,   703,
-  -522,   900,   620,  -311,   805,   807,   620,  -311,   230,  -256,
-  -256,   901,   903,  -256,   621,   906,  1105,     8,     9,   908,
-  1170,  1171,   968,  1180,  1181,  -256,  1183,   130,  1420,   620,
-  1342,   324,  1028,  1029,   620,   948,   816,   618,   704,   872,
-  -311,   963,   964,   969,   965,  1397,   637,   966,  -522,   967,
-  -522,  -522,   614,  -522,   388,   391,   970,   971,   652,   121,
-  1182,  1342,   121,   122,  -522,  1119,  -522,   620,   972,   124,
-   125,   973,  -120,   975,   976,   388,  1148,   493,   730,   978,
-   979,   324,  -522,  -522,   980,   994,  -522,   982,   324,  1105,
-   981,   996,   983,   467,    55,   620,   984,   705,  -522,   998,
-   697,  1003,   997,  1004,  1013,  1473,  1014,   620,  1253,  1254,
-  1005,   124,   125,   992,   124,   125,  1259,  1260,  1011,  1019,
-   495,   496,     8,     9,  1040,    11,    12,  1025,  1016,  1022,
-  1058,    13,     7,     8,     9,   467,   468,  1065,  1078,   620,
-   703,   620,  1082,  1087,   502,  1092,    16,  1093,    17,  1238,
-  1098,  1107,  1237,  1233,    20,  1232,  1099,   728,  1111,   735,
-   731,  1100,  1101,    23,   733,   734,   736,   737,   738,  1112,
-    21,  1116,    26,  1120,   124,   125,   543,   506,   410,   704,
-  1121,  1211,  1126,  1122,   321,    27,    28,  1125,   755,  -312,
-  1127,    14,    15,  1197,  1130,   640,   644,  1135,  1328,  1329,
-  1330,   202,  1149,   644,  1159,   110,   678,   679,  1310,  1392,
-  1310,   544,  1131,  1132,   620,  1160,  1163,    32,  1167,  1189,
-   784,   473,  1190,  -312,  1200,  1201,  1066,  -312,    89,   104,
-   105,  1205,   681,  1131,  1132,   620,  1206,  1238,   809,  1207,
-  1237,  1208,   190,  1232,  1238,   809,  1141,  1237,  1233,  1248,
-  1232,  1238,   440,  1256,  1237,  1233,    26,  1232,   113,   114,
-  -312,  1272,  1273,  1274,   644,  1275,  1362,  1363,  1302,  1278,
-   387,   390,   531,   532,   533,   534,   535,    89,    90,    91,
-  1280,   106,   107,   108,   551,  1287,     7,   365,   366,  1296,
-   552,  1297,  1298,   313,  1306,  1308,   640,  1321,  1344,   756,
-   757,   507,   761,   762,   763,   764,   765,   766,   767,   768,
-   769,   770,   771,   772,   773,   774,   775,   776,   777,   778,
-   779,  1345,  1349,  1338,    21,  1351,   644,  1353,   644,   644,
-    92,    93,   614,   150,  1366,  1368,   324,    26,  1055,    27,
-    28,   110,   678,   679,   680,  1371,  1432,  1378,   202,  1238,
-  1385,   152,  1237,  1238,   644,  1232,  1237,  1233,  1408,  1232,
-  1407,   644,  1390,   323,  1406,  1418,   150,  1419,   681,  1421,
-  1434,   553,  1450,   502,  1438,   682,   618,   837,   839,  1385,
-   388,  1148,  1238,  1445,   152,  1237,  1233,  1452,  1232,  1455,
-  1458,  1461,    26,  1238,   113,   114,  1237,  1233,  1469,  1232,
-    89,    90,    91,   206,   207,   208,  1238,   121,   122,  1237,
-  1233,   224,  1232,  1459,     7,   121,   122,  1464,  1191,  1192,
-  1193,  1194,  1474,  1476,   640,   495,   496,   121,   122,  1198,
-  1477,  1481,  1482,   209,  1486,  1385,  1487,     1,  1238,   631,
-     5,  1237,  1233,  1026,  1232,   940,   606,   399,   916,   400,
-   558,    26,    21,    92,    93,   210,  1136,    26,  1394,   124,
-   125,   985,   745,  1376,  1483,  1313,  1021,    27,    28,   877,
-  1020,  1161,   452,   559,   421,   423,   427,    26,  1089,   124,
-   125,   914,  1071,   560,   835,  1238,   942,  1184,  1237,  1233,
-   755,  1232,   917,   561,  1018,   786,   562,   563,   433,    32,
-   809,   211,   212,   213,   529,   530,   531,   532,   533,   534,
-   535,   150,   150,   150,   644,   234,     7,     8,     9,   129,
-    11,    12,   363,   614,   648,  1027,    13,   273,   809,   152,
-   152,   152,   150,   150,   150,   555,   974,   234,   663,   664,
-   324,    16,  1319,    17,    18,  1440,  1247,  1300,  1411,    20,
-   152,   152,   152,   620,    21,  1465,   273,  1417,    23,  1057,
-   558,   809,   110,   678,   679,  1463,   234,    26,  1249,    27,
-    28,     0,     0,   640,   644,  1060,     0,     0,     0,   234,
-     0,     0,  1067,  1030,     0,     0,     0,   644,     0,   644,
-   357,   358,   359,  1031,     0,     0,     8,     9,     0,    11,
-   224,    32,     0,   561,    76,    13,  1032,   563,     0,     0,
-   649,     0,   273,    98,     0,   113,   114,  1017,     0,     0,
-    16,  1350,    17,   234,   127,    76,     0,   644,    20,     0,
-   140,   140,     0,   140,     0,    76,     0,    23,     0,   558,
-    76,    26,     0,   360,   361,  1037,    26,   902,   124,   125,
-     0,   184,   644,    76,     0,     0,   234,     0,     0,   121,
-   122,   217,   559,     0,   759,  1383,     0,     0,    98,     0,
-   644,     0,   560,     0,     0,     0,     0,   234,   502,   238,
-    98,   -99,   561,    14,    15,   562,   563,     0,    76,     0,
-   952,     0,   954,     0,  1383,     0,     0,     0,     0,   123,
-    98,     0,     7,   121,   122,     0,     0,    12,   809,    26,
-     0,   124,   125,  1080,     0,   -99,     0,     0,     0,   -99,
-   661,     0,   662,   127,   421,   423,   427,     0,   127,   809,
-     0,     0,   184,    98,     0,   672,   640,     0,   140,     0,
-    21,   382,   140,     0,     0,   140,   140,   140,  1444,     0,
-  1383,     0,   -99,    26,     0,    27,    28,     0,     0,    76,
-   640,   640,     0,     0,  1108,   615,     0,   234,     0,    30,
-     0,     0,  1462,     0,   184,   184,   184,   642,     0,    31,
-     0,     0,     0,     0,   642,     0,   759,    32,     0,     0,
-     0,  1006,    33,  1007,     0,     0,   150,     0,   -97,     0,
-    14,    15,     0,   184,     0,     0,     0,   615,    89,   104,
-   105,   597,   598,   599,   152,   121,   122,     0,   451,   464,
-     0,   234,     0,     0,     0,     0,    98,   644,     0,   644,
-  1060,   644,   -97,     0,   640,   140,   -97,   150,   150,   150,
-     0,     0,     0,   640,   640,   642,     0,     0,   640,   640,
-     0,     0,     0,     0,     0,   152,   152,   152,   558,     0,
-     0,   106,   107,  1168,  1169,    26,     0,   124,   125,   -97,
-     0,     0,     0,    98,   476,     0,     8,     9,   129,    11,
-    12,   559,     0,   648,     0,    13,     0,   640,     0,  1196,
-   234,   560,     0,     7,     8,     9,     0,     0,    12,     0,
-    16,   561,    17,    18,   562,   563,     0,   642,    20,   642,
-   642,     0,     0,   644,     0,   234,    98,    23,     0,     0,
-   556,     0,   476,   476,   572,     0,    26,     0,   124,   125,
-     0,    21,  1094,   184,  1096,   642,     0,   558,     0,     0,
-     0,     0,   642,   640,    26,     0,    27,    28,     0,     0,
-   127,   615,     7,   121,   122,     0,     0,     0,   615,  1258,
-   850,     0,     0,   661,   662,     0,   672,     0,     0,   649,
-   851,   127,     0,     0,     0,     0,    98,     0,    32,     0,
-   561,     0,   640,   852,   563,  1124,   140,     0,     0,   140,
-    21,     0,     0,     0,   140,   234,     0,   193,    76,   201,
-     0,     0,     0,     0,   935,    27,    28,     0,  1295,     0,
-     0,   234,     0,     0,   195,   196,   197,     0,     0,     0,
-   184,    13,   184,     0,   184,   184,   184,     0,     0,   230,
-   184,     7,     8,     9,   506,   184,   224,    32,   184,    18,
-     0,  1326,  1327,     0,    20,   615,     0,   614,  1162,     0,
-  1332,     0,  1166,    23,    76,     0,   926,   927,     9,     0,
-     0,   640,     0,     0,     0,     0,     0,     0,   378,    21,
-   567,   571,   574,     0,     0,   558,     0,   193,   201,     0,
-   536,     0,    26,     0,    27,    28,     0,     0,     0,    98,
-    98,    98,    98,     0,    21,   642,     0,     0,   850,  1202,
-   644,     0,     0,     0,   615,     0,   615,    26,   851,    27,
-    28,     0,     0,     0,     0,   928,    32,     0,   561,   537,
-   538,   852,   563,   174,   539,   540,   541,   542,   195,   196,
-   197,  1387,     0,   175,   201,    13,     0,     7,     8,     9,
-     0,    32,   443,   201,     0,    98,   176,   476,     0,     0,
-   421,   423,   427,    18,     0,   642,     0,   556,    20,   476,
-   476,     0,   572,  1268,  1269,     0,     0,    23,   642,   828,
-   642,     0,   459,   830,     0,    21,     0,     0,     0,  1279,
-     0,     0,   585,     0,     0,   427,     0,     0,     0,     0,
-    27,    28,     0,     0,     0,     0,   195,   196,   197,     0,
-   441,   196,   197,    13,     7,     8,     9,    13,   642,   615,
-     0,     0,     0,   615,   230,   184,   828,   184,   184,   217,
-   572,    18,    32,     0,     0,    18,    20,  1324,  1325,     0,
-    20,     0,     0,   642,     0,    23,   615,     0,     0,    23,
-     0,   615,    21,     0,     0,     0,  1334,  1335,   558,     0,
-     0,   642,   184,   640,     0,    26,   828,    27,    28,     0,
-     0,     0,     0,   184,   184,     0,   184,   234,     0,   234,
-     0,   850,     0,     0,   615,     0,     0,     0,   201,     0,
-     0,   851,     0,     0,     7,     8,     9,     0,     0,    32,
-     0,   561,     0,   127,   852,   563,     0,    76,     0,    76,
-     0,     0,   615,     0,   937,    76,    76,   806,   808,     0,
-     0,     0,     0,     0,   615,    98,     0,    98,     0,     0,
-     0,   235,    21,     0,   476,   476,   476,     0,   661,   662,
-   421,   423,   427,     0,     0,   476,   672,    27,    28,   577,
-     8,     9,     0,     0,     0,     0,   615,     0,   615,     0,
-     0,   421,   423,   427,     0,     0,     0,     0,     0,     0,
-     0,   467,     0,   855,     0,   567,   571,     0,   574,    32,
-     0,     0,     0,   459,   282,   578,   234,    21,     0,     0,
-   443,   201,  1178,     0,   459,    98,     0,     0,   443,     0,
-    26,     0,   124,   125,     0,     0,   394,     0,     0,     0,
-   571,     0,     0,     0,     0,   476,     0,   476,   642,     0,
-   642,     0,   642,     0,    98,   419,     0,     0,   476,     0,
-    98,   615,   828,   828,   828,     0,     0,     0,   435,  1015,
-     0,   661,   662,     0,   672,     0,     0,     0,     0,    79,
-     0,     0,   615,     0,     7,     8,     9,    98,   100,    98,
-   184,   184,  1034,     0,   234,     0,     0,     0,   120,   128,
-    79,     0,     0,     0,     0,   141,   141,     0,   141,     0,
-    79,     0,     0,   234,     0,    79,     0,     0,     0,     7,
-   121,   122,    21,   571,   224,  1034,   141,     0,    79,     0,
-     0,     0,     0,     0,   642,    26,   218,    27,    28,    98,
-     0,  1309,     0,   226,     0,     0,     0,     0,     0,     0,
-     0,   174,     0,    98,     0,   226,     0,    21,     0,     0,
-     0,   175,     0,    79,   234,    98,     0,     0,     0,    32,
-    26,     0,    27,    28,   176,     0,     0,     0,  1085,     0,
-     0,     0,     0,     0,     0,     0,    30,     0,    76,     7,
-   121,   122,     0,  1001,    12,  1002,    31,    98,   371,    98,
-   193,     0,   201,     0,    32,     0,  1008,   141,   226,    33,
-   806,   808,     0,   141,     0,     0,     0,   141,     0,     0,
-   141,   141,   141,     0,     0,     0,     0,    21,     0,     0,
-   476,   476,     0,   476,    79,     0,   201,     0,   806,   808,
-    26,     0,    27,    28,     0,     0,     0,     0,     0,   141,
-   141,   141,     0,     0,     0,   427,   145,   443,     0,     0,
-   459,     0,     0,     0,     0,     0,   146,     0,   184,   184,
-   184,   184,  1034,     0,    32,     0,   184,     0,   141,   147,
-   527,   528,   529,   530,   531,   532,   533,   534,   535,   193,
-     0,  1034,  1034,  1034,     0,   459,   421,   423,   427,     0,
+#define        YYLAST          10918
+
+
+static const short yytable[] = {    58,
+   886,   592,   183,   412,   234,   645,   875,   454,   713,   646,
+   208,   666,    36,    37,   379,   480,   283,   643,   121,  1048,
+  1307,   139,   404,   407,   601,    56,  1075,   695,   985,   241,
+   102,    58,   453,   628,   387,  1104,    58,    71,   949,   503,
+   506,   461,   472,   954,    36,    37,   571,   138,   155,    36,
+    37,   196,   388,   389,   571,   177,  1345,    56,   342,    71,
+   344,   346,    56,  1348,   144,   148,   231,   470,  1415,    71,
+   534,   211,   385,   662,    71,  1330,   571,   390,   281,  1270,
+  1271,  1444,   332,    57,   332,   393,   332,   332,   349,   580,
+  1049,   208,   492,  1291,  1442,   944,   241,  1164,   245,    88,
+    85,   332,   332,  1439,   160,    57,  1452,   459,   462,   167,
+   396,   483,   397,    -1,   138,    57,   282,   604,   -45,    89,
+    57,   354,    54,   -45,   659,  1464,    71,    90,    -2,   457,
+   419,    87,  1479,   196,   -45,   739,   332,   852,   332,    45,
+   241,  1050,    92,   492,   137,   653,  1426,    91,   208,  1010,
+    86,  1135,  1499,  1453,    54,   238,   208,   208,   177,    54,
+    58,   136,   280,   825,   684,  1489,   405,   408,   945,  1353,
+  1105,    45,    57,   740,  1165,   946,    45,   753,  1359,  1360,
+  1422,  1361,   660,   208,   403,   406,    56,   853,  -316,   177,
+  -316,   195,   420,  1461,   420,   884,   155,   668,    71,   894,
+  1514,  1151,  1413,    93,   675,  -325,  1464,    15,    16,   211,
+  1177,   348,   823,   437,   439,  1132,   894,   211,  1310,   823,
+  1106,  1450,   142,  1490,  1310,   421,   922,   421,   347,    39,
+  1520,   575,   100,   208,     8,   485,   343,   345,   293,  -325,
+   163,   114,   143,  -325,    57,  1307,   859,   895,   245,   576,
+   896,  1152,  -781,   499,    27,   142,   900,   923,   568,   434,
+  1178,    39,   860,  -124,   895,   364,    39,   896,  1311,   737,
+   693,   365,  1492,  1117,  1392,  1119,  -325,   231,   699,   332,
+  1521,   164,   220,    54,   208,   897,   395,   129,   130,   601,
+   698,  1429,  1430,  -541,   645,   106,   608,  1104,   907,   856,
+    45,   208,   897,  -541,   901,   435,   632,   902,   332,   385,
+   887,   486,   404,   407,   754,   718,   831,    15,    16,  1494,
+   281,   156,  -375,   487,   876,   703,   704,   525,   231,   529,
+   633,   790,   107,   792,   793,  1336,  1512,  1341,   141,  -541,
+   176,   377,   903,   209,   210,   339,   592,   340,  -123,  -541,
+   449,  -375,  -265,   108,   245,  -375,   459,   462,   282,  1191,
+   141,   158,   832,   833,   459,  1216,  1495,   843,   401,   877,
+  1319,    87,  1465,   507,   508,   462,    27,   162,   878,   879,
+   202,   203,   986,  1513,  1478,   481,    14,   642,   516,  1080,
+  1186,   517,   701,  1484,   518,   462,    41,   528,  -265,  -265,
+   531,  -375,  1190,  -581,   280,   208,   208,   597,   570,    21,
+   139,  1012,  1498,   208,  -258,   880,   161,   426,    24,   168,
+   580,   729,   170,  1081,   208,   644,   174,  1082,    41,   498,
+   677,   482,  1509,    41,   427,   797,   138,  1369,   156,   156,
+   156,   465,   467,   175,   208,    19,  1371,  1372,    71,  -581,
+  -581,   284,   798,   598,   479,  1526,   405,   408,   447,   448,
+  1083,   530,   713,   428,   823,  -581,   739,   730,   644,   156,
+   211,   641,   645,   367,   688,   689,   646,   226,   158,   158,
+   158,   799,  1131,  -267,   643,   211,   797,   605,   476,   606,
+  1328,   607,   823,    89,    57,    90,   228,   332,   580,   568,
+   332,   142,   141,   798,   332,   745,   745,   745,   745,   158,
+   285,   380,   381,    10,   641,    91,   525,   332,   351,   525,
+    94,   109,   110,   515,   332,   353,   823,   601,   332,  -267,
+  -267,  1110,   799,   137,   477,   405,   750,  1047,   811,   126,
+   127,   647,   648,   362,   739,  -261,   918,   525,   920,    22,
+   136,   455,   456,   924,   126,   127,   492,   368,  1125,  1128,
+   332,   281,    27,   813,    28,   303,  1136,  1137,   987,  1139,
+   391,  1140,   815,   911,   111,   112,  1469,    91,   884,   642,
+   624,   998,   366,   999,   812,  1000,   677,   865,   534,   870,
+   871,   370,   129,   130,   208,   199,    33,   207,  1326,   282,
+  1041,   459,   516,   517,   379,   839,   713,   129,   130,   814,
+   369,   245,     8,     9,   817,   819,   486,   644,   816,   912,
+   604,   126,   127,  1024,   644,   871,   483,   727,   121,   208,
+   141,   237,   371,  1128,    90,   196,   126,   127,  1043,   231,
+  -258,   483,  1173,  1175,   736,   280,  1042,  1179,  1180,  1038,
+   208,   885,   126,   127,    91,  1072,  -537,   740,  1045,  -537,
+   823,   409,    90,   641,   176,   129,   130,  1354,   410,  1084,
+   641,  -576,    27,   728,   129,   130,   642,   199,   207,    87,
+   288,   823,    91,    -7,  1044,  1406,   702,    27,   493,   129,
+   130,   950,   951,   952,  1466,   828,   418,   208,   494,    15,
+    16,  1073,   430,   801,  1046,   129,   130,  -537,  1212,  -537,
+  -537,    58,  -537,   802,   644,  1085,   642,   332,   332,   332,
+   473,   642,   431,  -537,   931,  -537,   488,   803,   156,   156,
+   156,  1407,   491,     8,     9,   207,   490,   939,    88,   489,
+  1467,  -537,  -537,   460,   207,  -537,  -121,   555,   556,    71,
+   762,  1308,  1309,   839,   644,   126,   127,  -537,    89,   644,
+   641,   500,  1068,  1069,  1070,  1267,   447,  1386,   158,   158,
+   158,    90,   509,   475,   202,   203,     8,     9,   510,  -122,
+    14,    88,   511,   126,  1288,  1456,   129,   130,   512,  1192,
+   745,    91,   937,   513,   988,    57,   571,  1480,  1302,   580,
+   641,    89,   615,    21,   616,   641,    27,   613,   129,   130,
+   237,  1160,    24,  1161,   618,  1162,   372,   373,   374,   241,
+    88,   745,   581,   126,   127,   619,   719,   642,  1313,   129,
+   130,   677,   582,   620,   938,    90,   129,   130,   455,  1387,
+    89,   651,   583,  1314,   631,   584,   585,   447,  1391,   405,
+   750,    -6,   858,   486,   642,    91,   745,   245,   654,   642,
+   486,   872,   671,  1078,  1079,   644,   690,   817,   819,   644,
+   375,   376,  1107,   694,    27,   722,   129,   130,   155,   126,
+   127,   723,   762,   724,   731,  1368,  1090,   732,   207,   994,
+   493,   749,   644,   677,   751,  1028,  1029,   644,   752,   660,
+   494,   404,   407,  -326,   754,    15,    16,   745,   959,   960,
+   961,   641,  1055,   809,   332,   641,   516,   517,   126,   127,
+  1221,   810,   404,   407,   740,   824,    58,   826,    58,   828,
+    27,   644,   129,   130,   196,    58,   844,  -326,   641,   931,
+   845,  -326,   854,   641,   857,   855,   801,    88,   931,   861,
+   873,   642,   939,   642,   939,  1355,   802,  -261,   874,   128,
+   -99,   939,    15,    16,    71,   420,    71,    89,  1374,    27,
+   803,   129,   130,    71,  -326,   891,   892,   641,   893,   899,
+  1384,   201,   202,   203,   241,   475,  -780,   909,    14,   644,
+   913,   644,   460,   207,   -99,   914,   475,   916,   -99,   919,
+   460,   921,   285,   380,   381,    10,    19,   937,   962,   937,
+    57,    21,    57,   963,   964,   937,   937,   645,  1194,    57,
+    24,  1437,   965,   967,  1196,  1197,   966,   642,  1194,  1199,
+   968,   -99,  1197,   969,   885,   641,   970,   641,   115,   116,
+   117,    22,  -120,   971,  1374,   405,   408,   241,   677,   938,
+   972,   938,   974,   975,   977,   978,    28,   303,   938,   979,
+   372,   373,   374,  1154,  1155,   644,   405,  1171,   642,   980,
+   624,   993,   981,  1089,  1099,   982,   983,  1141,   997,   -97,
+   642,    15,    16,   995,  1154,  1155,   644,   740,    33,  1459,
+    27,  1374,   118,   119,  1515,  1112,  1113,  1114,   996,    94,
+   109,   110,  1019,    58,  1003,   322,   644,   322,  1004,   322,
+   322,   641,    27,   -97,   375,   376,   931,   -97,   644,  1005,
+  1011,  1374,  1013,   115,   116,   117,  1014,  1016,  1040,   939,
+  1022,   662,   641,   516,   517,    94,   109,   110,   478,  1025,
+  1058,    71,   550,   551,   552,   553,   554,   555,   556,  1065,
+   -97,   156,   641,   111,   112,   113,   135,  1108,  1111,   322,
+  1115,   322,  1255,  1120,   641,  1121,   285,   380,   381,    10,
+  1122,  1123,   745,   238,    22,  1249,  1250,   118,   119,   199,
+  1133,   207,  1142,  1129,   937,   156,  1138,    57,  1254,   111,
+   112,   158,  1134,  1127,   126,   127,  1143,    58,  1144,   639,
+    71,  1335,  1145,  1335,  1149,    22,  1150,   208,  1148,  1153,
+   931,  1158,   236,  1357,  1358,  1172,   207,  1182,  1183,  1195,
+    28,   303,  1200,   939,  1206,   158,   938,  1425,  1207,   492,
+  1214,    94,    95,    96,  1217,    71,  1218,   460,  1222,  1223,
+   475,  1224,   639,  1225,  1255,    27,    57,   129,   130,   196,
+  1164,  1255,    33,  1265,  1269,  1273,   427,  1249,  1255,   404,
+   407,    94,   109,   110,  1249,  1250,  1297,  1127,   457,  1312,
+  1254,  1249,  1250,  1303,   487,  1298,  1299,  1254,   937,  1300,
+  1305,    57,    71,    27,  1254,    97,    98,    99,  1321,    71,
+   692,    94,    95,    96,  1322,  1323,    71,   285,     8,     9,
+    10,   700,   322,  1346,  1331,  1333,  1376,   572,  1377,   285,
+   380,   381,    10,  1381,   573,   111,   112,   156,   156,   156,
+   938,  1383,   514,   552,   553,   554,   555,   556,    57,  1385,
+  1404,   528,   115,   703,   704,    57,    22,  1411,   156,   156,
+   156,  1423,    57,   236,  1433,    97,    98,  1431,    22,  1447,
+  1446,    28,   303,  1457,  1055,   236,  1458,   158,   158,   158,
+  1460,    27,  1473,    28,   303,  1477,  1486,  1448,  1493,  1496,
+   208,  1255,  1418,  1500,  1501,  1255,  1503,  1471,   158,   158,
+   158,  1511,  1228,    33,  1249,   332,   118,   119,  1249,  1250,
+  1516,   639,  1506,  1518,  1519,   574,  1523,  1254,   639,   642,
+  1524,  1254,  1418,   405,  1171,  1255,   115,   703,   704,    71,
+   282,  1528,  1529,    71,     1,     5,  1255,   656,  1249,  1250,
+   630,   688,   689,  1026,   416,  1455,   417,  1100,  1076,  1249,
+  1250,  1254,  1409,  1159,   706,   755,  1255,   644,  1525,  1338,
+   282,  1021,  1254,    71,  1020,   665,   669,   469,  1184,  1249,
+  1250,  1202,   557,   669,    71,    57,   280,   890,    27,    57,
+   118,   119,  1254,  1327,  1418,  1071,  1077,  1255,  1102,   847,
+   516,   517,  1290,  1018,    71,   796,   577,   450,   199,   378,
+  1249,  1250,  1344,   641,   475,  1264,   280,  1497,   639,    57,
+  1451,   558,   559,  1254,  1505,  1481,   560,   561,   562,   563,
+    57,  1507,   282,  1057,     0,    71,  1266,   458,   202,   203,
+     0,     0,     0,     0,    14,     0,     0,  1255,   669,     0,
+    57,     0,     0,     0,     0,     0,  1370,     0,   639,     0,
+  1249,  1250,    19,   639,     0,     0,     0,    21,     0,   285,
+   126,   127,    10,  1254,     0,   917,    24,   322,   280,     0,
+   665,    57,     0,   766,   767,    71,   771,   772,   773,   774,
+   775,   776,   777,   778,   779,   780,   781,   782,   783,   784,
+   785,   786,   787,   788,   789,     0,     0,     0,    22,     0,
+   669,     0,   669,   669,     0,   236,     0,     0,     0,     0,
+     0,     0,     0,    28,   303,   356,   360,     0,   115,   703,
+   704,    57,   705,     0,     0,     0,    94,    95,    96,   669,
+   212,   213,   214,   667,     0,     0,   669,   475,   475,     0,
+   667,  -267,   438,   440,   444,    33,   706,   156,     0,     0,
+     0,     0,     0,   707,   849,   851,  -267,  -267,     0,   639,
+   215,  -267,     0,   639,     0,     0,   475,     0,     0,     0,
+    27,     0,   118,   119,     0,     0,     0,  -267,    27,     0,
+    97,    98,   216,     0,     0,     0,   639,   158,     0,  -267,
+  -267,   639,  -267,   915,  -267,   156,   156,   156,     0,     0,
+     0,     0,   665,     0,     0,   667,     0,     0,     0,     0,
+     0,  1086,  1087,     9,    10,     0,     0,   948,     0,     0,
+     0,     0,   953,  -267,  -267,   639,     0,  -267,   217,   218,
+   219,     0,     0,     0,     0,   158,   158,   158,     0,  -267,
+    15,    16,     0,     0,     0,  -375,     0,     0,     0,     0,
+    22,     0,   475,   475,     0,   475,   475,     0,   475,     0,
+   322,   322,   322,    27,     0,    28,    29,   667,     0,   667,
+   667,  1088,     0,  -375,  -375,     0,     0,   669,  -375,   180,
+     0,     0,     0,   639,     0,   639,     0,     0,     0,   181,
+     8,     9,     0,   134,    12,    13,   667,    33,   673,   973,
+    14,     0,   182,   667,     0,     0,    94,   109,   110,  1109,
+   621,   622,   623,   199,   207,    17,     0,    18,    19,     0,
+     0,     0,   523,    21,  1006,     0,  1007,     0,     0,     0,
+     0,     0,    24,   475,   475,     0,   665,   669,     0,     0,
+     0,    27,     0,   129,   130,     0,    79,     0,     0,     0,
+   669,     0,   669,     0,   669,     0,   103,     0,     0,   639,
+   111,   112,     0,     0,     0,     0,     0,   132,    79,     0,
+     0,     0,     0,   146,   146,     0,   146,     0,    79,     0,
+   639,     0,  1017,    79,   674,     0,   126,   127,     0,     0,
+     0,    13,   669,     0,     0,     0,   190,     0,    79,   686,
+   639,   687,     0,   438,   440,   444,   223,     0,     0,     0,
+     0,  1037,   639,   103,   697,   475,   475,   475,   669,     0,
+   201,   202,   203,     0,   247,   103,     0,    14,     0,     0,
+   580,     0,     0,     0,     0,    79,   669,    27,     0,   129,
+   130,   670,  1187,  1188,   667,    19,     0,   103,     0,     0,
+    21,     0,  1116,   581,  1118,   475,   475,     0,     0,    24,
+     0,     0,     0,   582,     0,     0,     0,     0,  1074,     0,
+   132,  1201,     0,   583,   394,   132,   584,   585,     0,   190,
+   103,     0,     0,     0,     0,   665,   146,     0,     0,   399,
+   146,   359,   361,   146,   146,   146,     0,     0,     0,     0,
+     0,     0,     0,     0,   667,     0,  1147,    79,     0,     0,
+     0,   523,   665,   665,   523,     0,  1130,   667,   742,   667,
+     0,   667,   190,   190,   190,   201,   202,   203,     0,     0,
+   475,   523,    14,     0,     0,     0,     7,   126,   127,    10,
+     0,     0,   523,     0,     0,     0,   769,     0,     0,     0,
+    19,   190,     0,     0,     0,    21,     0,  1276,  1277,   667,
+  1286,  1287,     0,  1289,    24,     0,   468,     0,     0,     0,
+     0,     0,   791,     0,   103,    22,     0,     0,   808,   609,
+   669,     0,   669,     0,   669,   667,   146,   665,    27,     0,
+    28,    29,     7,     8,     9,    10,   665,   665,    13,     0,
+     0,   665,   665,   667,   151,   548,   549,   550,   551,   552,
+   553,   554,   555,   556,   152,     0,     0,     0,     0,     0,
+     0,     0,    33,     0,   103,   495,  1193,   153,     0,     0,
+     0,    22,     0,     0,     0,     0,     0,   580,  1351,  1352,
+   599,     8,     9,  1219,    27,     0,    28,    29,     0,     0,
+   686,   687,     0,   697,     7,     8,   235,    10,     0,     0,
+   862,     0,   665,     0,  1213,     0,     0,   103,     0,     0,
+   863,   578,     0,   495,   495,   594,   293,   600,    33,    22,
+   583,     0,  1268,   864,   585,     0,  1272,     0,     0,   669,
+   190,     0,    27,    22,   129,   130,     0,     0,   527,     0,
+   236,  1293,  1294,     0,     0,     0,     0,   132,    28,    29,
+     0,     0,     0,     0,     0,     0,     0,  1304,     0,   665,
+  1398,  1399,  1400,     0,     0,     0,     0,     0,   132,  1274,
+  1275,   639,   237,     0,   103,     0,     7,   126,   127,    10,
+    33,     0,    13,     0,     0,   146,     0,   667,   146,   667,
+     0,   667,   665,   146,   244,     0,     0,    79,     0,     0,
+  1427,  1428,     7,   126,   127,    10,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    22,     0,   638,  1320,   190,
+     0,   190,     0,   190,   190,   190,     0,     0,    27,   190,
+    28,    29,  1366,  1367,   190,     0,     0,   190,     0,     0,
+     0,    22,     0,     0,    31,     0,     0,     0,   236,     0,
+     0,     0,   991,     0,    32,     0,    28,    29,  1356,     0,
+   676,     0,    33,     0,   438,   440,   444,    34,     0,     0,
+     0,     0,   411,     0,     0,  1491,     0,     0,     0,   665,
+   237,     0,     0,     0,     0,   523,  1394,  1395,    33,     0,
+     0,   436,   103,   103,   103,   103,   667,     0,     0,     0,
+   444,     0,     0,     0,   452,   544,   545,   546,   547,   548,
+   549,   550,   551,   552,   553,   554,   555,   556,   669,     0,
+     7,     8,     9,    10,     0,     0,   230,   738,     0,     0,
+   741,     0,  1396,  1397,   743,   744,   746,   747,   748,     0,
+  1095,  1402,     0,     0,     0,     0,     0,   527,   103,     0,
+   495,     0,     0,     0,     0,     0,  1420,     0,   765,    22,
+     0,   578,     0,   495,   495,   580,   594,     0,  1066,     0,
+     0,     0,    27,   840,    28,    29,     0,   842,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   862,     0,
+   794,     0,     0,     0,     0,     0,     0,     0,   863,     0,
+     0,     0,     0,     0,     0,     0,    33,     0,   583,   821,
+     0,   864,   585,     0,     0,     0,   821,     0,     0,     0,
+     0,   190,   869,   190,   190,   223,   594,     0,     0,     0,
+   686,   687,   438,   440,   444,     0,     0,     0,   697,     0,
+     0,     0,     7,     8,     9,    10,     0,     0,    13,     0,
+     0,     0,     0,   438,   440,   444,     0,     0,     0,   190,
+     0,     0,     0,   869,     0,     0,     0,     0,     0,     0,
+   190,   190,     0,   190,     0,     0,     0,     0,     0,     0,
+     0,    22,     0,     0,     0,   667,     0,   580,   665,     0,
+     7,     8,     9,    10,    27,     0,    28,    29,    79,     0,
+     0,     0,   523,   103,     0,     0,   638,     0,   103,     0,
+  1030,     0,     0,     0,     0,   495,   495,   495,     0,     0,
+  1031,     0,     0,     0,     0,     0,     0,   495,    33,    22,
+   583,     0,     0,  1032,   585,     0,   236,     0,     0,     0,
+     0,     0,     0,     0,    28,    29,   676,     0,     0,     0,
+     0,   676,     0,     0,     0,     0,   686,   687,   691,   697,
+     0,     0,     0,   696,     0,     0,     0,     0,   237,  1208,
+  1209,  1210,  1211,     0,     0,     0,    33,   103,     0,     0,
+  1215,     0,     0,     0,     0,     7,     8,     9,    10,   720,
+     0,   483,     0,     0,   725,     0,     0,  1284,     0,   495,
+     0,   495,     0,     0,     0,     0,   733,   734,   103,   735,
+     0,     0,   495,     0,   103,     0,   840,   840,   840,     0,
+   984,     0,     0,  1015,    22,     0,     0,     0,     0,     0,
+   580,     0,     0,     0,     0,     0,     0,    27,     0,    28,
+    29,   103,     0,   103,   190,   190,  1034,     0,     0,     0,
+     0,   765,     0,   862,     0,     0,     0,   676,     0,     0,
+    75,   821,     0,   863,     0,     0,     0,     0,     0,     0,
+     0,    33,     0,   583,     0,     0,   864,   585,     0,     0,
+  1034,     0,   140,     0,   638,     0,  1027,   145,   149,   821,
+     0,     0,    75,  1325,   103,     0,     0,    75,     0,     0,
+   829,   830,     0,     0,     0,   829,     0,     0,     0,   132,
+     0,     0,   200,    79,     0,    79,     0,     0,     0,     0,
+  1097,    79,    79,   821,     0,     0,    82,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   105,  1060,   103,     0,
+   103,   243,   444,     0,  1067,     0,   125,   133,    82,   350,
+     0,     0,     0,   147,   147,     0,   147,     0,    82,     0,
+     0,     0,     0,    82,     0,   243,     0,     0,     0,     0,
+     0,   495,   495,     0,   495,  1382,   147,     0,    82,     0,
+     0,   676,     0,   676,     0,     0,   224,     0,     0,     0,
+   438,   440,   444,   232,   243,     0,     0,     0,     0,     0,
+   398,     0,     0,     0,   400,   232,     0,     0,   243,     0,
+   190,   190,   190,   190,  1034,    82,     0,     0,   190,     0,
+     0,    75,     0,     0,     0,   769,  1416,     0,     0,     0,
+     0,     0,     0,  1034,  1034,  1034,   145,   149,     0,   523,
+   955,     0,   957,     0,     0,     0,     0,     0,     0,     0,
+   386,     0,   243,     0,     0,   103,  1416,   821,     0,   147,
+   232,     0,     0,     0,     0,     0,   147,   103,     0,     0,
+   147,     0,     0,   147,   147,   147,     0,     0,   821,     0,
+  1198,     0,     0,     0,     0,   243,     0,    82,     0,     0,
+    79,     0,     0,     0,     0,     0,     0,     0,   676,     0,
+   484,     0,   147,   147,   147,     0,     0,     0,     0,   243,
+   676,     0,     0,     0,   989,   990,  1485,   992,  1416,     0,
+     8,     9,     0,   134,    12,    13,     0,     0,   673,     0,
+    14,   147,     0,     0,     0,     0,   190,   190,     0,   190,
+     0,     0,  1504,     0,  1009,    17,     0,    18,    19,     0,
+     0,     0,     0,    21,     0,     0,     0,   769,     0,   103,
+     0,     0,    24,     0,   580,     0,   147,     0,     0,     0,
+     0,    27,     0,   129,   130,     0,     0,   190,     0,  1036,
+     0,     0,   146,     0,    79,     0,     0,   581,     7,     8,
+     9,    10,     0,     0,     0,     0,     0,   582,     0,   243,
+     0,     0,  1060,     0,   232,   147,     0,   583,     0,     0,
+   584,   585,     0,     0,   674,   545,   546,   547,   548,   549,
+   550,   551,   552,   553,   554,   555,   556,    22,     0,  1278,
+  1279,     9,    10,   580,     0,   190,   869,   190,     0,     0,
+    27,     0,    28,    29,     0,     0,     0,   232,     0,     0,
+     0,   579,     0,   147,   147,   595,   862,     0,     0,   649,
+   603,   243,   650,     0,     0,     0,   863,   652,    22,     0,
+   147,   140,     0,     0,    33,     0,   583,     0,     0,   864,
+   585,    27,     0,    28,    29,     0,     0,   386,     0,  1280,
+     0,   126,   127,   398,     0,   400,   230,   180,     0,     8,
+     9,     0,     0,    12,    13,     0,     0,   181,   484,    14,
+     0,     0,     0,     0,   232,    33,     0,  1146,     0,     0,
+   182,     0,  1034,     0,    17,   147,    18,     0,   147,     0,
+   243,     0,    21,   147,     0,   580,     0,    82,     0,     0,
+     0,    24,    27,     0,   129,   130,     0,     0,  1157,     0,
+    27,     0,   129,   130,   564,     0,     0,   243,   581,   147,
+     0,   147,     0,   147,   147,   147,     0,     0,   582,   147,
+  1034,  1034,  1034,     0,   147,     0,     0,   147,   583,     0,
+     0,   584,   585,     0,     0,  1185,   103,     0,     0,   565,
+     0,     0,   715,     0,     0,     0,     0,  1189,     0,     0,
+     0,   190,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   925,   527,     7,     8,   926,    10,
+   134,    12,    13,     0,  1204,     0,     0,    14,  1205,   638,
+     0,     0,   232,   232,   232,   232,     0,     0,     0,     0,
+   243,     0,    17,     0,    18,    19,    20,     0,     0,     0,
+    21,  -485,     0,     0,     0,    22,   243,     0,     0,    24,
+   927,  1220,   928,     0,     0,     0,     0,     0,    27,     0,
+    28,    29,     0,     0,   929,     0,   930,     0,     0,     0,
+     0,     0,     0,     0,    31,     0,     0,     0,   232,     0,
+   147,     0,     0,     0,    32,     0,   868,     0,     0,     0,
+     0,     0,    33,   147,   147,     0,   595,    34,     0,     0,
+     0,     0,     0,   841,     0,     0,     0,     0,     0,  1295,
+  1296,     0,     0,     0,  -485,   603,     0,     0,     0,     7,
+     8,     9,    10,     0,     0,     0,     0,   905,     0,     0,
+     0,     0,     0,     0,   649,   650,     0,   652,     0,     0,
+     0,     0,     0,     0,     0,     0,   125,     0,     0,     0,
+     0,   147,   595,   147,   147,   224,   595,     0,    22,     0,
+     0,     0,   943,     0,     0,     0,     0,     0,     0,   715,
+     0,    27,  1349,    28,    29,     0,  1350,   179,   925,     0,
+     7,     8,   926,    10,   134,    12,    13,   180,     0,   147,
+     0,    14,     0,   595,     0,     0,     0,   181,     0,     0,
+   147,   147,     0,   147,     0,    33,    17,     0,    18,    19,
+   182,     0,     0,     0,    21,     0,     0,     0,     0,    22,
+     0,     0,     0,    24,   927,     0,   928,     0,    82,     0,
+     0,     0,    27,   232,    28,    29,     0,     0,   232,     0,
+   930,   285,     8,     9,    10,   147,   147,   147,    31,     8,
+     9,     0,     0,    12,   230,     0,     0,   147,    32,    14,
+     0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
+     0,    34,     0,     0,    17,     0,    18,     0,     0,     0,
+    22,     0,    21,    50,     0,     0,     0,   236,     0,     0,
+     0,    24,   243,   580,   243,    28,   303,     0,     0,     0,
+    27,     0,   129,   130,     0,    50,     0,   232,   145,   149,
+    50,    50,     0,   154,     0,    50,   581,     0,     0,   237,
+    50,   243,     0,     0,     0,     0,   582,    33,     0,   147,
+     0,   147,     0,    50,     0,    50,   583,     0,   232,   584,
+   585,     0,   147,     0,   232,     0,   841,   841,   841,     0,
+     0,     0,     0,   603,     0,     0,     0,     0,   239,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   232,    50,   232,   147,   147,   595,   943,     0,   943,
+     0,     0,     0,     0,  1096,  1103,   943,   285,     8,     9,
+    10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   126,   127,     0,   383,   202,   203,
+   841,   383,   383,     0,    14,     0,    50,     0,     0,     0,
+     0,     0,     0,    50,   232,   239,    22,    50,     0,     0,
+   154,   154,   154,   236,     0,     0,   715,    21,     0,   133,
+     0,    28,   303,    82,    50,    82,    24,     0,   580,     0,
+  1098,    82,    82,     0,     0,    27,     0,   129,   130,    50,
+    50,   154,     0,     0,     0,   486,     0,   243,   232,   239,
+   232,   581,     0,    33,   398,   400,     0,     0,     0,     0,
+     0,   582,   484,     0,     0,     0,   243,     0,    50,     0,
+     0,   583,     0,     0,   591,   585,     0,     0,     0,     0,
+     0,   147,   147,     0,   147,   539,   540,   541,   542,   543,
+   544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
+   554,   555,   556,    50,     0,     0,     0,     7,     8,     9,
+    10,   134,    12,    13,     0,     0,   673,     0,    14,     0,
+   147,   147,   147,   147,   595,     0,     0,     0,   147,   243,
+     0,     0,   715,    17,   943,    18,    19,     0,     0,     0,
+     0,    21,     0,   841,   841,   841,    22,     0,     0,     0,
+    24,     0,   580,     0,     0,     0,     0,     0,     0,    27,
+   715,    28,    29,     0,     0,   232,   126,   127,     0,     0,
+     0,   483,   524,     0,     0,  1030,     0,   232,     0,     0,
+   649,   650,     0,   652,     0,  1031,     0,     0,   383,     0,
+     0,     0,     0,    33,     0,   583,   239,     0,  1032,   585,
+    82,     0,   674,     0,     0,     0,     0,    50,     0,     0,
+   580,     0,     0,     0,     0,     0,     0,    27,     0,   129,
+   130,  1285,     0,     0,   383,     0,  1285,     0,   943,     0,
+   243,     0,     0,   581,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   582,     0,   383,   147,   147,     0,   147,
+     0,     0,     0,   583,     0,     0,   584,   585,     0,     0,
+     0,     0,    50,     0,     0,    50,     0,     0,     0,   232,
+    50,     0,     0,     0,    50,   586,   586,   586,     0,     0,
+  1339,     0,     0,     0,     0,     0,     0,   147,     0,     0,
+     0,     0,   147,     0,    82,     0,    50,     0,    50,     0,
+   154,   154,   154,     0,     0,     0,    50,     0,     0,     0,
+     0,    50,     0,     0,    50,   541,   542,   543,   544,   545,
+   546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
+   556,  1362,     0,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
+     0,     0,  -442,     0,  -442,   147,   595,   147,     0,     0,
+     0,     0,     0,     0,     0,  -442,     0,  -442,  -442,     0,
+     0,   524,  -442,     0,   524,     0,     0,  -442,     0,     0,
+     0,     0,  -442,     0,     0,     0,  -442,     0,  -442,   524,
+   524,   524,     0,     0,     0,  -442,     0,  -442,  -442,  -442,
+  -442,  -442,   524,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
+  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
+  -442,  -442,  -442,  -442,  -442,  -442,     0,  -442,  -442,  -442,
+     0,  -442,  -442,  -442,  -442,  -442,  -442,     0,  -442,  -442,
+     0,     0,   841,    77,  1363,     0,     0,   239,     0,  -442,
+  -442,  -442,     0,  -442,     0,     0,     0,     0,     0,     0,
+   524,     0,     0,     0,     0,    77,     0,     0,     0,     0,
+    77,    77,     0,    77,     0,    77,     7,   126,   127,    10,
+    77,     0,   230,     0,     0,     0,     0,     0,     0,     0,
+   841,   841,   841,    77,     0,    77,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   232,     0,    50,    50,
+    50,    50,     0,     0,     0,    22,     0,     0,     0,     0,
+     0,   147,     0,     0,     0,     0,     0,   159,    27,     0,
+    28,    29,    77,     0,     0,   586,   586,     0,   586,     0,
+     0,     0,     0,     0,    31,   838,    50,   191,     0,     0,
+    50,     0,     0,     0,    32,     0,     0,    50,    50,     0,
+    50,     0,    33,     0,     0,     0,     0,    34,     0,     0,
+     0,     0,     0,     0,   126,   127,    77,     0,   202,   203,
+     0,     0,     0,    77,    14,    50,     0,    77,     0,     0,
+    77,    77,    77,   586,     0,   586,   586,     0,   586,     0,
+     7,   126,   127,    10,    77,     0,    13,    21,   524,     0,
+     0,     0,     0,     0,     0,     0,    24,     0,   580,    77,
+    77,    77,     0,     0,     0,    27,     0,   129,   130,     0,
+   191,   586,     0,     0,     0,     0,     0,     0,     0,    22,
+     0,   581,     0,     0,   159,   159,   159,     0,    77,     0,
+     0,   582,    27,     0,    28,    29,     7,     8,     9,    10,
+     0,   583,    13,     0,   584,   585,     0,     0,   151,     0,
+     0,     0,     0,   191,   191,   445,     0,     0,   152,     0,
+     0,     0,     0,    77,     0,     0,    33,     0,     0,     0,
+     0,   153,     0,     0,     0,    22,     0,     0,     0,   586,
+     0,     0,   191,   524,   524,   524,     0,     0,    27,   239,
+    28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   180,     0,     0,     0,     0,     0,
+     0,    50,    50,   154,   181,     0,     0,     0,   239,     0,
+     0,     0,    33,   589,   593,   596,     0,   182,   540,   541,
+   542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
+   552,   553,   554,   555,   556,     0,     0,  1054,     0,     0,
+     0,   586,     0,   586,     0,     0,   496,   602,     0,     0,
+     0,     0,     0,     0,   586,     0,     0,    77,   838,   838,
+   838,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    50,     0,    50,     0,     0,     0,     0,    50,    50,    50,
+     0,     0,     0,     0,     0,     0,   586,   586,   586,     0,
+     0,     0,     0,   189,   588,   588,   588,   543,   544,   545,
+   546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
+   556,   191,    77,     0,     0,    77,     0,     0,   242,     0,
+    77,   246,   838,     0,    77,   542,   543,   544,   545,   546,
+   547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+     0,     0,   242,     0,   355,     0,    77,     0,    77,     0,
+    77,    77,    77,     0,   239,     0,    77,     0,     0,     0,
+     0,    77,     0,     0,    77,     0,     0,    50,    50,   154,
+   154,   154,     0,   239,     0,    50,   189,     0,     0,     0,
+     0,     0,     0,     7,     8,     9,    10,   192,    12,   193,
+  1054,  1054,  1054,     0,    14,     0,     0,     0,     0,     0,
+   191,     0,   191,     0,   445,   445,   445,     0,     0,    17,
+   191,    18,    19,     0,     0,   191,     0,    21,   191,   189,
+   189,   189,    22,     0,     0,     0,    24,     0,     0,   451,
+     0,     0,     0,     0,     0,    27,   239,    28,    29,     0,
+     0,   194,     0,     0,     0,     0,     0,    50,   189,     0,
+     0,    31,   586,   586,   586,   586,   586,     0,     0,     0,
+   586,    32,     0,   818,   820,     0,     0,     0,     0,    33,
+     0,   246,     0,     0,    34,   838,   838,   838,     7,   126,
+   127,    10,     0,     0,   483,     0,   242,     0,   602,     0,
+     0,     0,     0,    50,    50,     0,    50,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   141,   666,     0,     0,     0,     0,   671,     0,     0,     0,
-     0,   642,   184,     0,     0,     0,     0,   140,     0,    76,
-     0,     0,     0,     0,     0,     0,     0,     8,     9,   129,
-    11,    12,     0,   714,   648,   716,    13,     0,   226,   141,
-     0,     0,     0,     0,     0,     0,     0,   724,   725,     0,
-   726,    16,     0,    17,    18,     0,     0,     0,     0,    20,
-     0,   184,   184,     0,   184,     0,     0,     0,    23,     0,
-   558,     0,     0,     0,     0,     0,     0,    26,     0,   124,
-   125,   226,     0,     0,    98,   557,     0,   141,   141,   573,
-   615,     0,     0,   559,   581,     0,     0,     0,   141,     0,
-     0,     0,     0,   560,     0,     0,  1001,  1002,   806,   808,
-     0,     0,     0,   561,  1008,   371,   562,   563,     0,     0,
-   649,     0,     0,     0,     0,     0,     0,     0,     0,   806,
-   808,     0,     0,     0,     0,     0,     0,     0,   817,   818,
-     0,   226,     0,   817,     0,     0,     0,     0,     0,     0,
-     0,   141,     0,     0,   141,     0,     0,     0,     0,   141,
-     0,     0,     0,    79,     0,     0,   184,   828,   184,     0,
-     0,     0,     0,     7,     8,     9,   195,   196,   197,     0,
-     0,     0,     0,    13,     0,   141,     0,   141,     0,   141,
-   141,   141,   459,   459,     0,   141,     0,     0,     0,     0,
-   141,    18,     0,   141,     0,     0,    20,     0,     0,  1001,
-  1002,    21,  1008,     0,     0,    23,     0,   558,   690,    79,
-     0,   459,     0,     0,    26,     0,    27,    28,     7,     8,
-     9,     0,     0,    12,     0,     0,     0,     0,     0,     0,
-   850,     0,     0,     0,     0,  1034,     0,     0,     0,     0,
-   851,     0,     0,     0,   226,   226,   226,   226,    32,     0,
-   561,     0,     0,   852,   563,     0,    21,     0,     0,     0,
-     0,     0,   558,     0,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,     0,     0,     0,  1034,  1034,  1034,     0,
-     0,   956,     0,   958,     0,  1030,     0,     0,     0,     0,
-     0,    98,     0,     0,     0,  1031,     0,     0,     0,     0,
-   226,     0,   141,    32,     0,   561,   184,     0,  1032,   563,
-     0,     0,     0,     0,   141,   141,     0,   573,     0,     0,
-     0,     0,     0,     0,   829,     7,     8,     9,   195,   196,
-   197,     0,     0,     0,     0,    13,   581,     0,     0,     0,
-     0,     0,     0,     0,   459,   459,     0,   459,   459,     0,
-   459,     0,     0,    18,   990,   991,     0,   993,    20,     0,
-     0,     0,     0,    21,     0,   120,     0,    23,     0,   558,
-   141,   573,   141,   141,   218,   573,    26,     0,    27,    28,
-     0,     0,  1009,     0,     0,     0,     0,   690,     0,     0,
-     0,     0,   850,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   851,     0,     0,     8,     9,   141,    11,   224,
-    32,   573,   561,     0,    13,   885,   563,  1036,   141,   141,
-     0,   141,     0,     0,     0,     0,     0,     0,     0,    16,
-     0,    17,   459,   459,     0,     0,     0,    20,   691,     0,
-     7,     8,   692,   129,    11,    12,    23,     0,   128,     0,
-    13,     0,    79,     0,    79,    26,     0,   124,   125,   938,
-    79,    79,     0,     0,     0,    16,     0,    17,    18,    19,
-   226,     0,   226,    20,  -470,  1072,     0,     0,    21,   141,
-   141,   141,    23,   693,     0,   694,     0,  1076,     0,     0,
-   141,    26,     0,    27,    28,     0,     0,   695,     0,   696,
-     0,   193,   201,     0,     7,     8,     9,    30,     0,    12,
+     0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
+     0,   867,     0,   589,   593,     0,   596,     0,     0,     0,
+    27,   804,    28,    29,    50,     0,     0,     0,     0,    50,
+     0,    50,     0,     0,   588,   588,    31,   588,    77,    77,
+    77,    77,     0,     0,   588,     0,    32,     0,     0,   593,
+     0,     0,     0,     0,    33,     0,     0,     0,     0,    34,
+     0,     0,     0,     0,     0,     0,   242,   246,   586,   586,
+     0,   586,     7,     8,     9,    10,    77,   189,   230,     0,
+    77,     0,    50,    50,    50,     0,     0,    77,    77,     0,
+    77,     0,   866,     0,   866,   866,     0,   588,     0,     7,
+     8,     9,    10,     0,     0,    13,     0,     0,     0,     0,
+     0,    22,     0,     0,     0,    77,     0,   593,     0,     0,
+     0,     0,     0,     0,    27,     0,    28,    29,     0,     0,
+   866,     0,     0,     0,     0,     0,     0,     0,    22,     0,
+   180,   191,   191,     0,   191,     0,     0,     0,     0,     0,
+   181,    27,     0,    28,    29,     0,     0,     0,    33,     0,
+     0,     0,     0,   182,     0,     0,   189,   441,   189,  1054,
+   189,   189,   189,     0,     0,     0,   189,   442,     0,     0,
+     0,   189,     0,     0,   189,    33,   496,   496,   496,  1001,
+   443,  1002,     0,     0,     0,     0,     0,     0,   588,     0,
+     8,     9,  1008,     0,    12,    13,   818,   820,     0,     0,
+    14,     0,     0,  1278,   126,   127,    10,  1054,  1054,  1054,
+     0,     0,     0,     0,     0,    17,     0,    18,     0,     0,
+     0,     0,     0,    21,   818,   820,     0,     0,     0,     0,
+   602,     0,    24,     0,     0,     0,     0,     0,    50,     0,
+     0,    27,    22,   129,   130,     0,     0,     0,     0,     0,
+     0,    77,    77,    77,     0,    27,     0,    28,    29,     0,
+   588,     0,   588,  1280,     0,     0,     0,     0,     0,     0,
+     0,    31,     0,   588,     0,     0,     0,   588,   588,   588,
+   795,    32,     0,     0,     0,     0,     0,  1056,     0,    33,
+     0,     0,     0,     0,    34,     6,     0,     7,     8,     9,
+    10,    11,    12,    13,     0,   866,   866,  1035,    14,     0,
+     0,     0,     0,   242,   246,     0,     0,     0,     0,     0,
+    77,     0,    77,    17,     0,    18,    19,    77,    77,    77,
+     0,    21,     0,     0,     0,     0,    22,     0,     0,     0,
+    24,  1035,     0,   415,     0,     0,     0,     0,     0,    27,
+     0,    28,    29,     0,     0,    30,     0,     0,   189,     0,
+   189,   189,     0,     0,     0,    31,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+     0,   191,     0,    33,     0,     0,     0,     0,    34,     0,
+  1001,  1002,   818,   820,     0,     0,   189,     0,  1008,     0,
+     7,     8,     9,    10,     0,     0,   483,   189,   189,     0,
+   189,     0,     0,   818,   820,     0,     0,    77,    77,    77,
+    77,    77,     0,     0,     0,    77,     0,     0,     0,     0,
+     0,     0,   804,   804,   246,   804,     0,     0,     0,    22,
+  1056,  1056,  1056,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    27,     0,    28,    29,     0,     0,     0,  -347,
+     8,     9,  -347,  -347,    12,   230,     0,     0,   180,     0,
+    14,   866,   866,  1035,  1035,  1035,     0,     0,   181,   866,
+     0,     0,     0,     0,     0,    17,    33,    18,  -347,     0,
+     0,   182,     0,    21,  1035,  1035,  1035,    77,  -347,     0,
+     0,     0,    24,     0,   580,     0,     0,     0,     0,     0,
+     0,    27,     0,   129,   130,     0,  1001,  1002,     0,  1008,
+     0,     0,     0,     0,     0,     0,     0,   581,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   582,     7,     8,
+     9,    10,     0,    77,    77,  -347,    77,   583,     0,     0,
+   584,   585,   101,     0,     0,     7,     8,     9,    10,   242,
+   246,   242,   120,   101,     0,     0,     0,     0,     0,   101,
+   101,     0,   101,     0,     0,     0,     0,    22,     0,     0,
+     0,   189,   189,  1033,    77,     0,     0,     0,   242,    77,
+    27,    77,    28,    29,    22,     0,  1334,   866,   866,     0,
+   866,     0,   222,     0,     0,     0,   180,    27,     0,    28,
+    29,     0,     0,     0,     0,     0,   181,  1033,     0,     0,
+     0,     0,     0,   180,    33,     0,     0,     0,     0,   182,
+     0,     0,     0,   181,     0,     0,     0,     0,   191,     0,
+     0,    33,    77,    77,    77,     0,   182,   925,     0,     7,
+     8,   926,    10,   134,    12,    13,     0,   189,     0,     0,
+    14,   120,     0,   120,     0,     0,   101,     0,     0,     0,
+   101,   101,     0,     0,     0,    17,     0,    18,    19,    20,
+     0,     0,   101,    21,   101,   101,   101,     0,    22,   101,
+   101,   101,    24,   927,     0,   928,   191,     0,   191,     0,
+     0,    27,     0,    28,    29,     0,     0,   929,     0,   930,
      0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-     0,     0,   459,   459,   459,    32,     0,     0,     0,     0,
-    33,     0,     7,     8,     9,     0,     0,   464,     0,     0,
-   226,     0,    21,     0,     0,     0,     0,  -470,     0,     0,
-     0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
-   141,     0,   141,     0,     0,     0,     0,  1123,     0,   226,
-    21,   174,     0,   141,     0,   226,   558,   829,   829,   829,
-     0,   175,     0,    26,   581,    27,    28,     0,     0,    32,
-   459,   459,     0,     0,   176,     0,     0,     0,  1134,   850,
-    49,     0,   226,     0,   226,   141,   141,   573,     0,   851,
-     7,     8,     9,   129,    11,    12,     0,    32,     0,   561,
-    13,    49,   852,   563,     0,     0,    49,    49,     0,   148,
-     0,    49,  1172,  1173,     9,    16,    49,    17,    18,     0,
-   829,     0,     0,    20,     0,     0,     0,    49,    21,    49,
-     0,     0,    23,     0,   226,  1187,  1188,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,   690,     0,   226,     0,
-    21,     0,   232,     0,     0,     0,     0,    30,     0,     0,
-   226,   130,     0,    26,    49,    27,    28,    31,  1203,     0,
-     0,  1174,     0,     0,     0,    32,   459,     0,     0,   174,
-    33,     0,     0,    79,     0,     0,     0,     0,     0,   175,
-     0,     0,   226,     0,   226,     0,     0,    32,     0,   368,
-     0,     0,   176,   368,   368,     0,  1251,     0,    49,     0,
-  1252,     0,     0,     0,    49,     0,   232,     0,    49,     0,
-     0,   148,   148,   148,     0,   141,   141,     0,   141,     0,
-     0,     0,  1270,  1271,     0,    49,   522,   523,   524,   525,
-   526,   527,   528,   529,   530,   531,   532,   533,   534,   535,
-    49,    49,   148,     0,     0,     0,     0,     0,     0,     0,
-   232,     0,     0,   141,   141,   141,   141,   573,     0,     0,
-   239,   141,     0,     8,     9,   690,    11,    12,     0,    49,
-     0,     0,    13,     0,     0,     0,   829,   829,   829,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,     0,    17,
-     0,     0,     0,   690,     0,    20,     0,   240,   241,     0,
-     0,    49,     0,     0,    23,     0,   242,   141,     0,     0,
-     0,     0,   141,    26,    79,   124,   125,     0,   243,     0,
-     0,     0,   244,   245,   246,   247,   248,   249,   250,   251,
-   252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-   262,   263,   264,     0,     0,   265,   266,   267,     0,     0,
-   268,     0,     0,   269,     0,     0,   141,   141,     0,   141,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   503,
-   270,     0,     0,     0,     0,     0,     0,     0,   691,   226,
-     7,     8,   692,   129,    11,    12,   368,     0,     0,     0,
-    13,     7,   121,   122,   232,     0,   464,     0,     0,    49,
-     0,     0,     0,     0,     0,    16,     0,    17,    18,     0,
-     0,     0,     0,    20,     0,     0,   368,     0,    21,     0,
-     0,     0,    23,   693,     0,   694,     0,     0,     0,    21,
-     0,    26,     0,    27,    28,     0,     0,   368,     0,   696,
-     0,     0,    26,     0,    27,    28,     0,    30,     0,     7,
-     8,     9,    49,     0,   224,    49,     0,    31,    30,   153,
-    49,   141,   573,   141,    49,    32,     0,     0,    31,     0,
-    33,  1172,   121,   122,     0,     0,    32,   185,     0,     0,
-     0,    33,     0,     0,     0,     0,    49,    21,    49,     0,
-   148,   148,   148,     0,     0,     0,    49,     0,     0,     0,
-    26,    49,    27,    28,    49,     0,     0,     0,     0,    21,
-     0,     0,     0,     0,     0,    74,   174,     0,     0,     0,
-    49,     0,    26,     0,    27,    28,   175,     0,     0,     0,
-  1174,     0,     0,     0,    32,     0,    74,     0,    30,   176,
-   829,    74,    74,     0,    74,     0,    74,   503,    31,     0,
-   503,    74,     0,     0,     0,     0,    32,     0,   185,     0,
-     0,    33,    74,     0,    74,   503,   503,   503,     0,     0,
-     0,   153,   153,   153,     0,     0,     0,     0,   503,     0,
-     0,   829,   829,   829,     0,     0,   691,     0,     7,     8,
-   692,   129,    11,    12,     0,     0,   226,     0,    13,    74,
-   185,   185,   428,     0,     0,     0,     0,     0,     0,     0,
-     0,   141,     0,    16,     0,    17,    18,    19,     0,     0,
-     0,    20,   232,     0,     0,     0,    21,     0,     0,   185,
-    23,   693,     0,   694,     0,   503,     0,     0,     0,    26,
-     0,    27,    28,    74,     0,   695,     0,   696,     0,    74,
-     0,     0,     0,    74,     0,    30,    74,    74,    74,     0,
-     0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-    74,     8,     9,    32,    11,    12,     0,     0,    33,     0,
-    13,    49,    49,    49,    49,    74,    74,    74,     0,     0,
-     0,     0,     0,     0,     0,    16,     0,    17,     0,     0,
-   477,     0,     0,    20,   271,     0,     0,     0,     0,   322,
-     0,   322,    23,     0,    74,     0,     0,     0,    49,     0,
-     0,    26,    49,   124,   125,   322,   322,     0,     0,    49,
-    49,     0,    49,   523,   524,   525,   526,   527,   528,   529,
-   530,   531,   532,   533,   534,   535,    74,     0,   566,   566,
-   566,     0,     0,     0,     0,     0,     0,     0,     0,   185,
-   322,     0,     0,    49,     0,    49,     0,     0,     0,     0,
-    49,    49,    49,     0,     0,     0,   691,     0,     7,     8,
-   692,   129,    11,    12,     0,     0,     0,     0,    13,     0,
-     0,     0,     0,     0,     0,   503,     0,     0,     0,     0,
-     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
-     0,    20,  -471,     0,     0,     0,    21,     0,     0,     0,
-    23,   693,     0,   694,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,     0,     0,   695,     0,   696,     0,     0,
-   580,     0,     0,     0,    74,    30,   185,     0,   185,     0,
-   428,   428,   428,     0,     0,    31,   185,     0,     0,     0,
-     0,   185,     0,    32,   185,     0,     0,     0,    33,     0,
-     0,     0,   121,   122,     0,   196,   197,     0,     0,     0,
-     0,    13,     0,     0,     0,  -471,     0,     0,   503,   503,
-   503,     0,     0,     0,   232,     0,     0,    74,     0,     0,
-    74,     0,     0,     0,    20,    74,     0,     0,     0,    74,
-     0,     0,     0,    23,     0,   558,    49,    49,   148,     0,
-     0,     0,    26,     0,   124,   125,     0,   322,     0,     0,
-     0,    74,     0,    74,     0,    74,    74,    74,   559,     0,
-   271,    74,     0,     7,   121,   122,    74,     0,   560,    74,
-     0,  1054,     0,     0,     0,     0,     0,     0,   561,     0,
-     0,   569,   563,     0,     0,    74,     0,     0,     0,     0,
-     0,     0,     0,   794,   121,   122,     0,   196,   197,     0,
-     0,    21,     0,    13,     0,   566,   566,     0,   566,     0,
-     0,     0,     0,     0,    26,   566,    27,    28,     0,     0,
-   617,     0,     0,   232,     0,     0,    20,     0,     0,     0,
-   145,     0,     0,     0,    49,    23,     0,   558,     0,     0,
-   146,     0,     0,     0,    26,     0,   124,   125,    32,     0,
-     0,     0,     0,   147,     0,     0,     0,     0,     0,     0,
-   559,   854,   617,   854,   854,     0,   566,     0,     0,     0,
-   560,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   561,     0,     0,   562,   563,     0,     0,     0,   580,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   854,     0,
-     0,   232,     0,     0,     0,     0,     0,     0,     0,   185,
-   185,     0,   185,     0,    49,    49,   148,   148,   148,     0,
-   232,     0,    49,     0,     0,   322,     0,     0,   322,     0,
-     0,     0,   322,   322,   322,   322,   322,  1054,  1054,  1054,
-     0,     0,     0,     0,     0,   322,    74,    74,    74,    74,
-   185,     0,   322,     0,     0,     0,   322,     0,     8,     9,
-     0,    11,    12,     0,     0,     0,     0,    13,    49,     0,
-   477,   477,   477,    49,     0,    49,     0,     0,     0,     0,
-     0,   566,    16,    74,    17,     0,     0,    74,   322,   271,
-    20,     0,     0,     0,    74,    74,     0,    74,     0,    23,
-     0,     0,     0,     0,     0,     0,   617,     0,    26,     0,
-   124,   125,     0,   617,     0,     0,     0,    49,    49,     0,
-    49,     0,     0,     0,     0,     0,     0,     0,    74,     0,
-    74,     0,     0,     0,     0,    74,    74,    74,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   785,     0,     0,
-     0,   566,     0,   566,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   183,   566,     0,     0,     0,   566,   566,
-   566,     0,     0,     0,     0,     0,     0,     0,     0,     7,
-     8,     9,     0,     0,    12,     0,     0,     0,   233,     0,
-     0,   237,     0,     0,     0,     0,   854,   854,  1035,     0,
-   617,     0,     8,     9,   129,    11,    12,     0,     0,  1396,
-   233,    13,   340,     0,     0,     0,     0,    21,     0,     0,
-     0,     0,    49,    49,    49,     0,    16,     0,    17,    18,
-    26,  1035,    27,    28,    20,     0,     0,     0,     0,     0,
-     7,     8,     9,    23,   183,   464,   424,     0,     0,     0,
-     0,     0,    26,     0,   124,   125,   425,     0,     0,   617,
-   580,   617,     0,     0,    32,     0,     0,     0,     0,   426,
-     0,     8,     9,   186,    11,   187,     0,     0,    21,     0,
-    13,    74,    74,    74,     0,     0,   183,   183,   183,     0,
-     0,    26,     0,    27,    28,    16,   434,    17,    18,     0,
-     0,  1054,     0,    20,     0,     0,     0,   174,     0,     0,
-     0,     0,    23,     0,     0,   183,  1056,   175,     0,     0,
-     0,    26,     0,   124,   125,    32,     0,     0,     0,   322,
-   176,     0,     0,     7,     8,     9,   794,   794,   237,   794,
-     0,     0,  1054,  1054,  1054,     0,     0,     0,     0,     0,
-   233,     0,     0,     0,     7,     8,     9,     0,   322,     0,
-     0,     0,     0,     0,   617,     0,     0,     0,   617,     0,
-     0,    21,    49,     0,   854,   854,  1035,  1035,  1035,    74,
-     0,     0,   854,     0,    26,     0,    27,    28,     0,     0,
-     0,   617,    21,   322,     0,     0,   617,  1035,  1035,  1035,
-   174,     0,     0,     0,     0,    26,     0,    27,    28,     0,
-   175,     0,     0,     0,     0,     0,     0,     0,    32,     0,
-     0,   424,     0,   176,     0,   564,   564,   564,   185,   617,
-     0,   425,     0,     0,     0,     0,     0,     0,     0,    32,
-   233,   237,     0,   322,   426,   183,     0,     0,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,   617,     0,    74,
-    74,    74,    74,    74,     0,     0,     0,    74,     0,   617,
-     0,     0,     0,     0,     0,     0,     0,   854,   854,     0,
-   854,     0,  1056,  1056,  1056,   520,   521,   522,   523,   524,
-   525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
-   535,   617,     0,   617,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    74,     0,     0,     0,     0,    74,     0,
-    74,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   183,     0,   183,     0,   183,   183,   183,     0,
-     0,     0,   183,     0,     0,     0,     0,   183,     0,     0,
-   183,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    74,    74,     0,    74,     0,    72,     0,     0,
-     0,     0,     0,     0,     0,     0,   617,     0,     0,     0,
-     0,     0,   185,     0,   185,     0,     0,     0,   135,     0,
-     0,     0,     0,   139,   143,     0,     0,   617,    72,     0,
-     0,     0,     0,    72,  -333,     8,     9,  -333,    11,   224,
-     0,     0,     0,     0,    13,     0,   194,   524,   525,   526,
-   527,   528,   529,   530,   531,   532,   533,   534,   535,    16,
-     0,    17,  -333,     0,     0,     0,     0,    20,     0,     0,
-     0,     0,  -333,     0,     0,     0,    23,     0,   558,     0,
-     0,   335,     0,     0,     0,    26,     0,   124,   125,     0,
-     0,   428,   564,   564,     0,   564,     0,    74,    74,    74,
-     0,   559,   826,     0,     0,     0,     0,     0,     0,     0,
-     0,   560,     0,     0,   233,   237,     0,     0,     0,  -333,
-     0,   561,     0,     0,   562,   563,     0,     0,   322,     0,
-     0,   381,   428,   428,   428,   383,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   564,     0,
-   564,   564,    72,   564,     0,     0,     0,   183,     0,   183,
-   183,     0,   185,     0,     0,     0,     0,   139,   143,     0,
-     0,     0,     0,    96,     0,     0,  1056,     0,     0,     0,
-     0,     0,     0,   115,    96,   564,     0,     0,     0,     0,
-    96,    96,     0,    96,   183,     0,     0,     0,     8,     9,
-   129,    11,    12,     0,     0,   183,   183,    13,   183,     0,
-     0,     0,     0,     0,     0,     0,     0,  1056,  1056,  1056,
-     0,   216,    16,     0,    17,    18,     0,     0,   465,     0,
-    20,     0,   237,     0,     0,     0,     0,     0,     0,   610,
-     0,     0,     0,     0,     0,     0,   183,    74,    26,     0,
-   124,   125,     0,     0,     0,     0,     0,     7,     8,     9,
-   186,    11,   187,     0,     0,     0,     0,    13,   564,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   115,     0,
-   115,     0,    16,    96,    17,    18,     0,    96,    96,     0,
-    20,     0,     0,     0,     0,    21,     0,     0,    96,    23,
-    96,    96,    96,     0,     0,    96,    96,    96,    26,     0,
-    27,    28,     0,     0,   188,     0,     0,     0,     0,   271,
-     0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-     0,     0,   322,     0,    31,     0,     0,     0,   564,     0,
-   564,     0,    32,     0,     0,   617,     0,    33,   271,     0,
-     0,   564,     0,     0,     0,   826,   826,   826,     0,     0,
+     0,     7,     8,     9,    10,     0,     0,    32,     0,  1056,
+     0,     0,     0,     0,   242,    33,     0,     0,     0,     0,
+    34,     0,     0,     0,     0,     0,     0,   189,   189,   189,
+   189,  1033,     0,  1156,     0,   189,     0,     0,     0,     0,
+    22,   466,   101,     0,     0,     0,     0,     0,     0,     0,
+  1033,  1033,  1033,    27,     0,    28,    29,  1056,  1056,  1056,
+     0,     0,   101,   445,     0,     0,     0,     0,     0,   441,
+     0,     0,     0,     0,     0,     0,     0,     0,   925,   442,
+     7,     8,   926,    10,   134,    12,    13,    33,    77,     0,
+     0,    14,   443,     0,     0,     0,   451,     0,     0,     0,
+     0,   101,     0,     0,     0,     0,    17,     0,    18,    19,
+    20,   445,   445,   445,    21,  -486,     0,     0,     0,    22,
+     0,     0,     0,    24,   927,     0,   928,     0,     0,     0,
+     0,     0,    27,     0,    28,    29,     0,     0,   929,     0,
+   930,     0,   191,     0,     0,     0,     0,   101,    31,   101,
+   101,     0,     0,   189,   189,     0,   189,     0,    32,     0,
+     0,     0,     0,     0,     0,     0,    33,     0,     0,     0,
+     0,    34,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   101,     0,     0,     0,     0,  -486,     0,
+     0,     0,     0,     0,   189,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   101,   925,     0,     7,     8,   926,
+    10,   134,    12,    13,     0,     0,     0,   101,    14,     0,
+     0,   101,     0,     0,   101,     0,     0,     0,     0,   101,
+     0,     0,     0,    17,     0,    18,    19,    20,     0,     0,
+     0,    21,  -488,     0,     0,     0,    22,     0,     0,     0,
+    24,   927,   189,   928,   189,     0,     0,     0,     0,    27,
+     0,    28,    29,     0,     0,   929,     0,   930,     0,     8,
+     9,     0,   134,    12,    13,    31,     0,  1436,     0,    14,
+     0,     0,     0,     0,     0,    32,   101,     0,   708,     0,
+     0,     0,     0,    33,    17,     0,    18,    19,    34,     0,
+     0,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+     0,    24,     0,   101,     0,  -488,     0,     0,     0,     0,
+    27,     0,   129,   130,  1342,     0,  1232,  1233,  1234,    10,
+   134,    12,   286,   287,   288,     0,   289,    14,  1235,  1033,
+  1236,  1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,
+    15,    16,    17,   290,    18,    19,    20,     0,   291,   292,
+    21,     0,   293,   294,   295,    22,   296,   297,     0,    24,
+     0,     0,     0,   298,   299,   300,   301,   302,    27,     0,
+  1246,   303,   660,     0,  1247,   304,   101,  1033,  1033,  1033,
+     0,   305,     0,     0,   306,     0,   101,   101,     0,   101,
+   101,     0,   307,   308,   309,     0,     0,     0,     0,     0,
+   310,   311,   312,     0,     0,     0,     0,   313,   189,  1248,
+     8,     9,     0,   192,    12,   193,     0,     0,     0,     0,
+    14,     0,     0,     0,  1343,   314,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,     0,    18,    19,     0,
+     0,     0,   120,    21,     0,     0,     0,     0,     0,     0,
+     0,   222,    24,     0,     0,     0,     0,     0,     0,     0,
+     0,    27,     0,   129,   130,   708,     0,     0,  1231,     0,
+  1232,  1233,  1234,    10,   134,    12,   286,   287,   288,     0,
+   289,    14,  1235,     0,  1236,  1237,  1238,  1239,  1240,  1241,
+  1242,  1243,  1244,  1245,    15,    16,    17,   290,    18,    19,
+    20,     0,   291,   292,    21,     0,   293,   294,   295,    22,
+   296,   297,     0,    24,     0,     0,     0,   298,   299,   300,
+   301,   302,    27,   708,  1246,   303,   660,     0,  1247,   304,
+     0,     0,     0,     0,     0,   305,     0,     0,   306,     0,
+     0,   101,   101,   101,     0,     0,   307,   308,   309,     0,
+     0,     0,     0,   101,   310,   311,   312,     0,     0,     0,
+     0,   313,   519,  1248,   285,     8,     9,    10,   134,    12,
+   286,   287,   288,   673,   289,    14,     0,     0,     0,   314,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   233,   237,   233,     0,     0,     0,     0,   449,    96,   624,
-     0,     0,   625,   564,   564,   564,     0,   627,     0,     0,
-     0,   135,   183,   183,  1033,    96,     0,     0,     0,     0,
-     0,     0,     0,     0,   271,     0,     0,     0,     0,     0,
-     0,     0,     0,   381,     0,   383,     0,     0,   826,     0,
-     0,     0,     0,     0,     0,     0,     0,  1033,   465,     0,
-     0,     0,     0,     0,    96,   514,   515,   516,   517,   518,
-   519,   520,   521,   522,   523,   524,   525,   709,   527,   528,
-   529,   530,   531,   532,   533,   534,   535,     0,   691,     0,
-     7,     8,   692,   129,    11,    12,     0,     0,     0,     0,
-    13,     0,     0,     0,     0,     0,     0,     0,     0,   434,
-    96,     0,    96,    96,     0,    16,     0,    17,    18,    19,
-     0,     0,     0,    20,  -473,     0,     0,     0,    21,     0,
-     0,     0,    23,   693,     0,   694,     0,     0,     0,     0,
-    96,    26,     0,    27,    28,     0,     0,   695,     0,   696,
-     0,     0,     0,     0,     0,     0,     0,    30,     0,     0,
-     0,    96,     0,     0,     0,     0,     0,    31,     0,     0,
-     0,     0,    96,     0,     0,    32,    96,     0,     0,    96,
-    33,     0,     0,     0,    96,     0,     0,   233,     0,     0,
-     0,   564,   564,   564,   564,   564,     0,  -473,     0,   564,
-   183,   183,   183,   183,  1033,     0,  1133,     0,   183,     0,
-     0,     0,     0,     0,   826,   826,   826,     0,     0,     0,
-     0,     0,     0,  1033,  1033,  1033,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   856,
-     0,    96,     0,   683,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   183,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    96,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   892,
-     0,     0,     0,     0,     0,     0,   624,   625,     0,   627,
-     0,     0,     0,     0,   564,   564,     0,   564,     0,     0,
-  1346,     0,     0,   183,   183,     0,   183,     0,     0,     0,
+    17,   290,    18,    19,    20,     0,   291,   292,    21,     0,
+   293,   294,   295,    22,   296,   297,     0,    24,     0,   580,
+     0,   298,   299,   300,   301,   302,    27,     0,    28,   303,
+  -275,     0,     0,   304,     0,   101,     0,   101,     0,   305,
+     0,     0,   834,     0,     0,     0,     0,     0,   101,     0,
+   307,   308,   835,     0,     0,     0,     0,     0,   310,   311,
+   312,     0,   583,     0,     0,   836,   585,     0,   519,   674,
+     7,     8,     9,    10,   134,    12,   286,   287,   288,   673,
+   289,    14,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    17,   290,    18,    19,
+    20,     0,   291,   292,    21,     0,   293,   294,   295,    22,
+   296,   297,     0,    24,     0,   580,     0,   298,   299,   300,
+   301,   302,    27,     0,    28,    29,  -275,     0,     0,   304,
+     0,     0,     0,     0,     0,   305,     0,     0,  1051,     0,
+     0,     0,   708,     0,     0,   101,   307,   308,  1052,     0,
+     0,     0,     0,     0,   310,   311,   312,     0,   583,     0,
+     0,  1053,   585,     0,     0,   674,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   314,
+     0,     0,     0,   672,     0,   285,     8,     9,    10,   134,
+    12,   286,   287,   288,   673,   289,    14,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   101,   101,     0,
+   101,    17,   290,    18,    19,    20,     0,   291,   292,    21,
+     0,   293,   294,   295,    22,   296,   297,     0,    24,     0,
+     0,     0,   298,   299,   300,   301,   302,    27,     0,    28,
+   303,     0,     0,     0,   304,     0,     0,     0,     0,     0,
+   305,     0,     0,   306,     0,     0,     0,     0,   708,     0,
+     0,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+   311,   312,     0,     0,     0,     0,   313,     0,     0,     0,
+   674,     0,     0,     0,     0,     0,   708,     0,     0,     0,
+     0,     0,  -748,   768,   314,   285,     8,     9,    10,   134,
+    12,   286,   287,   288,     0,   289,    14,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   101,     0,     0,     0,
+     0,    17,   290,    18,    19,    20,     0,   291,   292,    21,
+     0,   293,   294,   295,    22,   296,   297,     0,    24,     0,
+     0,     0,   298,   299,   300,   301,   302,    27,     0,    28,
+   303,  1412,     0,  -738,   304,     0,     0,     0,     0,     0,
+   305,     0,     0,   306,     0,     0,     0,     0,     0,     0,
+     0,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+   311,   312,     0,     0,     0,   663,   313,   756,   757,   758,
+    10,     0,    12,   501,   287,   288,     0,   289,    14,     0,
+     0,     0,     0,     0,   314,     0,     0,     0,     0,     0,
+     0,     0,     0,    17,   290,    18,   101,    20,   101,   291,
+   292,    21,     0,   293,   294,   295,    22,   296,   297,     0,
+    24,     0,     0,     0,   298,   299,   300,   301,   302,    27,
+     0,   759,   760,   664,     0,     0,   304,     0,     0,     0,
+     0,     0,   305,     0,     0,   306,     0,     0,     0,     0,
+     0,     0,     0,   307,   308,   309,     0,     0,     0,     0,
+     0,   310,   311,   312,     0,     0,     0,     0,   313,   761,
+   663,     0,   756,   757,   758,    10,     0,    12,   501,   287,
+   288,     0,   289,    14,     0,   889,   314,     0,     0,     0,
+  1126,     0,     0,     0,     0,     0,     0,     0,    17,   290,
+    18,     0,    20,     0,   291,   292,    21,     0,   293,   294,
+   295,    22,   296,   297,     0,    24,     0,     0,     0,   298,
+   299,   300,   301,   302,    27,     0,   759,   760,   664,     0,
+     0,   304,     0,     0,     0,     0,     0,   305,     0,     0,
+   306,     0,     0,     0,     0,     0,     0,     0,   307,   308,
+   309,     0,     0,     0,     0,     0,   310,   311,   312,     0,
+     0,     0,   663,   313,   756,   757,   758,    10,     0,    12,
+   501,   287,   288,     0,   289,    14,     0,     0,     0,     0,
+  -446,   314,  1126,     0,     0,     0,     0,     0,     0,     0,
+    17,   290,    18,     0,    20,     0,   291,   292,    21,     0,
+   293,   294,   295,    22,   296,   297,     0,    24,     0,     0,
+     0,   298,   299,   300,   301,   302,    27,     0,   759,   760,
+   664,     0,     0,   304,     0,     0,     0,     0,     0,   305,
+     0,     0,   306,     0,     0,     0,     0,     0,     0,     0,
+   307,   308,   309,     0,     0,     0,     0,     0,   310,   311,
+   312,     0,     0,     0,   663,   313,   756,   757,   758,    10,
+     0,    12,   501,   287,   288,     0,   289,    14,     0,     0,
+     0,     0,  1170,   314,     0,     0,     0,     0,     0,     0,
+     0,     0,    17,   290,    18,     0,    20,     0,   291,   292,
+    21,     0,   293,   294,   295,    22,   296,   297,     0,    24,
+     0,     0,     0,   298,   299,   300,   301,   302,    27,     0,
+   759,   760,   664,     0,     0,   304,     0,     0,     0,     0,
+     0,   305,     0,     0,   306,     0,     0,     0,     0,     0,
+     0,     0,   307,   308,   309,     0,     0,     0,     0,     0,
+   310,   311,   312,     0,     0,     0,     0,   313,   761,   663,
+     0,   285,     8,     9,    10,     0,    12,   501,   287,   288,
+     0,   289,    14,     0,     0,   314,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    17,   290,    18,
+     0,    20,     0,   291,   292,    21,     0,   293,   294,   295,
+    22,   296,   297,     0,    24,     0,     0,     0,   298,   299,
+   300,   301,   302,    27,     0,    28,   303,   664,     0,     0,
+   304,     0,     0,     0,     0,     0,   305,     0,     0,   306,
+     0,     0,     0,     0,     0,     0,     0,   307,   308,   309,
+     0,     0,     0,     0,     0,   310,   311,   312,     0,     0,
+     0,     0,   313,     0,     0,   519,     0,   285,     8,     9,
+    10,  1174,    12,   286,   287,   288,     0,   289,    14,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    17,   290,    18,     0,    20,     0,   291,
+   292,    21,     0,   293,   294,   295,    22,   296,   297,     0,
+    24,     0,     0,     0,   298,   299,   300,   301,   302,    27,
+     0,    28,   303,  -275,     0,     0,   304,     0,     0,     0,
+     0,     0,   305,     0,     0,   520,     0,     0,     0,     0,
+     0,     0,     0,   307,   308,   521,     0,     0,     0,     0,
+     0,   310,   311,   312,     0,     0,     0,   663,   522,   285,
+     8,     9,    10,     0,    12,   501,   287,   288,     0,   289,
+    14,     0,     0,     0,     0,     0,   314,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,   290,    18,     0,    20,
+     0,   291,   292,    21,     0,   293,   294,   295,    22,   296,
+   297,     0,    24,     0,     0,     0,   298,   299,   300,   301,
+   302,    27,     0,    28,   303,   664,     0,     0,   304,     0,
+     0,     0,     0,     0,   305,     0,     0,   306,     0,     0,
+     0,     0,     0,     0,     0,   307,   308,   309,     0,     0,
+     0,     0,     0,   310,   311,   312,     0,     0,     0,   768,
+   313,   285,     8,     9,    10,     0,    12,   501,   287,   288,
+     0,   289,    14,     0,     0,     0,     0,     0,   314,     0,
+     0,     0,     0,     0,     0,     0,     0,    17,   290,    18,
+     0,    20,     0,   291,   292,    21,     0,   293,   294,   295,
+    22,   296,   297,     0,    24,     0,     0,     0,   298,   299,
+   300,   301,   302,    27,     0,    28,   303,     0,     0,     0,
+   304,  -738,     0,     0,     0,     0,   305,     0,     0,   306,
+     0,     0,     0,     0,     0,     0,     0,   307,   308,   309,
+     0,     0,     0,     0,     0,   310,   311,   312,     0,     0,
+     0,   519,   313,     7,     8,     9,    10,     0,    12,   286,
+   287,   288,     0,   289,    14,     0,     0,     0,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,     0,    17,
+   290,    18,     0,    20,     0,   291,   292,    21,     0,   293,
+   294,   295,    22,   296,   297,     0,    24,     0,     0,     0,
+   298,   299,   300,   301,   302,    27,     0,    28,    29,  -275,
+     0,     0,   304,     0,     0,     0,     0,     0,   305,     0,
+     0,  1388,     0,     0,     0,     0,     0,     0,     0,   307,
+   308,  1389,     0,     0,     0,     0,     0,   310,   311,   312,
+     0,     0,     0,  1487,  1390,   285,     8,     9,    10,     0,
+    12,   286,   287,   288,     0,   289,    14,     0,     0,     0,
+     0,     0,   314,     0,     0,     0,     0,     0,     0,     0,
+     0,    17,   290,    18,     0,    20,     0,   291,   292,    21,
+     0,   293,   294,   295,    22,   296,   297,     0,    24,     0,
+     0,     0,   298,   299,   300,   301,   302,    27,     0,    28,
+   303,     0,     0,  -163,   304,     0,     0,     0,     0,     0,
+   305,     0,     0,   306,     0,     0,     0,     0,     0,     0,
+     0,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+   311,   312,     0,     0,     0,   768,   313,   285,     8,     9,
+    10,     0,    12,   501,   287,   288,     0,   289,    14,     0,
+     0,     0,     0,     0,   314,     0,     0,     0,     0,     0,
+     0,     0,     0,    17,   290,    18,     0,    20,     0,   291,
+   292,    21,     0,   293,   294,   295,    22,   296,   297,     0,
+    24,     0,     0,     0,   298,   299,   300,   301,   302,    27,
+     0,    28,   303,     0,     0,     0,   304,     0,     0,     0,
+     0,     0,   305,   248,     0,   306,     8,     9,     0,     0,
+    12,    13,     0,   307,   308,   309,    14,     0,     0,     0,
+     0,   310,   311,   312,     0,     0,     0,     0,   313,     0,
+     0,    17,     0,    18,     0,     0,     0,     0,     0,    21,
+     0,   249,   250,     0,  -738,     0,   314,     0,    24,     0,
+   251,     0,     0,     0,     0,     0,     0,    27,     0,   129,
+   130,     0,   252,     0,     0,     0,   253,   254,   255,   256,
+   257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+   267,   268,   269,   270,   271,   272,   273,     0,     0,   274,
+   275,   276,     0,     0,   277,     0,   848,   278,   285,     8,
+     9,    10,     0,    12,   501,   287,   288,     0,   289,    14,
+     0,     0,     0,     0,   279,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    17,   290,    18,     0,    20,     0,
+   291,   292,    21,     0,   293,   294,   295,    22,   296,   297,
+     0,    24,     0,     0,     0,   298,   299,   300,   301,   302,
+    27,     0,    28,   303,     0,     0,     0,   304,     0,     0,
+     0,     0,     0,   305,     0,     0,   306,     0,     0,     0,
+     0,     0,     0,     0,   307,   308,   309,     0,     0,     0,
+     0,     0,   310,   311,   312,     0,     0,     0,   850,   313,
+   285,     8,     9,    10,     0,    12,   501,   287,   288,     0,
+   289,    14,     0,     0,     0,     0,     0,   314,     0,     0,
+     0,     0,     0,     0,     0,     0,    17,   290,    18,     0,
+    20,     0,   291,   292,    21,     0,   293,   294,   295,    22,
+   296,   297,     0,    24,     0,     0,     0,   298,   299,   300,
+   301,   302,    27,     0,    28,   303,     0,     0,     0,   304,
+     0,     0,     0,     0,     0,   305,     0,     0,   306,     0,
+     0,     0,     0,     0,     0,     0,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,   311,   312,     0,     0,     0,
+  1401,   313,   285,     8,     9,    10,     0,    12,   501,   287,
+   288,     0,   289,    14,     0,     0,     0,     0,     0,   314,
+     0,     0,     0,     0,     0,     0,     0,     0,    17,   290,
+    18,     0,    20,     0,   291,   292,    21,     0,   293,   294,
+   295,    22,   296,   297,     0,    24,     0,     0,     0,   298,
+   299,   300,   301,   302,    27,     0,    28,   303,     0,     0,
+     0,   304,     0,     0,     0,     0,     0,   305,     0,     0,
+   306,     0,     0,     0,     0,     0,     0,     0,   307,   308,
+   309,     0,     0,     0,     0,     0,   310,   311,   312,   285,
+     8,     9,    10,   313,    12,   501,   287,   288,     0,   289,
+    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   314,     0,     0,     0,    17,   290,    18,     0,    20,
+     0,   291,   292,    21,     0,   293,   294,   295,    22,   296,
+   297,     0,    24,     0,     0,     0,   298,   299,   300,   301,
+   302,    27,     0,    28,   303,     0,     0,     0,   304,     0,
+     0,     0,     0,     0,   305,     0,   925,   306,     7,     8,
+   926,    10,   134,    12,    13,   307,   308,   309,     0,    14,
+     0,     0,     0,   310,   311,   312,     0,     0,     0,     0,
+   313,     0,     0,     0,    17,     0,    18,    19,    20,     0,
+     0,     0,    21,  -487,     0,     0,     0,    22,   314,   807,
+     0,    24,   927,     0,   928,     0,     0,     0,     0,     0,
+    27,     0,    28,    29,     0,     0,   929,     0,   930,     0,
+     0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
+     0,     0,     0,     0,    33,     0,     0,     0,     0,    34,
+     0,     0,     0,  1232,  1233,  1234,    10,   134,    12,   286,
+   287,   288,     0,   289,    14,  1235,  -487,  1236,  1237,  1238,
+  1239,  1240,  1241,  1242,  1243,  1244,  1245,    15,    16,    17,
+   290,    18,    19,    20,     0,   291,   292,    21,     0,   293,
+   294,   295,    22,   296,   297,     0,    24,     0,     0,     0,
+   298,   299,   300,   301,   302,    27,     0,  1246,   303,   660,
+     0,  1247,   304,     0,     0,     0,     0,     0,   305,     0,
+     0,   306,     0,     0,     0,     0,     0,     0,     0,   307,
+   308,   309,     0,     0,     0,     0,     0,   310,   311,   312,
+     0,     0,     0,     0,   313,     0,  1248,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   709,     0,   709,     0,     0,     0,     0,   936,   943,   709,
-     0,     0,     0,     0,     0,     0,     0,    96,     0,     0,
-     0,     0,    18,     0,     0,     0,    96,    96,     0,    96,
-    96,  1347,   514,   515,   516,   517,   518,   519,   520,   521,
-   522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-   532,   533,   534,   535,   514,   515,   516,   517,   518,   519,
-   520,   521,   522,   523,   524,   525,   526,   527,   528,   529,
-   530,   531,   532,   533,   534,   535,     0,     0,     0,     0,
-   115,     0,     0,     0,     0,     0,     0,     0,   183,   216,
-   183,     0,  1317,     0,  1215,  1216,  1217,   129,    11,   275,
-   276,   277,   683,   278,    13,  1218,     0,  1219,  1220,  1221,
-  1222,  1223,  1224,  1225,  1226,  1227,  1228,    14,    15,    16,
-   279,    17,    18,    19,     0,   280,   281,    20,     0,   282,
-   283,   284,    21,   285,   286,     0,    23,     0,     0,     0,
-   287,   288,   289,   290,   291,    26,     0,  1229,    28,   635,
-     0,  1230,   292,   139,   143,     0,     0,     0,   293,     0,
-   683,   294,     0,    96,     0,     0,     0,  1033,     0,   297,
-   298,   299,     0,     0,     0,     0,     0,   300,   301,   302,
-     0,     0,     0,     0,   303,     0,  1231,     0,     0,     0,
-     0,     0,     0,     0,    96,    96,    96,     0,     0,     0,
-     0,  1318,   304,     0,     0,    96,     0,     0,  1033,  1033,
-  1033,     0,   514,   515,   516,   517,   518,   519,   520,   521,
-   522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-   532,   533,   534,   535,     0,     0,     0,     0,   183,     0,
+     0,  1347,   314,  1232,  1233,  1234,    10,   134,    12,   286,
+   287,   288,     0,   289,    14,  1235,     0,  1236,  1237,  1238,
+  1239,  1240,  1241,  1242,  1243,  1244,  1245,    15,    16,    17,
+   290,    18,    19,    20,     0,   291,   292,    21,     0,   293,
+   294,   295,    22,   296,   297,     0,    24,     0,     0,     0,
+   298,   299,   300,   301,   302,    27,     0,  1246,   303,   660,
+     0,  1247,   304,     0,     0,     0,     0,     0,   305,     0,
+     0,   306,     0,     0,     0,     0,     0,     0,     0,   307,
+   308,   309,     0,     0,     0,     0,     0,   310,   311,   312,
+     0,     0,     0,     0,   313,     0,  1248,     0,     0,  1232,
+  1233,  1234,    10,   134,    12,   286,   287,   288,     0,   289,
+    14,  1235,   314,  1236,  1237,  1238,  1239,  1240,  1241,  1242,
+  1243,  1244,  1245,    15,    16,    17,   290,    18,    19,    20,
+     0,   291,   292,    21,     0,   293,   294,   295,    22,   296,
+   297,     0,    24,     0,     0,     0,   298,   299,   300,   301,
+   302,    27,     0,  1246,   303,  1462,     0,  1247,   304,     0,
+     0,     0,     0,     0,   305,     0,     0,   306,     0,     0,
+     0,     0,     0,     0,     0,   307,   308,   309,     0,     0,
+     0,     0,     0,   310,   311,   312,     0,     0,     0,     0,
+   313,     0,  1248,     0,     0,  1232,  1233,  1234,    10,   134,
+    12,   286,   287,   288,     0,   289,    14,  1235,   314,  1236,
+  1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,    15,
+    16,    17,   290,    18,    19,    20,     0,   291,   292,    21,
+     0,   293,   294,   295,    22,   296,   297,     0,    24,     0,
+     0,     0,   298,   299,   300,   301,   302,    27,     0,  1246,
+   303,     0,     0,  1247,   304,     0,     0,     0,     0,     0,
+   305,     0,     0,   306,     0,     0,     0,     0,     0,     0,
+     0,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+   311,   312,     0,     0,     0,     0,   313,     0,  1248,   285,
+     8,     9,    10,   134,    12,   286,   287,   288,   673,   289,
+    14,     0,     0,     0,   314,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    17,   290,    18,    19,    20,
+     0,   291,   292,    21,     0,   293,   294,   295,    22,   296,
+   297,     0,    24,     0,   580,     0,   298,   299,   300,   301,
+   302,    27,     0,    28,   303,     0,     0,     0,   304,     0,
+     0,     0,     0,     0,   305,     0,     0,   834,     0,     0,
+     0,     0,     0,     0,     0,   307,   308,   835,     0,     0,
+     0,     0,     0,   310,   311,   312,     0,   583,     0,     0,
+   836,   585,     0,     0,   674,     7,     8,     9,    10,   134,
+    12,   286,   287,   288,   673,   289,    14,     0,   314,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   709,     0,     0,     0,     0,   498,  1367,     7,     8,
-     9,   129,    11,   275,   276,   277,   648,   278,    13,     0,
-     0,     0,     0,     0,     0,    96,     0,    96,     0,     0,
-     0,     0,     0,    16,   279,    17,    18,    19,    96,   280,
-   281,    20,     0,   282,   283,   284,    21,   285,   286,     0,
-    23,     0,   558,     0,   287,   288,   289,   290,   291,    26,
-     0,    27,    28,  -264,     0,     0,   292,     0,     0,     0,
-     0,     0,   293,     0,     0,   822,     0,     0,     0,     0,
-     0,   381,   383,   297,   298,   823,     0,     0,     0,   465,
-     0,   300,   301,   302,     0,   561,     0,     0,   824,   563,
-     0,     0,   649,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   304,   691,     0,     7,
-     8,   692,   129,    11,    12,     0,     0,     0,     0,    13,
-     0,   683,     0,     0,     0,  1179,     0,     0,     0,     0,
-  1179,     0,   709,     0,    16,     0,    17,    18,    19,     0,
-     0,     0,    20,  -472,     0,     0,     0,    21,    96,     0,
-     0,    23,   693,     0,   694,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,   695,     0,   696,     0,
-     0,     0,     0,     0,   624,   625,    30,   627,     6,     0,
-     7,     8,     9,    10,    11,    12,    31,     0,     0,     0,
-    13,     0,     0,     0,    32,     0,     0,     0,     0,    33,
-    96,    96,     0,    96,     0,    16,     0,    17,    18,     0,
-     0,     0,     0,    20,     0,     0,  -472,     0,    21,     0,
-     0,     0,    23,     0,     0,   398,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,     0,    29,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    30,     0,     0,
-   683,     0,     0,     0,     0,     0,  1264,    31,  -427,  -427,
-  -427,  -427,  -427,  -427,     0,    32,  -427,     0,  -427,     0,
-    33,     0,     0,     0,     0,     0,     0,     0,   683,  -427,
-  1314,  -427,  -427,     0,     0,     0,  -427,     0,     0,     0,
-     0,  -427,     0,     0,     0,    96,  -427,    96,     0,     0,
-  -427,     0,  -427,     0,     0,     0,     0,     0,     0,  -427,
-     0,  -427,  -427,  -427,  -427,  -427,     0,  -427,  -427,  -427,
-  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-     0,  -427,  -427,  -427,     0,  -427,  -427,  -427,  -427,  -427,
-  -427,     0,  -427,  -427,     0,     0,     0,     0,  1265,     0,
-     0,     0,     0,  -427,  -427,  -427,  1214,  -427,  1215,  1216,
-  1217,   129,    11,   275,   276,   277,     0,   278,    13,  1218,
-     0,  1219,  1220,  1221,  1222,  1223,  1224,  1225,  1226,  1227,
-  1228,    14,    15,    16,   279,    17,    18,    19,     0,   280,
-   281,    20,     0,   282,   283,   284,    21,   285,   286,     0,
-    23,     0,     0,     0,   287,   288,   289,   290,   291,    26,
-     0,  1229,    28,   635,     0,  1230,   292,     0,     0,     0,
-     0,     0,   293,     0,     0,   294,     0,     0,     0,     0,
-     0,     0,     0,   297,   298,   299,     0,     0,     0,     0,
-     0,   300,   301,   302,     0,     0,     0,     0,   303,   498,
-  1231,     7,     8,     9,   129,    11,   275,   276,   277,   648,
-   278,    13,     0,     0,     0,     0,   304,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   279,    17,    18,
-    19,     0,   280,   281,    20,     0,   282,   283,   284,    21,
-   285,   286,     0,    23,     0,   558,     0,   287,   288,   289,
-   290,   291,    26,     0,    27,    28,  -264,     0,     0,   292,
-     0,     0,     0,     0,     0,   293,     0,     0,  1051,     0,
-     0,     0,     0,     0,     0,     0,   297,   298,  1052,     0,
-     0,     0,     0,     0,   300,   301,   302,     0,   561,     0,
-     0,  1053,   563,     0,   647,   649,     7,     8,     9,   129,
-    11,   275,   276,   277,   648,   278,    13,     0,     0,   304,
+     0,    17,   290,    18,    19,    20,     0,   291,   292,    21,
+     0,   293,   294,   295,    22,   296,   297,     0,    24,     0,
+   580,     0,   298,   299,   300,   301,   302,    27,     0,    28,
+    29,     0,     0,     0,   304,     0,     0,     0,     0,     0,
+   305,     0,     0,  1051,     0,     0,     0,     0,     0,     0,
+     0,   307,   308,  1052,     0,     0,     0,     0,     0,   310,
+   311,   312,     0,   583,     0,     0,  1053,   585,     0,     0,
+   674,   285,     8,     9,    10,     0,    12,   286,   287,   288,
+     0,   289,    14,     0,   314,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    17,   290,    18,
+     0,    20,     0,   291,   292,    21,     0,   293,   294,   295,
+    22,   296,   297,     0,    24,     0,     0,     0,   298,   299,
+   300,   301,   302,    27,     0,    28,   303,     0,     0,     0,
+   304,     0,     0,     0,     0,     0,   305,     0,     0,   306,
+     0,     0,     0,     0,   339,     0,   340,   307,   308,   309,
+     0,     0,     0,     0,     0,   310,   311,   312,   285,     8,
+     9,    10,   313,    12,   286,   287,   288,     0,   289,    14,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   279,    17,    18,    19,     0,   280,   281,    20,
-     0,   282,   283,   284,    21,   285,   286,     0,    23,     0,
-     0,     0,   287,   288,   289,   290,   291,    26,     0,    27,
-    28,     0,     0,     0,   292,     0,     0,     0,     0,     0,
-   293,     0,     0,   294,     0,     0,     0,     0,     0,     0,
-     0,   297,   298,   299,     0,     0,     0,     0,     0,   300,
-   301,   302,     0,     0,     0,     0,   303,     0,     0,   758,
-   649,     7,     8,     9,   129,    11,   275,   276,   277,     0,
-   278,    13,  -730,     0,   304,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   279,    17,    18,
-    19,     0,   280,   281,    20,     0,   282,   283,   284,    21,
-   285,   286,     0,    23,     0,     0,     0,   287,   288,   289,
-   290,   291,    26,     0,    27,    28,  1379,     0,  -720,   292,
-     0,     0,     0,     0,     0,   293,     0,     0,   294,     0,
-     0,     0,     0,     0,     0,     0,   297,   298,   299,     0,
-     0,     0,     0,     0,   300,   301,   302,     0,     0,     0,
-   638,   303,   746,   747,   748,     0,    11,   480,   276,   277,
-     0,   278,    13,     0,     0,     0,     0,     0,     0,   304,
-     0,     0,     0,     0,     0,     0,     0,    16,   279,    17,
-     0,    19,     0,   280,   281,    20,     0,   282,   283,   284,
-    21,   285,   286,     0,    23,     0,     0,     0,   287,   288,
-   289,   290,   291,    26,     0,   749,   750,   639,     0,     0,
-   292,     0,     0,     0,     0,     0,   293,     0,     0,   294,
-     0,     0,     0,     0,     0,     0,     0,   297,   298,   299,
-     0,     0,     0,     0,     0,   300,   301,   302,     0,     0,
-     0,     0,   303,   751,   638,     0,   746,   747,   748,     0,
-    11,   480,   276,   277,     0,   278,    13,     0,     0,   876,
-   304,     0,     0,  1104,     0,     0,     0,     0,     0,     0,
-     0,    16,   279,    17,     0,    19,     0,   280,   281,    20,
-     0,   282,   283,   284,    21,   285,   286,     0,    23,     0,
-     0,     0,   287,   288,   289,   290,   291,    26,     0,   749,
-   750,   639,     0,     0,   292,     0,     0,     0,     0,     0,
-   293,     0,     0,   294,     0,     0,     0,     0,     0,     0,
-     0,   297,   298,   299,     0,     0,     0,     0,     0,   300,
-   301,   302,     0,     0,     0,     0,   303,   638,     0,   746,
-   747,   748,     0,    11,   480,   276,   277,     0,   278,    13,
-     0,     0,     0,  -431,   304,     0,  1104,     0,     0,     0,
-     0,     0,     0,     0,    16,   279,    17,     0,    19,     0,
-   280,   281,    20,     0,   282,   283,   284,    21,   285,   286,
-     0,    23,     0,     0,     0,   287,   288,   289,   290,   291,
-    26,     0,   749,   750,   639,     0,     0,   292,     0,     0,
-     0,     0,     0,   293,     0,     0,   294,     0,     0,     0,
-     0,     0,     0,     0,   297,   298,   299,     0,     0,     0,
-     0,     0,   300,   301,   302,     0,     0,     0,   638,   303,
-   746,   747,   748,     0,    11,   480,   276,   277,     0,   278,
-    13,     0,     0,     0,     0,     0,  1147,   304,     0,     0,
-     0,     0,     0,     0,     0,    16,   279,    17,     0,    19,
-     0,   280,   281,    20,     0,   282,   283,   284,    21,   285,
-   286,     0,    23,     0,     0,     0,   287,   288,   289,   290,
-   291,    26,     0,   749,   750,   639,     0,     0,   292,     0,
-     0,     0,     0,     0,   293,     0,     0,   294,     0,     0,
-     0,     0,     0,     0,     0,   297,   298,   299,     0,     0,
-     0,     0,     0,   300,   301,   302,     0,     0,     0,     0,
-   303,   751,   638,     0,     7,     8,     9,     0,    11,   480,
-   276,   277,     0,   278,    13,     0,     0,     0,   304,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   279,    17,     0,    19,     0,   280,   281,    20,     0,   282,
-   283,   284,    21,   285,   286,     0,    23,     0,     0,     0,
-   287,   288,   289,   290,   291,    26,     0,    27,    28,   639,
-     0,     0,   292,     0,     0,     0,     0,     0,   293,     0,
-     0,   294,     0,     0,     0,     0,     0,     0,     0,   297,
-   298,   299,     0,     0,     0,     0,     0,   300,   301,   302,
-     0,     0,     0,   498,   303,     7,     8,     9,     0,    11,
-   275,   276,   277,  1151,   278,    13,     0,     0,     0,     0,
-     0,     0,   304,     0,     0,     0,     0,     0,     0,     0,
-    16,   279,    17,     0,    19,     0,   280,   281,    20,     0,
-   282,   283,   284,    21,   285,   286,     0,    23,     0,     0,
-     0,   287,   288,   289,   290,   291,    26,     0,    27,    28,
-  -264,     0,     0,   292,     0,     0,     0,     0,     0,   293,
-     0,     0,   499,     0,     0,     0,     0,     0,     0,     0,
-   297,   298,   500,     0,     0,     0,     0,     0,   300,   301,
-   302,     0,     0,     0,   638,   501,     7,     8,     9,     0,
-    11,   480,   276,   277,     0,   278,    13,     0,     0,     0,
-     0,     0,     0,   304,     0,     0,     0,     0,     0,     0,
-     0,    16,   279,    17,     0,    19,     0,   280,   281,    20,
-     0,   282,   283,   284,    21,   285,   286,     0,    23,     0,
-     0,     0,   287,   288,   289,   290,   291,    26,     0,    27,
-    28,   639,     0,     0,   292,     0,     0,     0,     0,     0,
-   293,     0,     0,   294,     0,     0,     0,     0,     0,     0,
-     0,   297,   298,   299,     0,     0,     0,     0,     0,   300,
-   301,   302,     0,     0,     0,   758,   303,     7,     8,     9,
-     0,    11,   480,   276,   277,     0,   278,    13,     0,     0,
-     0,     0,     0,     0,   304,     0,     0,     0,     0,     0,
-     0,     0,    16,   279,    17,     0,    19,     0,   280,   281,
-    20,     0,   282,   283,   284,    21,   285,   286,     0,    23,
-     0,     0,     0,   287,   288,   289,   290,   291,    26,     0,
-    27,    28,     0,     0,     0,   292,  -720,     0,     0,     0,
-     0,   293,     0,     0,   294,     0,     0,     0,     0,     0,
-     0,     0,   297,   298,   299,     0,     0,     0,     0,     0,
-   300,   301,   302,     0,     0,     0,   498,   303,     7,     8,
-     9,     0,    11,   275,   276,   277,     0,   278,    13,     0,
-     0,     0,     0,     0,     0,   304,     0,     0,     0,     0,
-     0,     0,     0,    16,   279,    17,     0,    19,     0,   280,
-   281,    20,     0,   282,   283,   284,    21,   285,   286,     0,
-    23,     0,     0,     0,   287,   288,   289,   290,   291,    26,
-     0,    27,    28,  -264,     0,     0,   292,     0,     0,     0,
-     0,     0,   293,     0,     0,  1356,     0,     0,     0,     0,
-     0,     0,     0,   297,   298,  1357,     0,     0,     0,     0,
-     0,   300,   301,   302,     0,     0,     0,  1446,  1358,     7,
-     8,     9,     0,    11,   275,   276,   277,     0,   278,    13,
-     0,     0,     0,     0,     0,     0,   304,     0,     0,     0,
-     0,     0,     0,     0,    16,   279,    17,     0,    19,     0,
-   280,   281,    20,     0,   282,   283,   284,    21,   285,   286,
-     0,    23,     0,     0,     0,   287,   288,   289,   290,   291,
-    26,     0,    27,    28,     0,     0,  -163,   292,     0,     0,
-     0,     0,     0,   293,     0,     0,   294,     0,     0,     0,
-     0,     0,     0,     0,   297,   298,   299,     0,     0,     0,
-     0,     0,   300,   301,   302,     0,     0,     0,   758,   303,
-     7,     8,     9,     0,    11,   480,   276,   277,     0,   278,
-    13,     0,     0,     0,     0,     0,     0,   304,     0,     0,
-     0,     0,     0,     0,     0,    16,   279,    17,     0,    19,
-     0,   280,   281,    20,     0,   282,   283,   284,    21,   285,
-   286,     0,    23,     0,     0,     0,   287,   288,   289,   290,
-   291,    26,     0,    27,    28,     0,     0,     0,   292,     0,
-     0,     0,     0,     0,   293,     0,     0,   294,     0,     0,
-     0,     0,     0,     0,     0,   297,   298,   299,     0,     0,
-     0,     0,     0,   300,   301,   302,     0,     0,     0,   836,
-   303,     7,     8,     9,     0,    11,   480,   276,   277,     0,
-   278,    13,     0,     0,     0,     0,  -720,     0,   304,     0,
-     0,     0,     0,     0,     0,     0,    16,   279,    17,     0,
-    19,     0,   280,   281,    20,     0,   282,   283,   284,    21,
-   285,   286,     0,    23,     0,     0,     0,   287,   288,   289,
-   290,   291,    26,     0,    27,    28,     0,     0,     0,   292,
-     0,     0,     0,     0,     0,   293,     0,     0,   294,     0,
-     0,     0,     0,     0,     0,     0,   297,   298,   299,     0,
-     0,     0,     0,     0,   300,   301,   302,     0,     0,     0,
-   838,   303,     7,     8,     9,     0,    11,   480,   276,   277,
-     0,   278,    13,     0,     0,     0,     0,     0,     0,   304,
-     0,     0,     0,     0,     0,     0,     0,    16,   279,    17,
-     0,    19,     0,   280,   281,    20,     0,   282,   283,   284,
-    21,   285,   286,     0,    23,     0,     0,     0,   287,   288,
-   289,   290,   291,    26,     0,    27,    28,     0,     0,     0,
-   292,     0,     0,     0,     0,     0,   293,     0,     0,   294,
-     0,     0,     0,     0,     0,     0,     0,   297,   298,   299,
-     0,     0,     0,     0,     0,   300,   301,   302,     0,     0,
-     0,  1331,   303,     7,     8,     9,     0,    11,   480,   276,
-   277,     0,   278,    13,     0,     0,     0,     0,     0,     0,
-   304,     0,     0,     0,     0,     0,     0,     0,    16,   279,
-    17,     0,    19,     0,   280,   281,    20,     0,   282,   283,
-   284,    21,   285,   286,     0,    23,     0,     0,     0,   287,
-   288,   289,   290,   291,    26,     0,    27,    28,     0,     0,
-     0,   292,     0,     0,     0,     0,     0,   293,     0,     0,
-   294,     0,     0,     0,     0,     0,     0,     0,   297,   298,
-   299,     0,     0,     0,     0,     0,   300,   301,   302,     0,
-     7,     8,     9,   303,    11,   480,   276,   277,     0,   278,
-    13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   304,     0,     0,     0,    16,   279,    17,     0,    19,
-     0,   280,   281,    20,     0,   282,   283,   284,    21,   285,
-   286,     0,    23,     0,     0,     0,   287,   288,   289,   290,
-   291,    26,     0,    27,    28,     0,     0,     0,   292,     0,
-     0,     0,     0,     0,   293,     0,     0,   294,     0,     0,
-     0,     0,     0,     0,     0,   297,   298,   299,     0,     0,
-     0,     0,     0,   300,   301,   302,     0,     0,     0,     0,
-   303,   519,   520,   521,   522,   523,   524,   525,   526,   527,
-   528,   529,   530,   531,   532,   533,   534,   535,   304,   797,
-  1215,  1216,  1217,   129,    11,   275,   276,   277,     0,   278,
-    13,  1218,     0,  1219,  1220,  1221,  1222,  1223,  1224,  1225,
-  1226,  1227,  1228,    14,    15,    16,   279,    17,    18,    19,
-     0,   280,   281,    20,     0,   282,   283,   284,    21,   285,
-   286,     0,    23,     0,     0,     0,   287,   288,   289,   290,
-   291,    26,     0,  1229,    28,   635,     0,  1230,   292,     0,
-     0,     0,     0,     0,   293,     0,     0,   294,     0,     0,
-     0,     0,     0,     0,     0,   297,   298,   299,     0,     0,
-     0,     0,     0,   300,   301,   302,     0,     0,     0,     0,
-   303,     0,  1231,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  1322,   304,  1215,
-  1216,  1217,   129,    11,   275,   276,   277,     0,   278,    13,
-  1218,     0,  1219,  1220,  1221,  1222,  1223,  1224,  1225,  1226,
-  1227,  1228,    14,    15,    16,   279,    17,    18,    19,     0,
-   280,   281,    20,     0,   282,   283,   284,    21,   285,   286,
-     0,    23,     0,     0,     0,   287,   288,   289,   290,   291,
-    26,     0,  1229,    28,   635,     0,  1230,   292,     0,     0,
-     0,     0,     0,   293,     0,     0,   294,     0,     0,     0,
-     0,     0,     0,     0,   297,   298,   299,     0,     0,     0,
-     0,     0,   300,   301,   302,     0,     0,     0,     0,   303,
-     0,  1231,     0,     0,     0,  1215,  1216,  1217,   129,    11,
-   275,   276,   277,     0,   278,    13,  1218,   304,  1219,  1220,
-  1221,  1222,  1223,  1224,  1225,  1226,  1227,  1228,    14,    15,
-    16,   279,    17,    18,    19,     0,   280,   281,    20,     0,
-   282,   283,   284,    21,   285,   286,     0,    23,     0,     0,
-     0,   287,   288,   289,   290,   291,    26,     0,  1229,    28,
-  1423,     0,  1230,   292,     0,     0,     0,     0,     0,   293,
-     0,     0,   294,     0,     0,     0,     0,     0,     0,     0,
-   297,   298,   299,     0,     0,     0,     0,     0,   300,   301,
-   302,     0,     0,     0,     0,   303,     0,  1231,     0,     0,
-     0,  1215,  1216,  1217,   129,    11,   275,   276,   277,     0,
-   278,    13,  1218,   304,  1219,  1220,  1221,  1222,  1223,  1224,
-  1225,  1226,  1227,  1228,    14,    15,    16,   279,    17,    18,
-    19,     0,   280,   281,    20,     0,   282,   283,   284,    21,
-   285,   286,     0,    23,     0,     0,     0,   287,   288,   289,
-   290,   291,    26,     0,  1229,    28,     0,     0,  1230,   292,
-     0,     0,     0,     0,     0,   293,     0,     0,   294,     0,
-     0,     0,     0,     0,     0,     0,   297,   298,   299,     0,
-     0,     0,     0,     0,   300,   301,   302,     0,     0,     0,
-     0,   303,     0,  1231,     7,     8,     9,   129,    11,   275,
-   276,   277,   648,   278,    13,     0,     0,     0,     0,   304,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   279,    17,    18,    19,     0,   280,   281,    20,     0,   282,
-   283,   284,    21,   285,   286,     0,    23,     0,   558,     0,
-   287,   288,   289,   290,   291,    26,     0,    27,    28,     0,
-     0,     0,   292,     0,     0,     0,     0,     0,   293,     0,
-     0,   822,     0,     0,     0,     0,     0,     0,     0,   297,
-   298,   823,     0,     0,     0,     0,     0,   300,   301,   302,
-     0,   561,     0,     0,   824,   563,     0,     0,   649,     7,
-     8,     9,   129,    11,   275,   276,   277,   648,   278,    13,
-     0,     0,   304,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    16,   279,    17,    18,    19,     0,
-   280,   281,    20,     0,   282,   283,   284,    21,   285,   286,
-     0,    23,     0,   558,     0,   287,   288,   289,   290,   291,
-    26,     0,    27,    28,     0,     0,     0,   292,     0,     0,
-     0,     0,     0,   293,     0,     0,  1051,     0,     0,     0,
-     0,     0,     0,     0,   297,   298,  1052,     0,     0,     0,
-     0,     0,   300,   301,   302,     0,   561,     0,     0,  1053,
-   563,     0,     0,   649,     7,     8,     9,     0,    11,   275,
-   276,   277,     0,   278,    13,     0,     0,   304,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   279,    17,     0,    19,     0,   280,   281,    20,     0,   282,
-   283,   284,    21,   285,   286,     0,    23,     0,     0,     0,
-   287,   288,   289,   290,   291,    26,     0,    27,    28,     0,
-     0,     0,   292,     0,     0,     0,     0,     0,   293,     0,
-     0,   294,     0,     0,     0,     0,   295,     0,   296,   297,
-   298,   299,     0,     0,     0,     0,     0,   300,   301,   302,
-     0,     7,     8,     9,   303,    11,   275,   276,   277,     0,
-   278,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   304,     0,     0,     0,    16,   279,    17,     0,
-    19,     0,   280,   281,    20,     0,   282,   283,   284,    21,
-   285,   286,     0,    23,     0,   558,     0,   287,   288,   289,
-   290,   291,    26,     0,    27,    28,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   293,     0,     0,   822,     0,
-     0,     0,     0,     0,     0,     0,   297,   298,   823,     0,
-     0,     0,     0,     0,   300,   301,   302,     0,   561,     0,
-     0,   824,   563,     7,     8,     9,     0,    11,   275,   276,
-   277,     0,   278,    13,     0,     0,     0,     0,     0,   304,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   279,
-    17,     0,    19,     0,   280,   281,    20,     0,   282,   283,
-   284,    21,   285,   286,     0,    23,     0,   558,     0,   287,
-   288,   289,   290,   291,    26,     0,    27,    28,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   293,     0,     0,
-  1051,     0,     0,     0,     0,     0,     0,     0,   297,   298,
-  1052,     0,     0,     0,     0,     0,   300,   301,   302,     0,
-   561,     0,     0,  1053,   563,     7,     8,     9,     0,    11,
-   480,   276,   277,     0,   278,    13,     0,     0,     0,     0,
-     0,   304,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,   279,    17,     0,    19,     0,   280,   281,    20,     0,
-   282,   283,   284,    21,   285,   286,     0,    23,     0,     0,
-     0,   287,   288,   289,   290,   291,    26,     0,    27,    28,
-     0,     0,  1299,   292,     0,     0,     0,     0,     0,   293,
-     0,     0,   294,     0,     0,     0,     0,     0,     0,     0,
-   297,   298,   299,     0,     0,     0,     0,     0,   300,   301,
-   302,     0,     0,     0,     0,   303,     7,     8,     9,   129,
-    11,   275,   276,   277,     0,   278,    13,     0,     0,     0,
-     0,     0,     0,   304,     0,     0,     0,     0,     0,     0,
-     0,    16,   279,    17,    18,    19,     0,   280,   281,    20,
-     0,   282,   283,   284,    21,   285,   286,     0,    23,     0,
-     0,     0,   287,   288,   289,   290,   291,    26,     0,    27,
-    28,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   293,     0,     0,   294,     0,     0,     0,     0,     0,     0,
-     0,   297,   298,   299,     0,     0,     0,     0,     0,   300,
-   301,   302,     0,     7,     8,     9,   303,    11,   275,   276,
-   277,     0,   278,    13,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   304,     0,     0,     0,    16,   279,
-    17,     0,    19,     0,   280,   281,    20,     0,   282,   283,
-   284,    21,   285,   286,     0,    23,     0,     0,     0,   287,
-   288,   289,   290,   291,    26,     0,    27,    28,     0,     0,
-     0,   292,     0,     0,     0,     0,     0,   293,     0,     0,
-   294,     0,     0,     0,     0,     0,     0,     0,   297,   298,
-   299,     0,     0,     0,     0,     0,   300,   301,   302,     0,
-     7,     8,     9,   303,    11,   480,   276,   277,     0,   278,
-    13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   304,     0,     0,     0,    16,   279,    17,     0,    19,
-     0,   280,   281,    20,     0,   282,   283,   284,    21,   285,
-   286,     0,    23,     0,     0,     0,   287,   288,   289,   290,
-   291,    26,     0,    27,    28,     0,     0,     0,   292,     0,
-     0,     0,     0,     0,   293,     0,     0,   294,     0,     0,
-     0,     0,     0,     0,     0,   297,   298,   299,     0,     0,
-     0,     0,     0,   300,   301,   302,     0,     7,     8,     9,
-   303,    11,   480,   276,   277,     0,   278,    13,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   304,     0,
-     0,     0,    16,   279,    17,     0,    19,     0,   280,   281,
-    20,     0,   282,   283,   284,    21,   285,   286,     0,    23,
-     0,     0,     0,   287,   288,   289,   290,   291,    26,     0,
-    27,    28,   511,     0,     0,     0,     0,     0,     0,     0,
-     0,   293,     0,     0,   294,     0,     0,     0,     0,     0,
-     0,     0,   297,   298,   299,     0,     0,     0,     0,     0,
-   300,   301,   302,     0,     7,     8,     9,   512,    11,   480,
-   276,   277,     0,   278,    13,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   304,     0,     0,     0,    16,
-   279,    17,     0,    19,     0,   280,   281,    20,     0,   282,
-   283,   284,    21,   285,   286,     0,    23,     0,     0,     0,
-   287,   288,   289,   290,   291,    26,     0,    27,    28,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
-     0,   294,     0,     0,     0,     0,     0,     0,     0,   297,
-   298,   299,     0,     0,     0,     0,     0,   300,   301,   302,
-     0,     0,     0,     0,   303,   548,     7,     8,     9,     0,
-    11,   480,   276,   277,     0,   278,    13,     0,     0,     0,
-     0,     0,   304,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   279,    17,     0,    19,     0,   280,   281,    20,
-     0,   282,   283,   284,    21,   285,   286,     0,    23,     0,
-     0,     0,   287,   288,   289,   290,   291,    26,     0,    27,
-    28,     0,     0,     0,   292,     0,     0,     0,     0,     0,
-   293,     0,     0,   499,     0,     0,     0,     0,     0,     0,
-     0,   297,   298,   500,     0,     0,     0,     0,     0,   300,
-   301,   302,     0,  1023,     8,     9,   501,    11,   480,   276,
-   277,     0,   278,    13,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   304,     0,     0,     0,    16,   279,
-    17,     0,    19,     0,   280,   281,    20,     0,   282,   283,
-   284,    21,   285,   286,     0,    23,     0,     0,     0,   287,
-   288,   289,   290,   291,    26,     0,    27,    28,     0,     0,
-     0,   292,     0,     0,     0,     0,     0,   293,     0,     0,
-   294,     0,     0,     0,     0,     0,     0,     0,   297,   298,
-   299,     0,     0,     0,     0,     0,   300,   301,   302,     0,
-     7,     8,     9,   303,    11,   480,   276,   277,     0,   278,
-    13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   304,     0,     0,     0,    16,   279,    17,     0,    19,
-     0,   280,   281,    20,     0,   282,   283,   284,    21,   285,
-   286,     0,    23,     0,     0,     0,   287,   288,   289,   290,
-   291,    26,     0,    27,    28,     0,     0,     0,   292,     0,
-     0,     0,     0,     0,   293,     0,     0,  1356,     0,     0,
-     0,     0,     0,     0,     0,   297,   298,  1357,     0,     0,
-     0,     0,     0,   300,   301,   302,     0,     7,     8,     9,
-  1358,    11,   480,   276,   277,     0,   278,    13,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   304,     0,
-     0,     0,    16,   279,    17,     0,    19,     0,   280,   281,
-    20,     0,   282,   283,   284,    21,   285,   286,     0,    23,
-     0,     0,     0,   287,   288,   289,   290,   291,    26,     0,
-    27,    28,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   293,     0,     0,   294,     0,     0,     0,     0,     0,
-     0,     0,   297,   298,   299,     0,     0,     0,     0,     0,
-   300,   301,   302,     0,     7,     8,     9,   481,    11,   480,
-   276,   277,     0,   278,    13,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   304,     0,     0,     0,    16,
-   279,    17,     0,    19,     0,   280,   281,    20,     0,   282,
-   283,   284,    21,   285,   286,     0,    23,     0,     0,     0,
-   287,   288,   289,   290,   291,    26,     0,    27,    28,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
-     0,   294,     0,     0,     0,     0,     0,     0,     0,   297,
-   298,   299,     0,     0,     0,     0,     0,   300,   301,   302,
-     0,     7,     8,     9,   484,    11,   480,   276,   277,     0,
-   278,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   304,     0,     0,     0,    16,   279,    17,     0,
-    19,     0,   280,   281,    20,     0,   282,   283,   284,    21,
-   285,   286,     0,    23,     0,     0,     0,   287,   288,   289,
-   290,   291,    26,     0,    27,    28,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   293,     0,     0,   294,     0,
-     0,     0,     0,     0,     0,     0,   297,   298,   299,     0,
-     0,     0,     0,     0,   300,   301,   302,     0,     7,     8,
-     9,   303,    11,   480,   276,   277,     0,   278,    13,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   304,
-     0,     0,     0,    16,   279,    17,     0,    19,     0,   280,
-   281,    20,     0,   282,   283,   284,    21,   285,   286,     0,
-    23,     0,     0,     0,   287,   288,   289,   290,   291,    26,
-     0,    27,    28,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   293,     0,     0,   499,     0,     0,     0,     0,
-     0,     0,     0,   297,   298,   500,     0,     0,     0,     0,
-     0,   300,   301,   302,     0,     7,     8,     9,   501,    11,
-   275,   276,   277,     0,   278,    13,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   304,     0,     0,     0,
-    16,   279,    17,     0,    19,     0,   280,   281,    20,     0,
-   282,   283,   284,    21,   285,   286,     0,    23,     0,     0,
-     0,   287,   288,   289,   290,   291,    26,     0,    27,    28,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   293,
-     0,     6,  1356,     7,     8,     9,    10,    11,    12,     0,
-   297,   298,  1357,    13,     0,     0,     0,     0,   300,   301,
-   302,     0,     0,     0,     0,  1358,    14,    15,    16,     0,
-    17,    18,    19,     0,     0,     0,    20,     0,     0,     0,
-     0,    21,     0,   304,    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,   160,     0,     7,     8,     9,    10,    11,    12,     0,
-    31,     0,     0,    13,     0,     0,     0,     0,    32,     0,
-     0,     0,     0,    33,     0,     0,    14,    15,    16,    34,
-    17,    18,    19,     0,     0,     0,    20,     0,     0,     0,
-     0,    21,     0,     0,    22,    23,    24,     0,    25,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-    29,     0,     0,     0,     7,     8,     9,   129,    11,    12,
-    30,     0,   891,     0,    13,     0,     0,     0,     0,     0,
-    31,     0,     0,     0,     0,     0,     0,     0,    32,    16,
-     0,    17,    18,    33,     0,     0,     0,    20,     0,    34,
-     0,     0,    21,     0,     0,     0,    23,     0,     0,   926,
-     8,   692,   186,    11,   187,    26,     0,    27,    28,    13,
+   314,     0,     0,     0,    17,   290,    18,     0,    20,     0,
+   291,   292,    21,     0,   293,   294,   295,    22,   296,   297,
+     0,    24,     0,   580,     0,   298,   299,   300,   301,   302,
+    27,     0,    28,   303,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   305,     0,     0,   834,     0,     0,     0,
+     0,     0,     0,     0,   307,   308,   835,     0,     0,     0,
+     0,     0,   310,   311,   312,     0,   583,     0,     0,   836,
+   585,     7,     8,     9,    10,     0,    12,   286,   287,   288,
+     0,   289,    14,     0,     0,     0,     0,   314,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    17,   290,    18,
+     0,    20,     0,   291,   292,    21,     0,   293,   294,   295,
+    22,   296,   297,     0,    24,     0,   580,     0,   298,   299,
+   300,   301,   302,    27,     0,    28,    29,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   305,     0,     0,  1051,
+     0,     0,     0,     0,     0,     0,     0,   307,   308,  1052,
+     0,     0,     0,     0,     0,   310,   311,   312,     0,   583,
+     0,     0,  1053,   585,   285,     8,     9,    10,     0,    12,
+   501,   287,   288,     0,   289,    14,     0,     0,     0,     0,
+   314,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    17,   290,    18,     0,    20,     0,   291,   292,    21,     0,
+   293,   294,   295,    22,   296,   297,     0,    24,     0,     0,
+     0,   298,   299,   300,   301,   302,    27,     0,    28,   303,
+     0,     0,  1324,   304,     0,     0,     0,     0,     0,   305,
+     0,     0,   306,     0,     0,     0,     0,     0,     0,     0,
+   307,   308,   309,     0,     0,     0,     0,     0,   310,   311,
+   312,     0,     0,     0,     0,   313,   285,     8,     9,    10,
+   134,    12,   286,   287,   288,     0,   289,    14,     0,     0,
+     0,     0,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,     0,    17,   290,    18,    19,    20,     0,   291,   292,
+    21,     0,   293,   294,   295,    22,   296,   297,     0,    24,
+     0,     0,     0,   298,   299,   300,   301,   302,    27,     0,
+    28,   303,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   305,     0,     0,   306,     0,     0,     0,     0,     0,
+     0,     0,   307,   308,   309,     0,     0,     0,     0,     0,
+   310,   311,   312,   285,     8,     9,    10,   313,    12,   286,
+   287,   288,     0,   289,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   314,     0,     0,     0,    17,
+   290,    18,     0,    20,     0,   291,   292,    21,     0,   293,
+   294,   295,    22,   296,   297,     0,    24,     0,     0,     0,
+   298,   299,   300,   301,   302,    27,     0,    28,   303,     0,
+     0,     0,   304,     0,     0,     0,     0,     0,   305,     0,
+     0,   306,     0,     0,     0,     0,     0,     0,     0,   307,
+   308,   309,     0,     0,     0,     0,     0,   310,   311,   312,
+   285,     8,     9,    10,   313,    12,   501,   287,   288,     0,
+   289,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   314,     0,     0,     0,    17,   290,    18,     0,
+    20,     0,   291,   292,    21,     0,   293,   294,   295,    22,
+   296,   297,     0,    24,     0,     0,     0,   298,   299,   300,
+   301,   302,    27,     0,    28,   303,     0,     0,     0,   304,
+     0,     0,     0,     0,     0,   305,     0,     0,   306,     0,
+     0,     0,     0,     0,     0,     0,   307,   308,   309,     0,
+     0,     0,     0,     0,   310,   311,   312,   285,     8,     9,
+    10,   313,    12,   501,   287,   288,     0,   289,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   314,
+     0,     0,     0,    17,   290,    18,     0,    20,     0,   291,
+   292,    21,     0,   293,   294,   295,    22,   296,   297,     0,
+    24,     0,     0,     0,   298,   299,   300,   301,   302,    27,
+     0,    28,   303,   532,     0,     0,     0,     0,     0,     0,
+     0,     0,   305,     0,     0,   306,     0,     0,     0,     0,
+     0,     0,     0,   307,   308,   309,     0,     0,     0,     0,
+     0,   310,   311,   312,   285,     8,     9,    10,   533,    12,
+   501,   287,   288,     0,   289,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   314,     0,     0,     0,
+    17,   290,    18,     0,    20,     0,   291,   292,    21,     0,
+   293,   294,   295,    22,   296,   297,     0,    24,     0,     0,
+     0,   298,   299,   300,   301,   302,    27,     0,    28,   303,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   305,
+     0,     0,   306,     0,     0,     0,     0,     0,     0,     0,
+   307,   308,   309,     0,     0,     0,     0,     0,   310,   311,
+   312,     0,     0,     0,     0,   313,   569,   285,     8,     9,
+    10,     0,    12,   501,   287,   288,     0,   289,    14,     0,
+     0,     0,     0,   314,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    17,   290,    18,     0,    20,     0,   291,
+   292,    21,     0,   293,   294,   295,    22,   296,   297,     0,
+    24,     0,     0,     0,   298,   299,   300,   301,   302,    27,
+     0,    28,   303,     0,     0,     0,   304,     0,     0,     0,
+     0,     0,   305,     0,     0,   520,     0,     0,     0,     0,
+     0,     0,     0,   307,   308,   521,     0,     0,     0,     0,
+     0,   310,   311,   312,  1023,     8,     9,    10,   522,    12,
+   501,   287,   288,     0,   289,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   314,     0,     0,     0,
+    17,   290,    18,     0,    20,     0,   291,   292,    21,     0,
+   293,   294,   295,    22,   296,   297,     0,    24,     0,     0,
+     0,   298,   299,   300,   301,   302,    27,     0,    28,   303,
+     0,     0,     0,   304,     0,     0,     0,     0,     0,   305,
+     0,     0,   306,     0,     0,     0,     0,     0,     0,     0,
+   307,   308,   309,     0,     0,     0,     0,     0,   310,   311,
+   312,     7,     8,     9,    10,   313,    12,   501,   287,   288,
+     0,   289,    14,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   314,     0,     0,     0,    17,   290,    18,
+     0,    20,     0,   291,   292,    21,     0,   293,   294,   295,
+    22,   296,   297,     0,    24,     0,     0,     0,   298,   299,
+   300,   301,   302,    27,     0,    28,    29,     0,     0,     0,
+   304,     0,     0,     0,     0,     0,   305,     0,     0,  1388,
+     0,     0,     0,     0,     0,     0,     0,   307,   308,  1389,
+     0,     0,     0,     0,     0,   310,   311,   312,   285,     8,
+     9,    10,  1390,    12,   501,   287,   288,     0,   289,    14,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    30,     0,     0,    16,     0,    17,    18,     0,     0,
-     0,    31,    20,     0,     0,     0,     0,    21,     0,    32,
-     0,    23,     0,     0,    33,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,     0,     0,   928,     0,
-     7,     8,     9,   186,    11,   187,    30,     0,     0,     0,
-    13,     0,     0,     0,     0,     0,    31,     0,     0,     0,
-     0,     0,     0,     0,    32,    16,     0,    17,    18,    33,
-     0,     0,     0,    20,     0,     0,     0,     0,    21,     0,
-     0,     0,    23,     0,     0,     7,     8,     9,   129,    11,
-    12,    26,     0,    27,    28,    13,     0,  1312,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    30,     0,     0,
-    16,     0,    17,    18,     0,     0,     0,    31,    20,     0,
-     0,     0,     0,    21,     0,    32,     0,    23,     0,     0,
-    33,     0,     0,     0,     0,     0,    26,     0,    27,    28,
-     7,     8,     9,   186,    11,   187,     0,     0,     0,     0,
-    13,     0,    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,     7,     8,     9,   195,   196,
-   197,    26,     0,    27,    28,    13,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    30,     0,     0,
-     0,     0,     0,    18,     0,     0,     0,    31,    20,     0,
-     0,     0,     0,    21,     0,    32,     0,    23,     0,   558,
-    33,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+   314,     0,     0,     0,    17,   290,    18,     0,    20,     0,
+   291,   292,    21,     0,   293,   294,   295,    22,   296,   297,
+     0,    24,     0,     0,     0,   298,   299,   300,   301,   302,
+    27,     0,    28,   303,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   305,     0,     0,   306,     0,     0,     0,
+     0,     0,     0,     0,   307,   308,   309,     0,     0,     0,
+     0,     0,   310,   311,   312,   285,     8,     9,    10,   502,
+    12,   501,   287,   288,     0,   289,    14,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   314,     0,     0,
+     0,    17,   290,    18,     0,    20,     0,   291,   292,    21,
+     0,   293,   294,   295,    22,   296,   297,     0,    24,     0,
+     0,     0,   298,   299,   300,   301,   302,    27,     0,    28,
+   303,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   305,     0,     0,   306,     0,     0,     0,     0,     0,     0,
+     0,   307,   308,   309,     0,     0,     0,     0,     0,   310,
+   311,   312,   285,     8,     9,    10,   505,    12,   501,   287,
+   288,     0,   289,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   314,     0,     0,     0,    17,   290,
+    18,     0,    20,     0,   291,   292,    21,     0,   293,   294,
+   295,    22,   296,   297,     0,    24,     0,     0,     0,   298,
+   299,   300,   301,   302,    27,     0,    28,   303,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   305,     0,     0,
+   306,     0,     0,     0,     0,     0,     0,     0,   307,   308,
+   309,     0,     0,     0,     0,     0,   310,   311,   312,   285,
+     8,     9,    10,   313,    12,   501,   287,   288,     0,   289,
+    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   314,     0,     0,     0,    17,   290,    18,     0,    20,
+     0,   291,   292,    21,     0,   293,   294,   295,    22,   296,
+   297,     0,    24,     0,     0,     0,   298,   299,   300,   301,
+   302,    27,     0,    28,   303,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   305,     0,     0,   520,     0,     0,
+     0,     0,     0,     0,     0,   307,   308,   521,     0,     0,
+     0,     0,     0,   310,   311,   312,     7,     8,     9,    10,
+   522,    12,   286,   287,   288,     0,   289,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   314,     0,
+     0,     0,    17,   290,    18,     0,    20,     0,   291,   292,
+    21,     0,   293,   294,   295,    22,   296,   297,     0,    24,
+     0,     0,     0,   298,   299,   300,   301,   302,    27,     0,
+    28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   305,     0,     6,  1388,     7,     8,     9,    10,    11,
+    12,    13,   307,   308,  1389,     0,    14,     0,     0,     0,
+   310,   311,   312,     0,     0,     0,     0,  1390,     0,    15,
+    16,    17,     0,    18,    19,    20,     0,     0,     0,    21,
+     0,     0,     0,     0,    22,   314,     0,    23,    24,    25,
+     0,    26,     0,     0,     0,     0,     0,    27,     0,    28,
+    29,     0,   166,    30,     7,     8,     9,    10,    11,    12,
+    13,     0,     0,    31,     0,    14,     0,     0,     0,     0,
+     0,     0,     0,    32,     0,     0,     0,     0,    15,    16,
+    17,    33,    18,    19,    20,     0,    34,     0,    21,     0,
+     0,     0,    35,    22,     0,     0,    23,    24,    25,     0,
+    26,     0,     0,     0,     0,     0,    27,     0,    28,    29,
+     0,     0,    30,     7,     8,     9,    10,   201,   202,   203,
+     0,     0,    31,     0,    14,     0,     0,     0,     0,     0,
+     0,     0,    32,     0,     0,     0,     0,     0,     0,     0,
+    33,     0,    19,     0,     0,    34,     0,    21,     0,     0,
+     0,    35,    22,     0,     0,     0,    24,     0,   580,     0,
+     0,     0,     0,     0,     0,    27,     0,    28,    29,     7,
+     8,     9,    10,   201,   202,   203,     0,     0,     0,     0,
+    14,   862,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   863,     0,     0,     0,     0,     0,     0,    19,    33,
+     0,   583,     0,    21,   864,   585,     0,     0,    22,     0,
+     0,     0,    24,     0,   580,     0,     0,     0,     0,     0,
+     0,    27,     0,    28,    29,     7,     8,     9,    10,   134,
+    12,    13,     0,     0,     0,     0,    14,   862,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   863,     0,     0,
+     0,    17,     0,    18,    19,    33,     0,   583,     0,    21,
+   898,   585,     0,     0,    22,     0,     0,     0,    24,     0,
+     0,     0,     0,     0,     0,     0,     0,    27,     0,    28,
+    29,     7,     8,     9,    10,   134,    12,    13,     0,     0,
+   904,     0,    14,    31,     0,     0,     0,   135,     0,     0,
+     0,     0,     0,    32,     0,     0,     0,    17,     0,    18,
+    19,    33,     0,     0,     0,    21,    34,     0,     0,     0,
+    22,     0,     0,     0,    24,     0,  1086,     8,   926,    10,
+   192,    12,   193,    27,     0,    28,    29,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+     0,     0,    17,     0,    18,    19,     0,     0,     0,    32,
+    21,     0,     0,     0,     0,    22,     0,    33,     0,    24,
+     0,     0,    34,     0,     0,     0,     0,     0,    27,     0,
+    28,    29,     0,     0,     0,     0,  1088,     7,     8,     9,
+    10,   192,    12,   193,    31,     0,     0,     0,    14,     0,
+     0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
+     0,     0,    33,    17,     0,    18,    19,    34,     0,     0,
+     0,    21,     0,     0,     0,     0,    22,     0,     0,     0,
+    24,     0,     7,     8,     9,    10,   134,    12,    13,    27,
+     0,    28,    29,    14,     0,  1337,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    31,     0,     0,    17,     0,
+    18,    19,     0,     0,     0,    32,    21,     0,     0,     0,
+     0,    22,     0,    33,     0,    24,     0,     0,    34,     0,
+     0,     0,     0,     0,    27,     0,    28,    29,     7,     8,
+     9,    10,   192,    12,   193,     0,     0,     0,     0,    14,
+    31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    32,     0,     0,     0,    17,     0,    18,    19,    33,     0,
+     0,     0,    21,    34,     0,     0,     0,    22,     0,     0,
+     0,    24,     0,     7,     8,     9,    10,   201,   202,   203,
+    27,     0,    28,    29,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+     0,     0,    19,     0,     0,     0,    32,    21,     0,     0,
+     0,     0,    22,     0,    33,  1378,    24,     0,   580,    34,
+     0,     0,     0,     0,     0,    27,     0,    28,    29,   535,
+   536,   537,   538,   539,   540,   541,   542,   543,   544,   545,
+   546,   180,   548,   549,   550,   551,   552,   553,   554,   555,
+   556,   181,     0,     0,     0,     0,     0,     0,     0,    33,
+     0,     0,     0,     0,  1340,     0,  1379,   535,   536,   537,
+   538,   539,   540,   541,   542,   543,   544,   545,   546,   547,
+   548,   549,   550,   551,   552,   553,   554,   555,   556,     8,
+     9,     0,   134,    12,    13,     0,     8,     9,     0,    14,
+    12,   230,     0,     8,     9,     0,    14,    12,    13,     0,
+     0,     0,     0,    14,    17,     0,    18,    19,     0,     0,
+     0,    17,    21,    18,     0,     0,    19,     0,    17,    21,
+    18,   634,     0,     0,     0,     0,    21,     0,    24,     0,
+    27,     0,   129,   130,     0,    24,     0,    27,     0,   129,
+   130,     0,     0,     0,    27,     0,   129,   130,   535,   536,
+   537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
+   547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+   535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
+   545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
+   555,   556,   535,   536,   537,   538,   539,   540,   541,   542,
+   543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
+   553,   554,   555,   556,     0,     0,     0,     0,     0,  1124,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   174,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   175,     0,     0,     0,     0,     0,     0,     0,
-    32,     0,     0,     0,     0,  1315,   514,   515,   516,   517,
-   518,   519,   520,   521,   522,   523,   524,   525,   526,   527,
-   528,   529,   530,   531,   532,   533,   534,   535,   593,     0,
-     0,     0,   514,   515,   516,   517,   518,   519,   520,   521,
-   522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-   532,   533,   534,   535,     0,  1102,  1276,   514,   515,   516,
-   517,   518,   519,   520,   521,   522,   523,   524,   525,   526,
-   527,   528,   529,   530,   531,   532,   533,   534,   535,  1409,
-   514,   515,   516,   517,   518,   519,   520,   521,   522,   523,
-   524,   525,   526,   527,   528,   529,   530,   531,   532,   533,
-   534,   535,   514,   515,   516,   517,   518,   519,   520,   521,
-   522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
-   532,   533,   534,   535,   518,   519,   520,   521,   522,   523,
-   524,   525,   526,   527,   528,   529,   530,   531,   532,   533,
-   534,   535,   521,   522,   523,   524,   525,   526,   527,   528,
-   529,   530,   531,   532,   533,   534,   535
+     0,     0,     0,     0,   617,     0,     0,  1432,   535,   536,
+   537,   538,   539,   540,   541,   542,   543,   544,   545,   546,
+   547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+  1301,   535,   536,   537,   538,   539,   540,   541,   542,   543,
+   544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
+   554,   555,   556,  1449,   535,   536,   537,   538,   539,   540,
+   541,   542,   543,   544,   545,   546,   547,   548,   549,   550,
+   551,   552,   553,   554,   555,   556,   535,   536,   537,   538,
+   539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
+   549,   550,   551,   552,   553,   554,   555,   556
 };
 
 static const short yycheck[] = {     4,
-    72,   155,     4,     4,   633,     4,   323,   453,    55,   376,
-   631,   120,    23,    51,   432,    13,   190,   329,   329,   875,
-    25,   278,   279,    25,   348,   405,   198,   199,   376,    58,
-    35,   786,  1209,    35,    35,    40,    35,   410,    40,    40,
-   376,    40,     8,    13,    80,  1344,    33,    10,    53,   145,
-   146,   225,    22,   697,   311,    87,   123,     4,   190,   562,
-  1379,   128,   706,    68,  1232,    33,   569,   199,   715,    50,
-   717,   220,    10,  1374,    62,    80,    10,  1377,    25,    11,
-    85,    79,    87,    88,     4,    37,    88,   134,    35,    60,
-    54,    61,    47,    40,   132,    61,   101,   102,   272,  1074,
-  1075,  1401,   100,     6,   136,    25,    53,   127,   128,    64,
-    74,  1361,  1239,  1088,     0,    35,    47,    76,     0,  1246,
-    40,   109,   194,  1442,    62,   505,     1,    59,   133,  1430,
-    62,   136,    62,     1,    37,    62,    47,    11,    93,   110,
-     1,    88,   110,   190,    48,   563,   109,    74,   118,   323,
-  1400,   198,   199,    59,   159,     7,     8,   159,   110,   146,
-   147,    13,    93,    11,   193,    97,   483,  1466,    88,   150,
-    93,   109,   201,   820,   144,   109,  1344,   109,   225,   109,
-  1480,  1431,    93,    58,    36,    59,   632,    62,    62,   176,
-    58,    47,   411,    45,    62,    47,  1171,    58,   109,   418,
-   181,    59,    30,    31,   110,  1180,  1181,    87,  1183,    58,
-    54,    59,   159,    54,    62,    93,    64,     3,     4,     5,
-    95,  1348,    93,    97,    38,   272,    35,    95,   226,   984,
-    74,    40,    59,    74,  1411,    60,    59,    93,    94,   159,
-    54,    93,    47,     3,     4,     5,    62,   217,   218,    97,
-    99,   109,    80,   109,   634,    41,   136,    85,    74,    87,
-   479,  1388,     4,     5,   436,   437,   913,    47,   273,   581,
-    56,    57,   444,   101,   102,   307,   323,    60,   925,   238,
-   316,   605,   109,   350,   456,   110,   109,   334,    93,   656,
-    47,    60,    24,    59,    80,   333,    56,    57,   303,   331,
-   320,   473,    88,   457,   371,   437,  1433,    74,   136,    75,
-   957,   316,   959,    93,    56,    57,   303,   145,   146,   324,
-   656,   824,   541,   293,   543,   544,    58,   110,   424,   425,
-    62,   329,    47,    59,    47,   652,    93,    94,    80,   280,
-   281,   110,     4,     5,    58,    47,   174,   175,   380,   852,
-    64,   371,   109,   294,  1329,  1330,  1111,   576,   299,   429,
-    54,   302,    64,    95,   305,  1236,  1222,  1238,   309,    93,
-   440,   376,    60,    47,   446,    47,   317,   347,    93,    94,
-    93,    94,   885,   109,    24,    47,   108,    47,    54,   436,
-   437,    93,    54,   398,    56,    57,   398,   444,    31,    54,
-     3,     4,     5,   821,     3,     4,     5,    62,    70,   456,
-    47,   101,   102,   418,   443,   788,     4,     5,    80,    93,
-     8,    93,    94,    54,    60,  1281,   473,    47,    90,    58,
-   459,    93,    94,    93,  1290,  1291,    62,   109,   425,   426,
-    54,    54,    41,    74,    64,  1089,    26,    27,    62,   454,
-    58,   398,   454,    56,    57,   454,    93,    56,    57,    47,
-    74,    74,     3,     4,     5,   911,    54,   110,    56,    57,
-     3,     4,     5,    93,    94,   303,   481,    80,   398,   484,
-   847,   451,    70,   488,   489,   490,   491,   492,   316,    88,
-     4,     5,    80,   873,   481,   454,   501,   484,    47,   847,
-    93,   673,    90,   508,    33,    93,    94,   512,    41,   545,
-    47,   847,    54,   500,   501,    56,    57,   829,   829,    47,
-    62,    54,    33,    56,    57,   512,    54,    60,    47,  1032,
-    75,   680,    74,   682,   454,    59,     4,    70,   687,   544,
-   545,   511,    56,    57,    93,    94,    74,    80,   376,  1405,
-  1053,    75,    47,    77,    54,    88,    93,   562,   499,   500,
-    93,   735,    47,    47,   569,    93,    80,    35,    54,   826,
-   789,   618,    40,    47,    93,   573,   994,   615,   951,   617,
-   618,   690,   569,   802,    47,   804,    26,    27,    59,    60,
-   418,    31,     4,     5,  1040,    54,   424,   425,    93,   610,
-    47,   109,   975,   976,    47,   652,   676,    54,    93,    93,
-   109,   616,    94,   303,   652,   620,   145,   146,   147,    93,
-    60,   632,  1068,   842,    64,    47,   673,    74,   700,   701,
-    93,   430,    54,   109,   145,   146,   147,   709,    10,   438,
-   610,   711,    54,     4,    56,    57,    93,   176,   867,   619,
-    93,   656,    74,   481,    59,    60,   484,   109,    70,   110,
-   488,   489,   490,   491,   492,   176,   704,    54,    80,   639,
-   110,    93,   989,   501,    35,    62,  1049,     7,     8,    40,
-   508,     3,    94,    13,   512,  1058,  1059,    74,   735,    60,
-  1063,  1064,   697,   112,   699,   697,    93,   699,   697,    94,
-   705,   706,   990,   991,   706,   993,    36,   706,    59,    60,
-   715,    94,   717,    54,    62,    45,   544,   545,     3,     4,
-     5,    62,   112,     4,     5,   415,    93,     8,    93,  1102,
-    74,   559,   560,    74,   562,     4,     5,    74,   697,    74,
-   699,   569,   729,     3,     4,     5,   705,   706,    74,  1370,
-   110,    85,    10,    87,     4,     5,   109,   704,   705,   908,
-   909,   910,    47,    83,    84,  1394,    59,   101,   102,    54,
-    54,    56,    57,    54,    60,    56,    57,   697,    62,   699,
-   785,     3,     4,     5,   789,  1158,   706,    56,    57,    70,
-    74,   481,    54,   109,   484,   109,    56,    57,   488,    80,
-    62,   109,   136,   109,    54,    59,    56,    57,    93,   814,
-    64,   501,    74,    94,   110,   820,   724,   725,   726,   824,
-    70,    75,   512,  1042,  1197,  1044,   516,  1046,   656,   112,
-    80,   829,    54,   110,    56,    57,   823,   824,    59,    60,
-     4,     5,   847,   109,   849,    59,    60,   852,   918,   919,
-    59,    60,   542,     3,     4,     5,   797,   929,   548,   112,
-    85,  1402,    87,   935,   936,   852,    64,   939,   940,   112,
-   840,   943,   112,  1414,   109,     4,     5,   947,   109,     8,
-   885,   822,   823,  1424,    59,    60,   109,   715,    58,   717,
-   109,    41,    56,    57,   899,   424,   425,   426,   885,    54,
-  1441,   906,     7,  1276,    54,   112,    56,    57,   913,  1128,
-    93,   136,  1292,   424,   425,   426,    80,    11,    64,  1460,
-   925,  1238,     4,     5,  1304,    54,    47,    56,    57,     3,
-     4,     5,    26,    27,  1030,  1031,    59,    31,    88,    26,
-    27,    70,  1483,   948,    31,    93,   948,   110,    60,   948,
-    64,    80,   957,    47,   959,  1051,  1052,   785,    64,    24,
-   109,    26,    27,    60,    62,    59,    60,   109,    62,   303,
-    64,   109,    59,    60,    56,    57,   109,    64,   937,   109,
-    54,  1361,    56,    57,    58,    64,   814,     8,    64,   948,
-    11,    64,   820,    58,   822,   823,   824,    62,    80,    93,
-    94,   112,    64,    97,  1371,    93,   976,     4,     5,    59,
-  1080,  1081,    75,  1083,  1084,   109,  1086,    74,  1398,   847,
-  1400,   849,   850,   851,   852,    62,    47,  1032,   948,  1040,
-    95,   109,   109,    75,   109,  1371,  1416,   109,    59,   109,
-    61,    62,   376,    64,  1031,  1032,    75,    75,  1053,     4,
-     5,  1431,     4,     5,    75,   996,    77,   885,   109,    56,
-    57,   109,    62,    62,    59,  1052,  1053,   292,  1385,   109,
-    62,   899,    93,    94,   109,    94,    97,   110,   906,  1049,
-   112,   112,   109,    80,  1089,   913,   109,  1089,   109,    47,
-  1089,   109,    88,   109,   109,  1468,   109,   925,  1168,  1169,
-   112,    56,    57,   793,    56,    57,  1178,  1179,   112,   110,
-  1051,  1052,     4,     5,    59,     7,     8,   110,   109,   109,
-    64,    13,     3,     4,     5,    80,  1085,    64,    62,   957,
-  1089,   959,    59,    59,   824,   109,    28,   109,    30,  1144,
-    93,   110,  1144,  1144,    36,  1144,    93,   481,   109,  1154,
-   484,    93,    93,    45,   488,   489,   490,   491,   492,   109,
-    41,   112,    54,     7,    56,    57,    58,   501,    64,  1089,
-   109,  1141,   112,   109,   508,    56,    57,   109,   512,    24,
-   110,    26,    27,    62,   109,   410,   411,   109,  1258,  1259,
-  1260,  1238,   109,   418,   109,     3,     4,     5,  1236,  1353,
-  1238,    93,  1030,  1031,  1032,   109,   109,    88,   109,   109,
-   544,  1385,   109,    58,   112,    47,   906,    62,     3,     4,
-     5,   109,    30,  1051,  1052,  1053,   109,  1232,   562,   109,
-  1232,    96,  1237,  1232,  1239,   569,    33,  1239,  1239,   109,
-  1239,  1246,  1314,    62,  1246,  1246,    54,  1246,    56,    57,
-    95,   109,   109,   109,   479,   109,  1326,  1327,  1228,   112,
-  1356,  1357,    80,    81,    82,    83,    84,     3,     4,     5,
-   109,    56,    57,    58,     1,    62,     3,     4,     5,    62,
-     7,    60,    60,   508,     8,    60,   511,    15,    93,   514,
-   515,  1232,   517,   518,   519,   520,   521,   522,   523,   524,
-   525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
-   535,    93,    60,  1283,    41,    60,   541,    93,   543,   544,
-    56,    57,   656,   852,   108,    98,  1154,    54,  1315,    56,
-    57,     3,     4,     5,     6,    93,  1408,    16,  1385,  1344,
-  1345,   852,  1344,  1348,   569,  1344,  1348,  1348,  1386,  1348,
-   109,   576,    60,  1358,    60,   109,   885,   109,    30,   109,
-    10,    88,  1432,  1053,    60,    37,  1371,   592,   593,  1374,
-  1357,  1358,  1377,    60,   885,  1377,  1377,    93,  1377,    59,
-   109,    64,    54,  1388,    56,    57,  1388,  1388,   109,  1388,
-     3,     4,     5,     6,     7,     8,  1401,     4,     5,  1401,
-  1401,     8,  1401,    60,     3,     4,     5,    60,  1098,  1099,
-  1100,  1101,    10,    60,   639,  1356,  1357,     4,     5,  1109,
-   109,    10,    60,    36,     0,  1430,     0,     0,  1433,   400,
-     2,  1433,  1433,   847,  1433,   705,   350,   159,   699,   159,
-    47,    54,    41,    56,    57,    58,  1040,    54,  1369,    56,
-    57,   785,   508,  1340,  1480,  1237,   840,    56,    57,   639,
-   835,  1068,   219,    70,   174,   175,   176,    54,   948,    56,
-    57,   696,   911,    80,   590,  1480,   705,  1087,  1480,  1480,
-   814,  1480,   699,    90,   833,   545,    93,    94,   181,    88,
-   824,   104,   105,   106,    78,    79,    80,    81,    82,    83,
-    84,  1030,  1031,  1032,   729,    76,     3,     4,     5,     6,
-     7,     8,   118,   847,    11,   849,    13,  1345,   852,  1030,
-  1031,  1032,  1051,  1052,  1053,   320,   751,    98,  1356,  1357,
-  1358,    28,  1239,    30,    31,  1416,  1145,  1227,  1391,    36,
-  1051,  1052,  1053,  1371,    41,  1455,  1374,  1394,    45,   894,
-    47,   885,     3,     4,     5,  1453,   127,    54,  1154,    56,
-    57,    -1,    -1,   788,   789,   899,    -1,    -1,    -1,   140,
-    -1,    -1,   906,    70,    -1,    -1,    -1,   802,    -1,   804,
-     3,     4,     5,    80,    -1,    -1,     4,     5,    -1,     7,
-     8,    88,    -1,    90,     4,    13,    93,    94,    -1,    -1,
-    97,    -1,  1430,    13,    -1,    56,    57,   832,    -1,    -1,
-    28,  1301,    30,   184,    24,    25,    -1,   842,    36,    -1,
-    30,    31,    -1,    33,    -1,    35,    -1,    45,    -1,    47,
-    40,    54,    -1,    56,    57,   860,    54,   671,    56,    57,
-    -1,    51,   867,    53,    -1,    -1,   217,    -1,    -1,     4,
-     5,    61,    70,    -1,  1344,  1345,    -1,    -1,    68,    -1,
-   885,    -1,    80,    -1,    -1,    -1,    -1,   238,  1358,    79,
-    80,    24,    90,    26,    27,    93,    94,    -1,    88,    -1,
-   714,    -1,   716,    -1,  1374,    -1,    -1,    -1,    -1,    44,
-   100,    -1,     3,     4,     5,    -1,    -1,     8,  1032,    54,
-    -1,    56,    57,   928,    -1,    58,    -1,    -1,    -1,    62,
-   420,    -1,   422,   123,   424,   425,   426,    -1,   128,  1053,
-    -1,    -1,   132,   133,    -1,   435,   951,    -1,   138,    -1,
-    41,   141,   142,    -1,    -1,   145,   146,   147,  1428,    -1,
-  1430,    -1,    95,    54,    -1,    56,    57,    -1,    -1,   159,
-   975,   976,    -1,    -1,   979,   376,    -1,   328,    -1,    70,
-    -1,    -1,  1452,    -1,   174,   175,   176,   411,    -1,    80,
-    -1,    -1,    -1,    -1,   418,    -1,  1466,    88,    -1,    -1,
-    -1,   815,    93,   817,    -1,    -1,  1315,    -1,    24,    -1,
-    26,    27,    -1,   203,    -1,    -1,    -1,   418,     3,     4,
-     5,     6,     7,     8,  1315,     4,     5,    -1,   218,     8,
-    -1,   382,    -1,    -1,    -1,    -1,   226,  1042,    -1,  1044,
-  1154,  1046,    58,    -1,  1049,   235,    62,  1356,  1357,  1358,
-    -1,    -1,    -1,  1058,  1059,   479,    -1,    -1,  1063,  1064,
-    -1,    -1,    -1,    -1,    -1,  1356,  1357,  1358,    47,    -1,
-    -1,    56,    57,  1078,  1079,    54,    -1,    56,    57,    95,
-    -1,    -1,    -1,   273,   274,    -1,     4,     5,     6,     7,
-     8,    70,    -1,    11,    -1,    13,    -1,  1102,    -1,  1104,
-   451,    80,    -1,     3,     4,     5,    -1,    -1,     8,    -1,
-    28,    90,    30,    31,    93,    94,    -1,   541,    36,   543,
-   544,    -1,    -1,  1128,    -1,   476,   316,    45,    -1,    -1,
-   320,    -1,   322,   323,   324,    -1,    54,    -1,    56,    57,
-    -1,    41,   956,   333,   958,   569,    -1,    47,    -1,    -1,
-    -1,    -1,   576,  1158,    54,    -1,    56,    57,    -1,    -1,
-   350,   562,     3,     4,     5,    -1,    -1,    -1,   569,  1174,
-    70,    -1,    -1,   663,   664,    -1,   666,    -1,    -1,    97,
-    80,   371,    -1,    -1,    -1,    -1,   376,    -1,    88,    -1,
-    90,    -1,  1197,    93,    94,  1009,   386,    -1,    -1,   389,
-    41,    -1,    -1,    -1,   394,   556,    -1,    53,   398,    55,
-    -1,    -1,    -1,    -1,   704,    56,    57,    -1,  1223,    -1,
-    -1,   572,    -1,    -1,     6,     7,     8,    -1,    -1,    -1,
-   420,    13,   422,    -1,   424,   425,   426,    -1,    -1,    80,
-   430,     3,     4,     5,  1358,   435,     8,    88,   438,    31,
-    -1,  1256,  1257,    -1,    36,   656,    -1,  1371,  1072,    -1,
-  1265,    -1,  1076,    45,   454,    -1,     3,     4,     5,    -1,
-    -1,  1276,    -1,    -1,    -1,    -1,    -1,    -1,    60,    41,
-   322,   323,   324,    -1,    -1,    47,    -1,   133,   134,    -1,
-    47,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,   489,
-   490,   491,   492,    -1,    41,   729,    -1,    -1,    70,  1123,
-  1315,    -1,    -1,    -1,   715,    -1,   717,    54,    80,    56,
-    57,    -1,    -1,    -1,    -1,    62,    88,    -1,    90,    86,
-    87,    93,    94,    70,    91,    92,    93,    94,     6,     7,
-     8,  1346,    -1,    80,   190,    13,    -1,     3,     4,     5,
-    -1,    88,   198,   199,    -1,   545,    93,   547,    -1,    -1,
-   850,   851,   852,    31,    -1,   789,    -1,   557,    36,   559,
-   560,    -1,   562,  1187,  1188,    -1,    -1,    45,   802,   569,
-   804,    -1,   228,   573,    -1,    41,    -1,    -1,    -1,  1203,
-    -1,    -1,    60,    -1,    -1,   885,    -1,    -1,    -1,    -1,
-    56,    57,    -1,    -1,    -1,    -1,     6,     7,     8,    -1,
-     6,     7,     8,    13,     3,     4,     5,    13,   842,   820,
-    -1,    -1,    -1,   824,    80,   615,   616,   617,   618,   619,
-   620,    31,    88,    -1,    -1,    31,    36,  1251,  1252,    -1,
-    36,    -1,    -1,   867,    -1,    45,   847,    -1,    -1,    45,
-    -1,   852,    41,    -1,    -1,    -1,  1270,  1271,    47,    -1,
-    -1,   885,   652,  1468,    -1,    54,   656,    56,    57,    -1,
-    -1,    -1,    -1,   663,   664,    -1,   666,   828,    -1,   830,
-    -1,    70,    -1,    -1,   885,    -1,    -1,    -1,   334,    -1,
-    -1,    80,    -1,    -1,     3,     4,     5,    -1,    -1,    88,
-    -1,    90,    -1,   693,    93,    94,    -1,   697,    -1,   699,
-    -1,    -1,   913,    -1,   704,   705,   706,   559,   560,    -1,
-    -1,    -1,    -1,    -1,   925,   715,    -1,   717,    -1,    -1,
-    -1,    78,    41,    -1,   724,   725,   726,    -1,  1028,  1029,
-  1030,  1031,  1032,    -1,    -1,   735,  1036,    56,    57,     3,
-     4,     5,    -1,    -1,    -1,    -1,   957,    -1,   959,    -1,
-    -1,  1051,  1052,  1053,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    80,    -1,   615,    -1,   617,   618,    -1,   620,    88,
-    -1,    -1,    -1,   429,    38,    39,   937,    41,    -1,    -1,
-   436,   437,  1082,    -1,   440,   785,    -1,    -1,   444,    -1,
-    54,    -1,    56,    57,    -1,    -1,   153,    -1,    -1,    -1,
-   652,    -1,    -1,    -1,    -1,   805,    -1,   807,  1042,    -1,
-  1044,    -1,  1046,    -1,   814,   172,    -1,    -1,   818,    -1,
-   820,  1032,   822,   823,   824,    -1,    -1,    -1,   185,   829,
-    -1,  1131,  1132,    -1,  1134,    -1,    -1,    -1,    -1,     4,
-    -1,    -1,  1053,    -1,     3,     4,     5,   847,    13,   849,
-   850,   851,   852,    -1,  1015,    -1,    -1,    -1,    23,    24,
-    25,    -1,    -1,    -1,    -1,    30,    31,    -1,    33,    -1,
-    35,    -1,    -1,  1034,    -1,    40,    -1,    -1,    -1,     3,
-     4,     5,    41,   735,     8,   885,    51,    -1,    53,    -1,
-    -1,    -1,    -1,    -1,  1128,    54,    61,    56,    57,   899,
-    -1,    60,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    -1,   913,    -1,    80,    -1,    41,    -1,    -1,
-    -1,    80,    -1,    88,  1085,   925,    -1,    -1,    -1,    88,
-    54,    -1,    56,    57,    93,    -1,    -1,    -1,   938,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,   948,     3,
-     4,     5,    -1,   805,     8,   807,    80,   957,   123,   959,
-   616,    -1,   618,    -1,    88,    -1,   818,   132,   133,    93,
-   822,   823,    -1,   138,    -1,    -1,    -1,   142,    -1,    -1,
-   145,   146,   147,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-   990,   991,    -1,   993,   159,    -1,   652,    -1,   850,   851,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,   174,
-   175,   176,    -1,    -1,    -1,  1315,    70,   673,    -1,    -1,
-   676,    -1,    -1,    -1,    -1,    -1,    80,    -1,  1028,  1029,
-  1030,  1031,  1032,    -1,    88,    -1,  1036,    -1,   203,    93,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,   705,
-    -1,  1051,  1052,  1053,    -1,   711,  1356,  1357,  1358,    -1,
+   658,   332,    54,   161,    75,   392,   656,   196,   470,   392,
+    58,   427,     4,     4,   125,   236,    83,   392,    24,   888,
+  1226,    26,   151,   152,   338,     4,   931,   449,   796,    79,
+    14,    36,   196,   363,   132,   940,    41,     4,   721,   289,
+   290,   205,   231,   726,    36,    36,    11,    26,    34,    41,
+    41,    56,   132,   133,    11,    53,  1256,    36,    89,    26,
+    91,    92,    41,  1263,    31,    32,    71,   226,  1376,    36,
+   320,    61,   128,   422,    41,  1249,    11,   133,    83,  1187,
+  1188,  1412,    87,     4,    89,   137,    91,    92,    93,    48,
+    60,   139,   281,  1201,  1410,    38,   146,    34,    82,    55,
+    61,   106,   107,  1407,    36,    26,    63,   204,   205,    41,
+   141,     9,   143,     0,    93,    36,    83,   338,    60,    75,
+    41,   105,     4,    65,     1,  1441,    93,    55,     0,   200,
+     1,    75,     1,   138,    76,    94,   141,    60,   143,     4,
+   190,   111,    75,   332,    26,   110,  1393,    75,   196,   832,
+   111,   110,  1483,   110,    36,    79,   204,   205,   156,    41,
+   165,    26,    83,   585,    62,  1469,   152,   153,   111,  1277,
+    61,    36,    93,   504,   111,   110,    41,   526,  1286,  1287,
+  1380,  1289,    59,   231,   151,   152,   165,   110,    59,   187,
+    59,    56,    63,  1440,    63,   657,   182,   428,   165,    12,
+  1508,    60,  1376,    49,   435,    25,  1522,    27,    28,   199,
+    60,    93,   584,   180,   181,   983,    12,   207,    61,   591,
+   111,  1421,    55,  1470,    61,    96,     7,    96,    93,     4,
+    60,   329,    14,   281,     4,     5,    91,    92,    39,    59,
+    59,    23,    75,    63,   165,  1451,    60,    60,   232,   329,
+    63,   110,    65,   284,    55,    55,    12,    38,   325,    48,
+   110,    36,    76,    63,    60,    59,    41,    63,   111,   500,
+   447,    65,  1472,   956,   111,   958,    96,   282,   455,   284,
+   110,   100,    64,   165,   332,    98,   141,    57,    58,   603,
+   454,  1399,  1400,    48,   681,    94,   348,  1202,   681,   629,
+   165,   349,    98,    48,    60,    94,   386,    63,   313,   365,
+   659,    81,   441,   442,   110,   473,    48,    27,    28,    63,
+   325,    34,    32,   247,     3,     4,     5,   313,   333,    60,
+   386,   562,    94,   564,   565,  1253,    63,  1255,    75,    94,
+    95,   123,    98,    60,    61,    76,   677,    78,    63,    94,
+    95,    61,    48,    94,   338,    65,   453,   454,   325,    63,
+    75,    34,    94,    95,   461,  1133,   110,   598,   150,    48,
+  1239,    75,  1442,   291,   292,   472,    55,    61,    57,    58,
+     8,     9,   798,   110,  1454,    48,    14,   392,   306,    25,
+  1073,   309,   463,  1463,   312,   492,     4,   315,    94,    95,
+   318,   111,  1085,    48,   325,   453,   454,    48,   326,    37,
+   415,   833,  1482,   461,   110,    94,    94,    48,    46,   109,
+    48,    48,    25,    59,   472,   392,    61,    63,    36,   284,
+   435,    94,  1502,    41,    65,    48,   415,  1306,   151,   152,
+   153,   223,   224,    55,   492,    32,  1315,  1316,   415,    94,
+    95,    75,    65,    94,   236,  1525,   442,   443,    60,    61,
+    96,   316,   924,    94,   836,   110,    94,    94,   435,   182,
+   460,   392,   859,    55,   441,   442,   859,    63,   151,   152,
+   153,    94,    95,    48,   859,   475,    48,   342,    48,   344,
+    63,   346,   864,    75,   415,    55,    59,   502,    48,   566,
+   505,    55,    75,    65,   509,   510,   511,   512,   513,   182,
+     3,     4,     5,     6,   435,    75,   502,   522,   111,   505,
+     3,     4,     5,   305,   529,    59,   898,   841,   533,    94,
+    95,   947,    94,   415,    94,   521,   522,   886,    48,     4,
+     5,   396,   397,    94,    94,   110,   705,   533,   707,    42,
+   415,    60,    61,   712,     4,     5,   745,    55,   974,   975,
+   565,   566,    55,    48,    57,    58,   989,   990,   799,   992,
+    76,   993,    48,    48,    57,    58,  1445,    75,  1040,   584,
+   362,   812,    55,   814,    94,   816,   591,   639,   838,   641,
+   642,    55,    57,    58,   642,    56,    89,    58,    81,   566,
+    48,   698,   520,   521,   715,   591,  1068,    57,    58,    94,
+    55,   595,     4,     5,   581,   582,    81,   584,    94,    94,
+   841,     4,     5,   854,   591,   677,     9,    48,   634,   677,
+    75,    81,    55,  1049,    55,   640,     4,     5,    48,   644,
+   110,     9,  1058,  1059,   499,   566,    94,  1063,  1064,   880,
+   698,   657,     4,     5,    75,    48,     9,   988,    48,    12,
+  1032,   110,    55,   584,    95,    57,    58,    63,   110,    48,
+   591,   110,    55,    94,    57,    58,   681,   138,   139,    75,
+    11,  1053,    75,   111,    94,    48,   468,    55,    71,    57,
+    58,   722,   723,   724,    48,    48,     3,   745,    81,    27,
+    28,    94,    61,    71,    94,    57,    58,    60,  1124,    62,
+    63,   716,    65,    81,   681,    94,   721,   722,   723,   724,
+    94,   726,   113,    76,   716,    78,    95,    95,   441,   442,
+   443,    94,   113,     4,     5,   196,    63,   716,    55,    95,
+    94,    94,    95,   204,   205,    98,    63,    84,    85,   716,
+   532,    60,    61,   739,   721,     4,     5,   110,    75,   726,
+   681,    94,   921,   922,   923,  1181,    60,    61,   441,   442,
+   443,    55,    94,   234,     8,     9,     4,     5,    75,    63,
+    14,    55,    75,     4,     5,  1435,    57,    58,    75,    63,
+   795,    75,   716,    75,   799,   716,    11,  1455,  1214,    48,
+   721,    75,   110,    37,    60,   726,    55,   111,    57,    58,
+    81,  1042,    46,  1044,   110,  1046,     3,     4,     5,   869,
+    55,   826,    71,     4,     5,   110,    65,   832,    63,    57,
+    58,   836,    81,   110,   716,    55,    57,    58,    60,    61,
+    75,   110,    91,    63,    61,    94,    95,    60,    61,   835,
+   836,   111,   634,    81,   859,    75,   861,   841,   111,   864,
+    81,   643,   113,   934,   935,   832,   110,   834,   835,   836,
+    57,    58,   943,   113,    55,    75,    57,    58,   864,     4,
+     5,    75,   664,    75,   113,  1301,   938,   113,   349,   807,
+    71,   110,   859,   898,   110,   862,   863,   864,   110,    59,
+    81,  1030,  1031,    25,   110,    27,    28,   912,   733,   734,
+   735,   832,   898,    55,   919,   836,   834,   835,     4,     5,
+  1151,     8,  1051,  1052,  1255,   113,   931,    94,   933,    48,
+    55,   898,    57,    58,   939,   940,    65,    59,   859,   931,
+    60,    63,    94,   864,    61,   111,    71,    55,   940,    65,
+    65,   956,   931,   958,   933,    63,    81,   110,    61,    45,
+    25,   940,    27,    28,   931,    63,   933,    75,  1317,    55,
+    95,    57,    58,   940,    96,   110,   110,   898,   110,   110,
+  1329,     7,     8,     9,  1034,   446,    65,    65,    14,   956,
+    65,   958,   453,   454,    59,   113,   457,    65,    63,    94,
+   461,    60,     3,     4,     5,     6,    32,   931,   110,   933,
+   931,    37,   933,   110,   110,   939,   940,  1404,  1089,   940,
+    46,  1404,   110,    76,  1095,  1096,   110,  1032,  1099,  1100,
+    76,    96,  1103,    76,  1040,   956,    76,   958,     3,     4,
+     5,    42,    63,   110,  1393,  1031,  1032,  1097,  1053,   931,
+   110,   933,    63,    60,   110,    63,    57,    58,   940,   110,
+     3,     4,     5,  1030,  1031,  1032,  1052,  1053,  1073,   113,
+   852,    95,   111,   938,   939,   110,   110,   995,    48,    25,
+  1085,    27,    28,   113,  1051,  1052,  1053,  1418,    89,  1438,
+    55,  1440,    57,    58,  1510,   950,   951,   952,    89,     3,
+     4,     5,   111,  1108,   110,    87,  1073,    89,   110,    91,
+    92,  1032,    55,    59,    57,    58,  1108,    63,  1085,   113,
+   113,  1470,   110,     3,     4,     5,   110,   110,    60,  1108,
+   110,  1480,  1053,  1051,  1052,     3,     4,     5,     6,   111,
+    65,  1108,    79,    80,    81,    82,    83,    84,    85,    65,
+    96,   864,  1073,    57,    58,    59,    75,    63,   110,   141,
+   110,   143,  1167,    94,  1085,    94,     3,     4,     5,     6,
+    94,    94,  1177,  1097,    42,  1167,  1167,    57,    58,   640,
+   110,   642,     8,   111,  1108,   898,   113,  1108,  1167,    57,
+    58,   864,   110,   975,     4,     5,   110,  1202,   110,   392,
+  1167,  1253,   110,  1255,   113,    42,   111,  1255,   110,   110,
+  1202,   110,    49,  1284,  1285,   110,   677,   110,   110,    60,
+    57,    58,    60,  1202,   110,   898,  1108,  1385,   110,  1418,
+    63,     3,     4,     5,   113,  1202,    48,   698,   110,   110,
+   701,   110,   435,    97,  1249,    55,  1167,    57,    58,  1254,
+    34,  1256,    89,   110,   110,   110,    65,  1249,  1263,  1388,
+  1389,     3,     4,     5,  1256,  1256,   110,  1049,  1339,    63,
+  1249,  1263,  1263,   113,  1198,   110,   110,  1256,  1202,   110,
+   110,  1202,  1249,    55,  1263,    57,    58,    59,    63,  1256,
+   446,     3,     4,     5,    61,    61,  1263,     3,     4,     5,
+     6,   457,   284,    16,     9,    61,    94,     1,    94,     3,
+     4,     5,     6,    61,     8,    57,    58,  1030,  1031,  1032,
+  1202,    61,   304,    81,    82,    83,    84,    85,  1249,    94,
+    94,  1249,     3,     4,     5,  1256,    42,    17,  1051,  1052,
+  1053,    61,  1263,    49,    99,    57,    58,   109,    42,   110,
+    61,    57,    58,   110,  1340,    49,   110,  1030,  1031,  1032,
+   110,    55,    11,    57,    58,    61,    61,  1419,    94,    60,
+  1418,  1376,  1377,   110,    61,  1380,    65,  1448,  1051,  1052,
+  1053,   110,  1164,    89,  1376,  1390,    57,    58,  1380,  1380,
+    11,   584,    61,    61,   110,    89,    11,  1376,   591,  1404,
+    61,  1380,  1407,  1389,  1390,  1410,     3,     4,     5,  1376,
+  1377,     0,     0,  1380,     0,     2,  1421,   417,  1410,  1410,
+   365,  1388,  1389,   859,   165,  1434,   165,   939,   933,  1421,
+  1421,  1410,  1372,  1040,    31,   529,  1441,  1404,  1522,  1254,
+  1407,   852,  1421,  1410,   847,   427,   428,   225,  1068,  1441,
+  1441,  1108,    48,   435,  1421,  1376,  1377,   664,    55,  1380,
+    57,    58,  1441,  1245,  1469,   924,   933,  1472,   939,   614,
+  1388,  1389,  1200,   845,  1441,   566,   329,   187,   939,   123,
+  1472,  1472,  1256,  1404,   945,  1168,  1407,  1480,   681,  1410,
+  1424,    87,    88,  1472,  1494,  1455,    92,    93,    94,    95,
+  1421,  1496,  1469,   907,    -1,  1472,  1177,     7,     8,     9,
+    -1,    -1,    -1,    -1,    14,    -1,    -1,  1522,   500,    -1,
+  1441,    -1,    -1,    -1,    -1,    -1,  1308,    -1,   721,    -1,
+  1522,  1522,    32,   726,    -1,    -1,    -1,    37,    -1,     3,
+     4,     5,     6,  1522,    -1,   701,    46,   529,  1469,    -1,
+   532,  1472,    -1,   535,   536,  1522,   538,   539,   540,   541,
+   542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
+   552,   553,   554,   555,   556,    -1,    -1,    -1,    42,    -1,
+   562,    -1,   564,   565,    -1,    49,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    57,    58,   106,   107,    -1,     3,     4,
+     5,  1522,     7,    -1,    -1,    -1,     3,     4,     5,   591,
+     7,     8,     9,   428,    -1,    -1,   598,  1078,  1079,    -1,
+   435,    12,   180,   181,   182,    89,    31,  1340,    -1,    -1,
+    -1,    -1,    -1,    38,   616,   617,    27,    28,    -1,   832,
+    37,    32,    -1,   836,    -1,    -1,  1107,    -1,    -1,    -1,
+    55,    -1,    57,    58,    -1,    -1,    -1,    48,    55,    -1,
+    57,    58,    59,    -1,    -1,    -1,   859,  1340,    -1,    60,
+    61,   864,    63,   696,    65,  1388,  1389,  1390,    -1,    -1,
+    -1,    -1,   664,    -1,    -1,   500,    -1,    -1,    -1,    -1,
+    -1,     3,     4,     5,     6,    -1,    -1,   720,    -1,    -1,
+    -1,    -1,   725,    94,    95,   898,    -1,    98,   105,   106,
+   107,    -1,    -1,    -1,    -1,  1388,  1389,  1390,    -1,   110,
+    27,    28,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,
+    42,    -1,  1193,  1194,    -1,  1196,  1197,    -1,  1199,    -1,
+   722,   723,   724,    55,    -1,    57,    58,   562,    -1,   564,
+   565,    63,    -1,    60,    61,    -1,    -1,   739,    65,    71,
+    -1,    -1,    -1,   956,    -1,   958,    -1,    -1,    -1,    81,
+     4,     5,    -1,     7,     8,     9,   591,    89,    12,   761,
+    14,    -1,    94,   598,    -1,    -1,     3,     4,     5,   945,
+     7,     8,     9,  1254,  1255,    29,    -1,    31,    32,    -1,
+    -1,    -1,   313,    37,   827,    -1,   829,    -1,    -1,    -1,
+    -1,    -1,    46,  1274,  1275,    -1,   798,   799,    -1,    -1,
+    -1,    55,    -1,    57,    58,    -1,     4,    -1,    -1,    -1,
+   812,    -1,   814,    -1,   816,    -1,    14,    -1,    -1,  1032,
+    57,    58,    -1,    -1,    -1,    -1,    -1,    25,    26,    -1,
+    -1,    -1,    -1,    31,    32,    -1,    34,    -1,    36,    -1,
+  1053,    -1,   844,    41,    98,    -1,     4,     5,    -1,    -1,
+    -1,     9,   854,    -1,    -1,    -1,    54,    -1,    56,   437,
+  1073,   439,    -1,   441,   442,   443,    64,    -1,    -1,    -1,
+    -1,   873,  1085,    71,   452,  1356,  1357,  1358,   880,    -1,
+     7,     8,     9,    -1,    82,    83,    -1,    14,    -1,    -1,
+    48,    -1,    -1,    -1,    -1,    93,   898,    55,    -1,    57,
+    58,   432,  1078,  1079,   739,    32,    -1,   105,    -1,    -1,
+    37,    -1,   955,    71,   957,  1396,  1397,    -1,    -1,    46,
+    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,   930,    -1,
+   128,  1107,    -1,    91,    61,   133,    94,    95,    -1,   137,
+   138,    -1,    -1,    -1,    -1,   947,   144,    -1,    -1,   147,
+   148,   106,   107,   151,   152,   153,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   799,    -1,  1009,   165,    -1,    -1,
+    -1,   502,   974,   975,   505,    -1,   978,   812,   509,   814,
+    -1,   816,   180,   181,   182,     7,     8,     9,    -1,    -1,
+  1471,   522,    14,    -1,    -1,    -1,     3,     4,     5,     6,
+    -1,    -1,   533,    -1,    -1,    -1,   537,    -1,    -1,    -1,
+    32,   209,    -1,    -1,    -1,    37,    -1,  1193,  1194,   854,
+  1196,  1197,    -1,  1199,    46,    -1,   224,    -1,    -1,    -1,
+    -1,    -1,   563,    -1,   232,    42,    -1,    -1,   569,    61,
+  1042,    -1,  1044,    -1,  1046,   880,   244,  1049,    55,    -1,
+    57,    58,     3,     4,     5,     6,  1058,  1059,     9,    -1,
+    -1,  1063,  1064,   898,    71,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    81,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    89,    -1,   282,   283,  1088,    94,    -1,    -1,
+    -1,    42,    -1,    -1,    -1,    -1,    -1,    48,  1274,  1275,
+     3,     4,     5,  1146,    55,    -1,    57,    58,    -1,    -1,
+   688,   689,    -1,   691,     3,     4,     5,     6,    -1,    -1,
+    71,    -1,  1124,    -1,  1126,    -1,    -1,   325,    -1,    -1,
+    81,   329,    -1,   331,   332,   333,    39,    40,    89,    42,
+    91,    -1,  1185,    94,    95,    -1,  1189,    -1,    -1,  1151,
+   348,    -1,    55,    42,    57,    58,    -1,    -1,   313,    -1,
+    49,  1204,  1205,    -1,    -1,    -1,    -1,   365,    57,    58,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1220,    -1,  1181,
+  1356,  1357,  1358,    -1,    -1,    -1,    -1,    -1,   386,  1191,
+  1192,  1404,    81,    -1,   392,    -1,     3,     4,     5,     6,
+    89,    -1,     9,    -1,    -1,   403,    -1,  1042,   406,  1044,
+    -1,  1046,  1214,   411,    81,    -1,    -1,   415,    -1,    -1,
+  1396,  1397,     3,     4,     5,     6,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    42,    -1,   392,  1240,   437,
+    -1,   439,    -1,   441,   442,   443,    -1,    -1,    55,   447,
+    57,    58,  1295,  1296,   452,    -1,    -1,   455,    -1,    -1,
+    -1,    42,    -1,    -1,    71,    -1,    -1,    -1,    49,    -1,
+    -1,    -1,   803,    -1,    81,    -1,    57,    58,  1280,    -1,
+   435,    -1,    89,    -1,   862,   863,   864,    94,    -1,    -1,
+    -1,    -1,   159,    -1,    -1,  1471,    -1,    -1,    -1,  1301,
+    81,    -1,    -1,    -1,    -1,   836,  1349,  1350,    89,    -1,
+    -1,   178,   510,   511,   512,   513,  1151,    -1,    -1,    -1,
+   898,    -1,    -1,    -1,   191,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,    85,  1340,    -1,
+     3,     4,     5,     6,    -1,    -1,     9,   502,    -1,    -1,
+   505,    -1,  1354,  1355,   509,   510,   511,   512,   513,    -1,
+   938,  1363,    -1,    -1,    -1,    -1,    -1,   522,   566,    -1,
+   568,    -1,    -1,    -1,    -1,    -1,  1378,    -1,   533,    42,
+    -1,   579,    -1,   581,   582,    48,   584,    -1,   919,    -1,
+    -1,    -1,    55,   591,    57,    58,    -1,   595,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,
+   565,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,    91,   584,
+    -1,    94,    95,    -1,    -1,    -1,   591,    -1,    -1,    -1,
+    -1,   639,   640,   641,   642,   643,   644,    -1,    -1,    -1,
+  1028,  1029,  1030,  1031,  1032,    -1,    -1,    -1,  1036,    -1,
+    -1,    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,
+    -1,    -1,    -1,  1051,  1052,  1053,    -1,    -1,    -1,   677,
+    -1,    -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,
+   688,   689,    -1,   691,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    42,    -1,    -1,    -1,  1340,    -1,    48,  1510,    -1,
+     3,     4,     5,     6,    55,    -1,    57,    58,   716,    -1,
+    -1,    -1,  1053,   721,    -1,    -1,   681,    -1,   726,    -1,
+    71,    -1,    -1,    -1,    -1,   733,   734,   735,    -1,    -1,
+    81,    -1,    -1,    -1,    -1,    -1,    -1,   745,    89,    42,
+    91,    -1,    -1,    94,    95,    -1,    49,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    57,    58,   721,    -1,    -1,    -1,
+    -1,   726,    -1,    -1,    -1,    -1,  1154,  1155,   445,  1157,
+    -1,    -1,    -1,   450,    -1,    -1,    -1,    -1,    81,  1120,
+  1121,  1122,  1123,    -1,    -1,    -1,    89,   795,    -1,    -1,
+  1131,    -1,    -1,    -1,    -1,     3,     4,     5,     6,   476,
+    -1,     9,    -1,    -1,   481,    -1,    -1,  1195,    -1,   817,
+    -1,   819,    -1,    -1,    -1,    -1,   493,   494,   826,   496,
+    -1,    -1,   830,    -1,   832,    -1,   834,   835,   836,    -1,
+   795,    -1,    -1,   841,    42,    -1,    -1,    -1,    -1,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,
+    58,   859,    -1,   861,   862,   863,   864,    -1,    -1,    -1,
+    -1,   826,    -1,    71,    -1,    -1,    -1,   832,    -1,    -1,
+     4,   836,    -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    89,    -1,    91,    -1,    -1,    94,    95,    -1,    -1,
+   898,    -1,    26,    -1,   859,    -1,   861,    31,    32,   864,
+    -1,    -1,    36,  1244,   912,    -1,    -1,    41,    -1,    -1,
+   587,   588,    -1,    -1,    -1,   592,    -1,    -1,    -1,   927,
+    -1,    -1,    56,   931,    -1,   933,    -1,    -1,    -1,    -1,
+   938,   939,   940,   898,    -1,    -1,     4,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    14,   912,   956,    -1,
+   958,    79,  1340,    -1,   919,    -1,    24,    25,    26,    93,
+    -1,    -1,    -1,    31,    32,    -1,    34,    -1,    36,    -1,
+    -1,    -1,    -1,    41,    -1,   103,    -1,    -1,    -1,    -1,
+    -1,   989,   990,    -1,   992,  1326,    54,    -1,    56,    -1,
+    -1,   956,    -1,   958,    -1,    -1,    64,    -1,    -1,    -1,
+  1388,  1389,  1390,    71,   132,    -1,    -1,    -1,    -1,    -1,
+   144,    -1,    -1,    -1,   148,    83,    -1,    -1,   146,    -1,
+  1028,  1029,  1030,  1031,  1032,    93,    -1,    -1,  1036,    -1,
+    -1,   165,    -1,    -1,    -1,  1376,  1377,    -1,    -1,    -1,
+    -1,    -1,    -1,  1051,  1052,  1053,   180,   181,    -1,  1390,
+   727,    -1,   729,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   128,    -1,   190,    -1,    -1,  1073,  1407,  1032,    -1,   137,
+   138,    -1,    -1,    -1,    -1,    -1,   144,  1085,    -1,    -1,
+   148,    -1,    -1,   151,   152,   153,    -1,    -1,  1053,    -1,
+  1098,    -1,    -1,    -1,    -1,   223,    -1,   165,    -1,    -1,
+  1108,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1073,    -1,
+   244,    -1,   180,   181,   182,    -1,    -1,    -1,    -1,   247,
+  1085,    -1,    -1,    -1,   801,   802,  1467,   804,  1469,    -1,
+     4,     5,    -1,     7,     8,     9,    -1,    -1,    12,    -1,
+    14,   209,    -1,    -1,    -1,    -1,  1154,  1155,    -1,  1157,
+    -1,    -1,  1493,    -1,   831,    29,    -1,    31,    32,    -1,
+    -1,    -1,    -1,    37,    -1,    -1,    -1,  1508,    -1,  1177,
+    -1,    -1,    46,    -1,    48,    -1,   244,    -1,    -1,    -1,
+    -1,    55,    -1,    57,    58,    -1,    -1,  1195,    -1,   866,
+    -1,    -1,  1200,    -1,  1202,    -1,    -1,    71,     3,     4,
+     5,     6,    -1,    -1,    -1,    -1,    -1,    81,    -1,   337,
+    -1,    -1,  1177,    -1,   282,   283,    -1,    91,    -1,    -1,
+    94,    95,    -1,    -1,    98,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    85,    42,    -1,     3,
+     4,     5,     6,    48,    -1,  1253,  1254,  1255,    -1,    -1,
+    55,    -1,    57,    58,    -1,    -1,    -1,   325,    -1,    -1,
+    -1,   329,    -1,   331,   332,   333,    71,    -1,    -1,   403,
+   338,   399,   406,    -1,    -1,    -1,    81,   411,    42,    -1,
+   348,   415,    -1,    -1,    89,    -1,    91,    -1,    -1,    94,
+    95,    55,    -1,    57,    58,    -1,    -1,   365,    -1,    63,
+    -1,     4,     5,   437,    -1,   439,     9,    71,    -1,     4,
+     5,    -1,    -1,     8,     9,    -1,    -1,    81,   452,    14,
+    -1,    -1,    -1,    -1,   392,    89,    -1,  1004,    -1,    -1,
+    94,    -1,  1340,    -1,    29,   403,    31,    -1,   406,    -1,
+   468,    -1,    37,   411,    -1,    48,    -1,   415,    -1,    -1,
+    -1,    46,    55,    -1,    57,    58,    -1,    -1,  1035,    -1,
+    55,    -1,    57,    58,    59,    -1,    -1,   495,    71,   437,
+    -1,   439,    -1,   441,   442,   443,    -1,    -1,    81,   447,
+  1388,  1389,  1390,    -1,   452,    -1,    -1,   455,    91,    -1,
+    -1,    94,    95,    -1,    -1,  1072,  1404,    -1,    -1,    94,
+    -1,    -1,   470,    -1,    -1,    -1,    -1,  1084,    -1,    -1,
+    -1,  1419,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,     1,  1390,     3,     4,     5,     6,
+     7,     8,     9,    -1,  1111,    -1,    -1,    14,  1115,  1404,
+    -1,    -1,   510,   511,   512,   513,    -1,    -1,    -1,    -1,
+   578,    -1,    29,    -1,    31,    32,    33,    -1,    -1,    -1,
+    37,    38,    -1,    -1,    -1,    42,   594,    -1,    -1,    46,
+    47,  1148,    49,    -1,    -1,    -1,    -1,    -1,    55,    -1,
+    57,    58,    -1,    -1,    61,    -1,    63,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,   566,    -1,
+   568,    -1,    -1,    -1,    81,    -1,   640,    -1,    -1,    -1,
+    -1,    -1,    89,   581,   582,    -1,   584,    94,    -1,    -1,
+    -1,    -1,    -1,   591,    -1,    -1,    -1,    -1,    -1,  1206,
+  1207,    -1,    -1,    -1,   111,   603,    -1,    -1,    -1,     3,
+     4,     5,     6,    -1,    -1,    -1,    -1,   681,    -1,    -1,
+    -1,    -1,    -1,    -1,   688,   689,    -1,   691,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   634,    -1,    -1,    -1,
+    -1,   639,   640,   641,   642,   643,   644,    -1,    42,    -1,
+    -1,    -1,   716,    -1,    -1,    -1,    -1,    -1,    -1,   657,
+    -1,    55,  1269,    57,    58,    -1,  1273,    61,     1,    -1,
+     3,     4,     5,     6,     7,     8,     9,    71,    -1,   677,
+    -1,    14,    -1,   681,    -1,    -1,    -1,    81,    -1,    -1,
+   688,   689,    -1,   691,    -1,    89,    29,    -1,    31,    32,
+    94,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    42,
+    -1,    -1,    -1,    46,    47,    -1,    49,    -1,   716,    -1,
+    -1,    -1,    55,   721,    57,    58,    -1,    -1,   726,    -1,
+    63,     3,     4,     5,     6,   733,   734,   735,    71,     4,
+     5,    -1,    -1,     8,     9,    -1,    -1,   745,    81,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,
+    -1,    94,    -1,    -1,    29,    -1,    31,    -1,    -1,    -1,
+    42,    -1,    37,     4,    -1,    -1,    -1,    49,    -1,    -1,
+    -1,    46,   840,    48,   842,    57,    58,    -1,    -1,    -1,
+    55,    -1,    57,    58,    -1,    26,    -1,   795,   862,   863,
+    31,    32,    -1,    34,    -1,    36,    71,    -1,    -1,    81,
+    41,   869,    -1,    -1,    -1,    -1,    81,    89,    -1,   817,
+    -1,   819,    -1,    54,    -1,    56,    91,    -1,   826,    94,
+    95,    -1,   830,    -1,   832,    -1,   834,   835,   836,    -1,
+    -1,    -1,    -1,   841,    -1,    -1,    -1,    -1,    79,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   235,   428,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
-    -1,  1315,  1082,    -1,    -1,    -1,    -1,  1087,    -1,  1089,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
-     7,     8,    -1,   460,    11,   462,    13,    -1,   273,   274,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   474,   475,    -1,
-   477,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,
-    -1,  1131,  1132,    -1,  1134,    -1,    -1,    -1,    45,    -1,
-    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,   316,    -1,    -1,  1154,   320,    -1,   322,   323,   324,
-  1371,    -1,    -1,    70,   329,    -1,    -1,    -1,   333,    -1,
-    -1,    -1,    -1,    80,    -1,    -1,  1028,  1029,  1030,  1031,
-    -1,    -1,    -1,    90,  1036,   350,    93,    94,    -1,    -1,
-    97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1051,
-  1052,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   565,   566,
-    -1,   376,    -1,   570,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   386,    -1,    -1,   389,    -1,    -1,    -1,    -1,   394,
-    -1,    -1,    -1,   398,    -1,    -1,  1236,  1237,  1238,    -1,
-    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,    -1,
-    -1,    -1,    -1,    13,    -1,   420,    -1,   422,    -1,   424,
-   425,   426,   918,   919,    -1,   430,    -1,    -1,    -1,    -1,
-   435,    31,    -1,   438,    -1,    -1,    36,    -1,    -1,  1131,
-  1132,    41,  1134,    -1,    -1,    45,    -1,    47,   453,   454,
-    -1,   947,    -1,    -1,    54,    -1,    56,    57,     3,     4,
-     5,    -1,    -1,     8,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,  1315,    -1,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,   489,   490,   491,   492,    88,    -1,
-    90,    -1,    -1,    93,    94,    -1,    41,    -1,    -1,    -1,
-    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,    -1,    -1,    -1,  1356,  1357,  1358,    -1,
-    -1,   718,    -1,   720,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,  1371,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-   545,    -1,   547,    88,    -1,    90,  1386,    -1,    93,    94,
-    -1,    -1,    -1,    -1,   559,   560,    -1,   562,    -1,    -1,
-    -1,    -1,    -1,    -1,   569,     3,     4,     5,     6,     7,
-     8,    -1,    -1,    -1,    -1,    13,   581,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1080,  1081,    -1,  1083,  1084,    -1,
-  1086,    -1,    -1,    31,   791,   792,    -1,   794,    36,    -1,
-    -1,    -1,    -1,    41,    -1,   610,    -1,    45,    -1,    47,
-   615,   616,   617,   618,   619,   620,    54,    -1,    56,    57,
-    -1,    -1,   819,    -1,    -1,    -1,    -1,   632,    -1,    -1,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    80,    -1,    -1,     4,     5,   652,     7,     8,
-    88,   656,    90,    -1,    13,    93,    94,   854,   663,   664,
-    -1,   666,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    -1,    30,  1168,  1169,    -1,    -1,    -1,    36,     1,    -1,
-     3,     4,     5,     6,     7,     8,    45,    -1,   693,    -1,
-    13,    -1,   697,    -1,   699,    54,    -1,    56,    57,   704,
-   705,   706,    -1,    -1,    -1,    28,    -1,    30,    31,    32,
-   715,    -1,   717,    36,    37,   912,    -1,    -1,    41,   724,
-   725,   726,    45,    46,    -1,    48,    -1,   924,    -1,    -1,
-   735,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,
-    -1,  1237,  1238,    -1,     3,     4,     5,    70,    -1,     8,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-    -1,    -1,  1258,  1259,  1260,    88,    -1,    -1,    -1,    -1,
-    93,    -1,     3,     4,     5,    -1,    -1,     8,    -1,    -1,
-   785,    -1,    41,    -1,    -1,    -1,    -1,   110,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-   805,    -1,   807,    -1,    -1,    -1,    -1,  1004,    -1,   814,
-    41,    70,    -1,   818,    -1,   820,    47,   822,   823,   824,
-    -1,    80,    -1,    54,   829,    56,    57,    -1,    -1,    88,
-  1326,  1327,    -1,    -1,    93,    -1,    -1,    -1,  1035,    70,
-     4,    -1,   847,    -1,   849,   850,   851,   852,    -1,    80,
-     3,     4,     5,     6,     7,     8,    -1,    88,    -1,    90,
-    13,    25,    93,    94,    -1,    -1,    30,    31,    -1,    33,
-    -1,    35,     3,     4,     5,    28,    40,    30,    31,    -1,
-   885,    -1,    -1,    36,    -1,    -1,    -1,    51,    41,    53,
-    -1,    -1,    45,    -1,   899,  1092,  1093,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,    -1,   911,    -1,   913,    -1,
-    41,    -1,    76,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-   925,    74,    -1,    54,    88,    56,    57,    80,  1125,    -1,
-    -1,    62,    -1,    -1,    -1,    88,  1432,    -1,    -1,    70,
-    93,    -1,    -1,   948,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,   957,    -1,   959,    -1,    -1,    88,    -1,   123,
-    -1,    -1,    93,   127,   128,    -1,  1163,    -1,   132,    -1,
-  1167,    -1,    -1,    -1,   138,    -1,   140,    -1,   142,    -1,
-    -1,   145,   146,   147,    -1,   990,   991,    -1,   993,    -1,
-    -1,    -1,  1189,  1190,    -1,   159,    71,    72,    73,    74,
+    -1,   859,    93,   861,   862,   863,   864,   931,    -1,   933,
+    -1,    -1,    -1,    -1,   938,   939,   940,     3,     4,     5,
+     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,     4,     5,    -1,   128,     8,     9,
+   898,   132,   133,    -1,    14,    -1,   137,    -1,    -1,    -1,
+    -1,    -1,    -1,   144,   912,   146,    42,   148,    -1,    -1,
+   151,   152,   153,    49,    -1,    -1,   924,    37,    -1,   927,
+    -1,    57,    58,   931,   165,   933,    46,    -1,    48,    -1,
+   938,   939,   940,    -1,    -1,    55,    -1,    57,    58,   180,
+   181,   182,    -1,    -1,    -1,    81,    -1,  1015,   956,   190,
+   958,    71,    -1,    89,  1028,  1029,    -1,    -1,    -1,    -1,
+    -1,    81,  1036,    -1,    -1,    -1,  1034,    -1,   209,    -1,
+    -1,    91,    -1,    -1,    94,    95,    -1,    -1,    -1,    -1,
+    -1,   989,   990,    -1,   992,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,    85,   244,    -1,    -1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    -1,    -1,    12,    -1,    14,    -1,
+  1028,  1029,  1030,  1031,  1032,    -1,    -1,    -1,  1036,  1097,
+    -1,    -1,  1040,    29,  1108,    31,    32,    -1,    -1,    -1,
+    -1,    37,    -1,  1051,  1052,  1053,    42,    -1,    -1,    -1,
+    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+  1068,    57,    58,    -1,    -1,  1073,     4,     5,    -1,    -1,
+    -1,     9,   313,    -1,    -1,    71,    -1,  1085,    -1,    -1,
+  1154,  1155,    -1,  1157,    -1,    81,    -1,    -1,   329,    -1,
+    -1,    -1,    -1,    89,    -1,    91,   337,    -1,    94,    95,
+  1108,    -1,    98,    -1,    -1,    -1,    -1,   348,    -1,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,
+    58,  1195,    -1,    -1,   365,    -1,  1200,    -1,  1202,    -1,
+  1198,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    81,    -1,   386,  1154,  1155,    -1,  1157,
+    -1,    -1,    -1,    91,    -1,    -1,    94,    95,    -1,    -1,
+    -1,    -1,   403,    -1,    -1,   406,    -1,    -1,    -1,  1177,
+   411,    -1,    -1,    -1,   415,   331,   332,   333,    -1,    -1,
+  1254,    -1,    -1,    -1,    -1,    -1,    -1,  1195,    -1,    -1,
+    -1,    -1,  1200,    -1,  1202,    -1,   437,    -1,   439,    -1,
+   441,   442,   443,    -1,    -1,    -1,   447,    -1,    -1,    -1,
+    -1,   452,    -1,    -1,   455,    70,    71,    72,    73,    74,
     75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-   174,   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   184,    -1,    -1,  1028,  1029,  1030,  1031,  1032,    -1,    -1,
-     1,  1036,    -1,     4,     5,  1040,     7,     8,    -1,   203,
-    -1,    -1,    13,    -1,    -1,    -1,  1051,  1052,  1053,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    -1,    -1,    -1,  1068,    -1,    36,    -1,    38,    39,    -1,
-    -1,   235,    -1,    -1,    45,    -1,    47,  1082,    -1,    -1,
-    -1,    -1,  1087,    54,  1089,    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,    -1,    -1,  1131,  1132,    -1,  1134,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   303,
-   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,  1154,
-     3,     4,     5,     6,     7,     8,   320,    -1,    -1,    -1,
-    13,     3,     4,     5,   328,    -1,     8,    -1,    -1,   333,
-    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,   350,    -1,    41,    -1,
-    -1,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,    41,
-    -1,    54,    -1,    56,    57,    -1,    -1,   371,    -1,    62,
-    -1,    -1,    54,    -1,    56,    57,    -1,    70,    -1,     3,
-     4,     5,   386,    -1,     8,   389,    -1,    80,    70,    33,
-   394,  1236,  1237,  1238,   398,    88,    -1,    -1,    80,    -1,
-    93,     3,     4,     5,    -1,    -1,    88,    51,    -1,    -1,
-    -1,    93,    -1,    -1,    -1,    -1,   420,    41,   422,    -1,
-   424,   425,   426,    -1,    -1,    -1,   430,    -1,    -1,    -1,
-    54,   435,    56,    57,   438,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,     4,    70,    -1,    -1,    -1,
-   454,    -1,    54,    -1,    56,    57,    80,    -1,    -1,    -1,
-    62,    -1,    -1,    -1,    88,    -1,    25,    -1,    70,    93,
-  1315,    30,    31,    -1,    33,    -1,    35,   481,    80,    -1,
-   484,    40,    -1,    -1,    -1,    -1,    88,    -1,   132,    -1,
-    -1,    93,    51,    -1,    53,   499,   500,   501,    -1,    -1,
-    -1,   145,   146,   147,    -1,    -1,    -1,    -1,   512,    -1,
-    -1,  1356,  1357,  1358,    -1,    -1,     1,    -1,     3,     4,
-     5,     6,     7,     8,    -1,    -1,  1371,    -1,    13,    88,
-   174,   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,  1386,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
-    -1,    36,   556,    -1,    -1,    -1,    41,    -1,    -1,   203,
-    45,    46,    -1,    48,    -1,   569,    -1,    -1,    -1,    54,
-    -1,    56,    57,   132,    -1,    60,    -1,    62,    -1,   138,
-    -1,    -1,    -1,   142,    -1,    70,   145,   146,   147,    -1,
-    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-   159,     4,     5,    88,     7,     8,    -1,    -1,    93,    -1,
-    13,   615,   616,   617,   618,   174,   175,   176,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    -1,    -1,
-   274,    -1,    -1,    36,    80,    -1,    -1,    -1,    -1,    85,
-    -1,    87,    45,    -1,   203,    -1,    -1,    -1,   652,    -1,
-    -1,    54,   656,    56,    57,   101,   102,    -1,    -1,   663,
-   664,    -1,   666,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,   235,    -1,   322,   323,
-   324,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   333,
-   136,    -1,    -1,   697,    -1,   699,    -1,    -1,    -1,    -1,
-   704,   705,   706,    -1,    -1,    -1,     1,    -1,     3,     4,
-     5,     6,     7,     8,    -1,    -1,    -1,    -1,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,   729,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
-    -1,    36,    37,    -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,
-   329,    -1,    -1,    -1,   333,    70,   420,    -1,   422,    -1,
-   424,   425,   426,    -1,    -1,    80,   430,    -1,    -1,    -1,
-    -1,   435,    -1,    88,   438,    -1,    -1,    -1,    93,    -1,
-    -1,    -1,     4,     5,    -1,     7,     8,    -1,    -1,    -1,
-    -1,    13,    -1,    -1,    -1,   110,    -1,    -1,   822,   823,
-   824,    -1,    -1,    -1,   828,    -1,    -1,   386,    -1,    -1,
-   389,    -1,    -1,    -1,    36,   394,    -1,    -1,    -1,   398,
-    -1,    -1,    -1,    45,    -1,    47,   850,   851,   852,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,   303,    -1,    -1,
-    -1,   420,    -1,   422,    -1,   424,   425,   426,    70,    -1,
-   316,   430,    -1,     3,     4,     5,   435,    -1,    80,   438,
-    -1,   885,    -1,    -1,    -1,    -1,    -1,    -1,    90,    -1,
-    -1,    93,    94,    -1,    -1,   454,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   547,     4,     5,    -1,     7,     8,    -1,
-    -1,    41,    -1,    13,    -1,   559,   560,    -1,   562,    -1,
-    -1,    -1,    -1,    -1,    54,   569,    56,    57,    -1,    -1,
-   376,    -1,    -1,   937,    -1,    -1,    36,    -1,    -1,    -1,
-    70,    -1,    -1,    -1,   948,    45,    -1,    47,    -1,    -1,
-    80,    -1,    -1,    -1,    54,    -1,    56,    57,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,   615,   418,   617,   618,    -1,   620,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,   557,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   652,    -1,
-    -1,  1015,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   663,
-   664,    -1,   666,    -1,  1028,  1029,  1030,  1031,  1032,    -1,
-  1034,    -1,  1036,    -1,    -1,   481,    -1,    -1,   484,    -1,
-    -1,    -1,   488,   489,   490,   491,   492,  1051,  1052,  1053,
-    -1,    -1,    -1,    -1,    -1,   501,   615,   616,   617,   618,
-   704,    -1,   508,    -1,    -1,    -1,   512,    -1,     4,     5,
-    -1,     7,     8,    -1,    -1,    -1,    -1,    13,  1082,    -1,
-   724,   725,   726,  1087,    -1,  1089,    -1,    -1,    -1,    -1,
-    -1,   735,    28,   652,    30,    -1,    -1,   656,   544,   545,
-    36,    -1,    -1,    -1,   663,   664,    -1,   666,    -1,    45,
-    -1,    -1,    -1,    -1,    -1,    -1,   562,    -1,    54,    -1,
-    56,    57,    -1,   569,    -1,    -1,    -1,  1131,  1132,    -1,
-  1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   697,    -1,
-   699,    -1,    -1,    -1,    -1,   704,   705,   706,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-    -1,   805,    -1,   807,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    51,   818,    -1,    -1,    -1,   822,   823,
-   824,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-     4,     5,    -1,    -1,     8,    -1,    -1,    -1,    76,    -1,
-    -1,    79,    -1,    -1,    -1,    -1,   850,   851,   852,    -1,
-   656,    -1,     4,     5,     6,     7,     8,    -1,    -1,    11,
-    98,    13,   100,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    -1,  1236,  1237,  1238,    -1,    28,    -1,    30,    31,
-    54,   885,    56,    57,    36,    -1,    -1,    -1,    -1,    -1,
-     3,     4,     5,    45,   132,     8,    70,    -1,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    80,    -1,    -1,   715,
-   829,   717,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,
-    -1,     4,     5,     6,     7,     8,    -1,    -1,    41,    -1,
-    13,   850,   851,   852,    -1,    -1,   174,   175,   176,    -1,
-    -1,    54,    -1,    56,    57,    28,   184,    30,    31,    -1,
-    -1,  1315,    -1,    36,    -1,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,    45,    -1,    -1,   203,   885,    80,    -1,    -1,
-    -1,    54,    -1,    56,    57,    88,    -1,    -1,    -1,   785,
-    93,    -1,    -1,     3,     4,     5,   990,   991,   226,   993,
-    -1,    -1,  1356,  1357,  1358,    -1,    -1,    -1,    -1,    -1,
-   238,    -1,    -1,    -1,     3,     4,     5,    -1,   814,    -1,
-    -1,    -1,    -1,    -1,   820,    -1,    -1,    -1,   824,    -1,
-    -1,    41,  1386,    -1,  1028,  1029,  1030,  1031,  1032,   948,
-    -1,    -1,  1036,    -1,    54,    -1,    56,    57,    -1,    -1,
-    -1,   847,    41,   849,    -1,    -1,   852,  1051,  1052,  1053,
-    70,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
-    -1,    70,    -1,    93,    -1,   322,   323,   324,  1082,   885,
-    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,
-   328,   329,    -1,   899,    93,   333,    -1,    -1,    -1,    -1,
-   906,    -1,    -1,    -1,    -1,    -1,    -1,   913,    -1,  1028,
-  1029,  1030,  1031,  1032,    -1,    -1,    -1,  1036,    -1,   925,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1131,  1132,    -1,
-  1134,    -1,  1051,  1052,  1053,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,   957,    -1,   959,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1082,    -1,    -1,    -1,    -1,  1087,    -1,
-  1089,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   420,    -1,   422,    -1,   424,   425,   426,    -1,
-    -1,    -1,   430,    -1,    -1,    -1,    -1,   435,    -1,    -1,
-   438,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1131,  1132,    -1,  1134,    -1,     4,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1032,    -1,    -1,    -1,
-    -1,    -1,  1236,    -1,  1238,    -1,    -1,    -1,    25,    -1,
-    -1,    -1,    -1,    30,    31,    -1,    -1,  1053,    35,    -1,
-    -1,    -1,    -1,    40,     3,     4,     5,     6,     7,     8,
-    -1,    -1,    -1,    -1,    13,    -1,    53,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    28,
-    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    47,    -1,
-    -1,    88,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,  1315,   559,   560,    -1,   562,    -1,  1236,  1237,  1238,
-    -1,    70,   569,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    80,    -1,    -1,   572,   573,    -1,    -1,    -1,    88,
-    -1,    90,    -1,    -1,    93,    94,    -1,    -1,  1154,    -1,
-    -1,   138,  1356,  1357,  1358,   142,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   615,    -1,
-   617,   618,   159,   620,    -1,    -1,    -1,   615,    -1,   617,
-   618,    -1,  1386,    -1,    -1,    -1,    -1,   174,   175,    -1,
-    -1,    -1,    -1,    13,    -1,    -1,  1315,    -1,    -1,    -1,
-    -1,    -1,    -1,    23,    24,   652,    -1,    -1,    -1,    -1,
-    30,    31,    -1,    33,   652,    -1,    -1,    -1,     4,     5,
-     6,     7,     8,    -1,    -1,   663,   664,    13,   666,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1356,  1357,  1358,
-    -1,    61,    28,    -1,    30,    31,    -1,    -1,   235,    -1,
-    36,    -1,   690,    -1,    -1,    -1,    -1,    -1,    -1,    45,
-    -1,    -1,    -1,    -1,    -1,    -1,   704,  1386,    54,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,     7,     8,    -1,    -1,    -1,    -1,    13,   735,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,
-   120,    -1,    28,   123,    30,    31,    -1,   127,   128,    -1,
-    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,   138,    45,
-   140,   141,   142,    -1,    -1,   145,   146,   147,    54,    -1,
-    56,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,  1345,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1358,    -1,    80,    -1,    -1,    -1,   805,    -1,
-   807,    -1,    88,    -1,    -1,  1371,    -1,    93,  1374,    -1,
-    -1,   818,    -1,    -1,    -1,   822,   823,   824,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   828,   829,   830,    -1,    -1,    -1,    -1,   217,   218,   386,
-    -1,    -1,   389,   850,   851,   852,    -1,   394,    -1,    -1,
-    -1,   398,   850,   851,   852,   235,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1430,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   420,    -1,   422,    -1,    -1,   885,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   885,   435,    -1,
-    -1,    -1,    -1,    -1,   274,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,   454,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    -1,     1,    -1,
-     3,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   937,
-   320,    -1,   322,   323,    -1,    28,    -1,    30,    31,    32,
-    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-   350,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    62,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-    -1,   371,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
-    -1,    -1,   382,    -1,    -1,    88,   386,    -1,    -1,   389,
-    93,    -1,    -1,    -1,   394,    -1,    -1,  1015,    -1,    -1,
-    -1,  1028,  1029,  1030,  1031,  1032,    -1,   110,    -1,  1036,
-  1028,  1029,  1030,  1031,  1032,    -1,  1034,    -1,  1036,    -1,
-    -1,    -1,    -1,    -1,  1051,  1052,  1053,    -1,    -1,    -1,
-    -1,    -1,    -1,  1051,  1052,  1053,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   616,
-    -1,   451,    -1,   453,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1082,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   476,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   656,
-    -1,    -1,    -1,    -1,    -1,    -1,   663,   664,    -1,   666,
-    -1,    -1,    -1,    -1,  1131,  1132,    -1,  1134,    -1,    -1,
-    11,    -1,    -1,  1131,  1132,    -1,  1134,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   697,    -1,   699,    -1,    -1,    -1,    -1,   704,   705,   706,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   547,    -1,    -1,
-    -1,    -1,    31,    -1,    -1,    -1,   556,   557,    -1,   559,
-   560,    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,    -1,    -1,    -1,    -1,
-   610,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1236,   619,
-  1238,    -1,     1,    -1,     3,     4,     5,     6,     7,     8,
-     9,    10,   632,    12,    13,    14,    -1,    16,    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,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
-    -1,    60,    61,   850,   851,    -1,    -1,    -1,    67,    -1,
-   690,    70,    -1,   693,    -1,    -1,    -1,  1315,    -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,   724,   725,   726,    -1,    -1,    -1,
-    -1,   110,   111,    -1,    -1,   735,    -1,    -1,  1356,  1357,
-  1358,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
+    85,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    12,    -1,    14,  1253,  1254,  1255,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,    28,    -1,
+    -1,   502,    32,    -1,   505,    -1,    -1,    37,    -1,    -1,
+    -1,    -1,    42,    -1,    -1,    -1,    46,    -1,    48,   520,
+   521,   522,    -1,    -1,    -1,    55,    -1,    57,    58,    59,
+    60,    61,   533,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    -1,    87,    88,    89,
+    -1,    91,    92,    93,    94,    95,    96,    -1,    98,    99,
+    -1,    -1,  1340,     4,   104,    -1,    -1,   578,    -1,   109,
+   110,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,
+   591,    -1,    -1,    -1,    -1,    26,    -1,    -1,    -1,    -1,
+    31,    32,    -1,    34,    -1,    36,     3,     4,     5,     6,
+    41,    -1,     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+  1388,  1389,  1390,    54,    -1,    56,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1404,    -1,   639,   640,
+   641,   642,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
+    -1,  1419,    -1,    -1,    -1,    -1,    -1,    34,    55,    -1,
+    57,    58,    93,    -1,    -1,   581,   582,    -1,   584,    -1,
+    -1,    -1,    -1,    -1,    71,   591,   677,    54,    -1,    -1,
+   681,    -1,    -1,    -1,    81,    -1,    -1,   688,   689,    -1,
+   691,    -1,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,
+    -1,    -1,    -1,    -1,     4,     5,   137,    -1,     8,     9,
+    -1,    -1,    -1,   144,    14,   716,    -1,   148,    -1,    -1,
+   151,   152,   153,   639,    -1,   641,   642,    -1,   644,    -1,
+     3,     4,     5,     6,   165,    -1,     9,    37,   739,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    48,   180,
+   181,   182,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,
+   137,   677,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+    -1,    71,    -1,    -1,   151,   152,   153,    -1,   209,    -1,
+    -1,    81,    55,    -1,    57,    58,     3,     4,     5,     6,
+    -1,    91,     9,    -1,    94,    95,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,   180,   181,   182,    -1,    -1,    81,    -1,
+    -1,    -1,    -1,   244,    -1,    -1,    89,    -1,    -1,    -1,
+    -1,    94,    -1,    -1,    -1,    42,    -1,    -1,    -1,   745,
+    -1,    -1,   209,   834,   835,   836,    -1,    -1,    55,   840,
+    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,   862,   863,   864,    81,    -1,    -1,    -1,   869,    -1,
+    -1,    -1,    89,   331,   332,   333,    -1,    94,    69,    70,
     71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    -1,    -1,    -1,    -1,  1386,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   948,    -1,    -1,    -1,    -1,     1,   108,     3,     4,
-     5,     6,     7,     8,     9,    10,    11,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,   805,    -1,   807,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    31,    32,   818,    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,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,  1028,  1029,    78,    79,    80,    -1,    -1,    -1,  1036,
-    -1,    86,    87,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,    -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   111,     1,    -1,     3,
-     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,    13,
-    -1,   911,    -1,    -1,    -1,  1082,    -1,    -1,    -1,    -1,
-  1087,    -1,  1089,    -1,    28,    -1,    30,    31,    32,    -1,
-    -1,    -1,    36,    37,    -1,    -1,    -1,    41,   938,    -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,  1131,  1132,    70,  1134,     1,    -1,
-     3,     4,     5,     6,     7,     8,    80,    -1,    -1,    -1,
-    13,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,
-   990,   991,    -1,   993,    -1,    28,    -1,    30,    31,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,   110,    -1,    41,    -1,
-    -1,    -1,    45,    -1,    -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,
-  1040,    -1,    -1,    -1,    -1,    -1,     1,    80,     3,     4,
-     5,     6,     7,     8,    -1,    88,    11,    -1,    13,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1068,    24,
-  1237,    26,    27,    -1,    -1,    -1,    31,    -1,    -1,    -1,
-    -1,    36,    -1,    -1,    -1,  1085,    41,  1087,    -1,    -1,
-    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    81,    82,    83,    84,    85,    -1,    -1,   898,    -1,    -1,
+    -1,   817,    -1,   819,    -1,    -1,   283,   338,    -1,    -1,
+    -1,    -1,    -1,    -1,   830,    -1,    -1,   348,   834,   835,
+   836,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   931,    -1,   933,    -1,    -1,    -1,    -1,   938,   939,   940,
+    -1,    -1,    -1,    -1,    -1,    -1,   862,   863,   864,    -1,
+    -1,    -1,    -1,    54,   331,   332,   333,    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,    98,    -1,    -1,    -1,    -1,   103,    -1,
-    -1,    -1,    -1,   108,   109,   110,     1,   112,     3,     4,
-     5,     6,     7,     8,     9,    10,    -1,    12,    13,    14,
-    -1,    16,    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,    -1,
-    45,    -1,    -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,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    -1,    -1,    -1,    -1,   111,    -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,    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,    90,    -1,
-    -1,    93,    94,    -1,     1,    97,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    -1,    -1,   111,
+    85,   348,   403,    -1,    -1,   406,    -1,    -1,    79,    -1,
+   411,    82,   898,    -1,   415,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    -1,    -1,   103,    -1,   105,    -1,   437,    -1,   439,    -1,
+   441,   442,   443,    -1,  1015,    -1,   447,    -1,    -1,    -1,
+    -1,   452,    -1,    -1,   455,    -1,    -1,  1028,  1029,  1030,
+  1031,  1032,    -1,  1034,    -1,  1036,   137,    -1,    -1,    -1,
+    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+  1051,  1052,  1053,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+   437,    -1,   439,    -1,   441,   442,   443,    -1,    -1,    29,
+   447,    31,    32,    -1,    -1,   452,    -1,    37,   455,   180,
+   181,   182,    42,    -1,    -1,    -1,    46,    -1,    -1,   190,
+    -1,    -1,    -1,    -1,    -1,    55,  1097,    57,    58,    -1,
+    -1,    61,    -1,    -1,    -1,    -1,    -1,  1108,   209,    -1,
+    -1,    71,  1028,  1029,  1030,  1031,  1032,    -1,    -1,    -1,
+  1036,    81,    -1,   581,   582,    -1,    -1,    -1,    -1,    89,
+    -1,   232,    -1,    -1,    94,  1051,  1052,  1053,     3,     4,
+     5,     6,    -1,    -1,     9,    -1,   247,    -1,   579,    -1,
+    -1,    -1,    -1,  1154,  1155,    -1,  1157,    -1,    -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,    -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,    -1,     1,
-    97,     3,     4,     5,     6,     7,     8,     9,    10,    -1,
-    12,    13,   109,    -1,   111,    -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,    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,    -1,     7,     8,     9,    10,
-    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -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,    94,     1,    -1,     3,     4,     5,    -1,
-     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,   110,
-   111,    -1,    -1,    20,    -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,     3,
-     4,     5,    -1,     7,     8,     9,    10,    -1,    12,    13,
-    -1,    -1,    -1,   110,   111,    -1,    20,    -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,    -1,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,    -1,    -1,   110,   111,    -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,    94,     1,    -1,     3,     4,     5,    -1,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,    -1,   111,    -1,
-    -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,    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,    -1,     7,
-     8,     9,    10,   102,    12,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -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,    -1,
-     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,    -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,
-    -1,     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,    -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,    -1,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,   111,    -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,    -1,     7,     8,     9,    10,    -1,    12,    13,
-    -1,    -1,    -1,    -1,    -1,    -1,   111,    -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,
-    -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,    -1,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -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,     3,     4,     5,    -1,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,   109,    -1,   111,    -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,     3,     4,     5,    -1,     7,     8,     9,    10,
-    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -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,     3,     4,     5,    -1,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-   111,    -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,
-     3,     4,     5,    93,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,    -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,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,   111,   112,
-     3,     4,     5,     6,     7,     8,     9,    10,    -1,    12,
-    13,    14,    -1,    16,    17,    18,    19,    20,    21,    22,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,
+    -1,   639,    -1,   641,   642,    -1,   644,    -1,    -1,    -1,
+    55,   568,    57,    58,  1195,    -1,    -1,    -1,    -1,  1200,
+    -1,  1202,    -1,    -1,   581,   582,    71,   584,   639,   640,
+   641,   642,    -1,    -1,   591,    -1,    81,    -1,    -1,   677,
+    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,
+    -1,    -1,    -1,    -1,    -1,    -1,   337,   338,  1154,  1155,
+    -1,  1157,     3,     4,     5,     6,   677,   348,     9,    -1,
+   681,    -1,  1253,  1254,  1255,    -1,    -1,   688,   689,    -1,
+   691,    -1,   639,    -1,   641,   642,    -1,   644,    -1,     3,
+     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,    -1,
+    -1,    42,    -1,    -1,    -1,   716,    -1,   745,    -1,    -1,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,    -1,
+   677,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,
+    71,   688,   689,    -1,   691,    -1,    -1,    -1,    -1,    -1,
+    81,    55,    -1,    57,    58,    -1,    -1,    -1,    89,    -1,
+    -1,    -1,    -1,    94,    -1,    -1,   437,    71,   439,  1340,
+   441,   442,   443,    -1,    -1,    -1,   447,    81,    -1,    -1,
+    -1,   452,    -1,    -1,   455,    89,   733,   734,   735,   817,
+    94,   819,    -1,    -1,    -1,    -1,    -1,    -1,   745,    -1,
+     4,     5,   830,    -1,     8,     9,   834,   835,    -1,    -1,
+    14,    -1,    -1,     3,     4,     5,     6,  1388,  1389,  1390,
+    -1,    -1,    -1,    -1,    -1,    29,    -1,    31,    -1,    -1,
+    -1,    -1,    -1,    37,   862,   863,    -1,    -1,    -1,    -1,
+   841,    -1,    46,    -1,    -1,    -1,    -1,    -1,  1419,    -1,
+    -1,    55,    42,    57,    58,    -1,    -1,    -1,    -1,    -1,
+    -1,   862,   863,   864,    -1,    55,    -1,    57,    58,    -1,
+   817,    -1,   819,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    71,    -1,   830,    -1,    -1,    -1,   834,   835,   836,
+    94,    81,    -1,    -1,    -1,    -1,    -1,   898,    -1,    89,
+    -1,    -1,    -1,    -1,    94,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    -1,   862,   863,   864,    14,    -1,
+    -1,    -1,    -1,   594,   595,    -1,    -1,    -1,    -1,    -1,
+   931,    -1,   933,    29,    -1,    31,    32,   938,   939,   940,
+    -1,    37,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
+    46,   898,    -1,    49,    -1,    -1,    -1,    -1,    -1,    55,
+    -1,    57,    58,    -1,    -1,    61,    -1,    -1,   639,    -1,
+   641,   642,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
+    -1,   938,    -1,    89,    -1,    -1,    -1,    -1,    94,    -1,
+  1028,  1029,  1030,  1031,    -1,    -1,   677,    -1,  1036,    -1,
+     3,     4,     5,     6,    -1,    -1,     9,   688,   689,    -1,
+   691,    -1,    -1,  1051,  1052,    -1,    -1,  1028,  1029,  1030,
+  1031,  1032,    -1,    -1,    -1,  1036,    -1,    -1,    -1,    -1,
+    -1,    -1,   989,   990,   715,   992,    -1,    -1,    -1,    42,
+  1051,  1052,  1053,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    -1,     3,
+     4,     5,     6,     7,     8,     9,    -1,    -1,    71,    -1,
+    14,  1028,  1029,  1030,  1031,  1032,    -1,    -1,    81,  1036,
+    -1,    -1,    -1,    -1,    -1,    29,    89,    31,    32,    -1,
+    -1,    94,    -1,    37,  1051,  1052,  1053,  1108,    42,    -1,
+    -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+    -1,    55,    -1,    57,    58,    -1,  1154,  1155,    -1,  1157,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,     3,     4,
+     5,     6,    -1,  1154,  1155,    89,  1157,    91,    -1,    -1,
+    94,    95,    14,    -1,    -1,     3,     4,     5,     6,   840,
+   841,   842,    24,    25,    -1,    -1,    -1,    -1,    -1,    31,
+    32,    -1,    34,    -1,    -1,    -1,    -1,    42,    -1,    -1,
+    -1,   862,   863,   864,  1195,    -1,    -1,    -1,   869,  1200,
+    55,  1202,    57,    58,    42,    -1,    61,  1154,  1155,    -1,
+  1157,    -1,    64,    -1,    -1,    -1,    71,    55,    -1,    57,
+    58,    -1,    -1,    -1,    -1,    -1,    81,   898,    -1,    -1,
+    -1,    -1,    -1,    71,    89,    -1,    -1,    -1,    -1,    94,
+    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,  1195,    -1,
+    -1,    89,  1253,  1254,  1255,    -1,    94,     1,    -1,     3,
+     4,     5,     6,     7,     8,     9,    -1,   938,    -1,    -1,
+    14,   123,    -1,   125,    -1,    -1,   128,    -1,    -1,    -1,
+   132,   133,    -1,    -1,    -1,    29,    -1,    31,    32,    33,
+    -1,    -1,   144,    37,   146,   147,   148,    -1,    42,   151,
+   152,   153,    46,    47,    -1,    49,  1253,    -1,  1255,    -1,
+    -1,    55,    -1,    57,    58,    -1,    -1,    61,    -1,    63,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
+    -1,     3,     4,     5,     6,    -1,    -1,    81,    -1,  1340,
+    -1,    -1,    -1,    -1,  1015,    89,    -1,    -1,    -1,    -1,
+    94,    -1,    -1,    -1,    -1,    -1,    -1,  1028,  1029,  1030,
+  1031,  1032,    -1,  1034,    -1,  1036,    -1,    -1,    -1,    -1,
+    42,   223,   224,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+  1051,  1052,  1053,    55,    -1,    57,    58,  1388,  1389,  1390,
+    -1,    -1,   244,  1340,    -1,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    81,
+     3,     4,     5,     6,     7,     8,     9,    89,  1419,    -1,
+    -1,    14,    94,    -1,    -1,    -1,  1097,    -1,    -1,    -1,
+    -1,   283,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,
+    33,  1388,  1389,  1390,    37,    38,    -1,    -1,    -1,    42,
+    -1,    -1,    -1,    46,    47,    -1,    49,    -1,    -1,    -1,
+    -1,    -1,    55,    -1,    57,    58,    -1,    -1,    61,    -1,
+    63,    -1,  1419,    -1,    -1,    -1,    -1,   329,    71,   331,
+   332,    -1,    -1,  1154,  1155,    -1,  1157,    -1,    81,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,
+    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   365,    -1,    -1,    -1,    -1,   111,    -1,
+    -1,    -1,    -1,    -1,  1195,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   386,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    -1,    -1,    -1,   399,    14,    -1,
+    -1,   403,    -1,    -1,   406,    -1,    -1,    -1,    -1,   411,
+    -1,    -1,    -1,    29,    -1,    31,    32,    33,    -1,    -1,
+    -1,    37,    38,    -1,    -1,    -1,    42,    -1,    -1,    -1,
+    46,    47,  1253,    49,  1255,    -1,    -1,    -1,    -1,    55,
+    -1,    57,    58,    -1,    -1,    61,    -1,    63,    -1,     4,
+     5,    -1,     7,     8,     9,    71,    -1,    12,    -1,    14,
+    -1,    -1,    -1,    -1,    -1,    81,   468,    -1,   470,    -1,
+    -1,    -1,    -1,    89,    29,    -1,    31,    32,    94,    -1,
+    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    46,    -1,   495,    -1,   111,    -1,    -1,    -1,    -1,
+    55,    -1,    57,    58,     1,    -1,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    -1,    13,    14,    15,  1340,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    -1,    35,    36,
+    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
+    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
+    57,    58,    59,    -1,    61,    62,   568,  1388,  1389,  1390,
+    -1,    68,    -1,    -1,    71,    -1,   578,   579,    -1,   581,
+   582,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+    87,    88,    89,    -1,    -1,    -1,    -1,    94,  1419,    96,
+     4,     5,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,    -1,    -1,   111,   112,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,    -1,
+    -1,    -1,   634,    37,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   643,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    55,    -1,    57,    58,   657,    -1,    -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,    -1,    45,    -1,    -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,    -1,   110,   111,     3,
-     4,     5,     6,     7,     8,     9,    10,    -1,    12,    13,
-    14,    -1,    16,    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,
-    -1,    45,    -1,    -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,     3,     4,     5,     6,     7,
-     8,     9,    10,    -1,    12,    13,    14,   111,    16,    17,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
+    53,    54,    55,   715,    57,    58,    59,    -1,    61,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,   733,   734,   735,    -1,    -1,    79,    80,    81,    -1,
+    -1,    -1,    -1,   745,    87,    88,    89,    -1,    -1,    -1,
+    -1,    94,     1,    96,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,   112,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    30,    31,    32,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    48,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    59,    -1,    -1,    62,    -1,   817,    -1,   819,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,   830,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,    -1,    91,    -1,    -1,    94,    95,    -1,     1,    98,
+     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+    13,    14,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    48,    -1,    50,    51,    52,
+    53,    54,    55,    -1,    57,    58,    59,    -1,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,    -1,   924,    -1,    -1,   927,    79,    80,    81,    -1,
+    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    91,    -1,
+    -1,    94,    95,    -1,    -1,    98,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
+    -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,    -1,    -1,   989,   990,    -1,
+   992,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,  1040,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
+    98,    -1,    -1,    -1,    -1,    -1,  1068,    -1,    -1,    -1,
+    -1,    -1,   110,     1,   112,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1098,    -1,    -1,    -1,
+    -1,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    59,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    -1,    -1,     1,    94,     3,     4,     5,
+     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    29,    30,    31,  1198,    33,  1200,    35,
+    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
+    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
+    -1,    57,    58,    59,    -1,    -1,    62,    -1,    -1,    -1,
+    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
+    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,    95,
+     1,    -1,     3,     4,     5,     6,    -1,     8,     9,    10,
+    11,    -1,    13,    14,    -1,   111,   112,    -1,    -1,    -1,
+    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
+    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
+    51,    52,    53,    54,    55,    -1,    57,    58,    59,    -1,
+    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,
+    -1,    -1,     1,    94,     3,     4,     5,     6,    -1,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+   111,   112,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,    -1,    -1,    -1,     1,    94,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,
+    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
+    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
+    57,    58,    59,    -1,    -1,    62,    -1,    -1,    -1,    -1,
+    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+    87,    88,    89,    -1,    -1,    -1,    -1,    94,    95,     1,
+    -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,   112,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
+    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
+    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
+    52,    53,    54,    55,    -1,    57,    58,    59,    -1,    -1,
+    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
+    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
+    -1,    -1,    94,    -1,    -1,     1,    -1,     3,     4,     5,
+     6,   103,     8,     9,    10,    11,    -1,    13,    14,    -1,
+   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,
+    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
+    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
+    -1,    57,    58,    59,    -1,    -1,    62,    -1,    -1,    -1,
+    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
+    -1,    87,    88,    89,    -1,    -1,    -1,     1,    94,     3,
+     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    59,    -1,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,     1,
+    94,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,   112,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
+    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
+    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
+    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
+    62,    63,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
+    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,
+    -1,     1,    94,     3,     4,     5,     6,    -1,     8,     9,
+    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
+   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
+    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,
+    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,
+    50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+    -1,    -1,    -1,     1,    94,     3,     4,     5,     6,    -1,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    -1,    -1,     1,    94,     3,     4,     5,
+     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,
+    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
+    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
+    -1,    57,    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,
+    -1,    -1,    68,     1,    -1,    71,     4,     5,    -1,    -1,
+     8,     9,    -1,    79,    80,    81,    14,    -1,    -1,    -1,
+    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    94,    -1,
+    -1,    29,    -1,    31,    -1,    -1,    -1,    -1,    -1,    37,
+    -1,    39,    40,    -1,   110,    -1,   112,    -1,    46,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,
+    58,    -1,    60,    -1,    -1,    -1,    64,    65,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,    -1,    -1,    87,
+    88,    89,    -1,    -1,    92,    -1,     1,    95,     3,     4,
+     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,
+    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
+    55,    -1,    57,    58,    -1,    -1,    -1,    62,    -1,    -1,
+    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+    -1,    -1,    87,    88,    89,    -1,    -1,    -1,     1,    94,
+     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    -1,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
+    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,
+    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,
+     1,    94,     3,     4,     5,     6,    -1,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,   112,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
+    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
+    51,    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,
+    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,     3,
+     4,     5,     6,    94,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   112,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,     1,    71,     3,     4,
+     5,     6,     7,     8,     9,    79,    80,    81,    -1,    14,
+    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+    94,    -1,    -1,    -1,    29,    -1,    31,    32,    33,    -1,
+    -1,    -1,    37,    38,    -1,    -1,    -1,    42,   112,   113,
+    -1,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+    55,    -1,    57,    58,    -1,    -1,    61,    -1,    63,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    94,
+    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    -1,    13,    14,    15,   111,    17,    18,    19,
+    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,    33,    -1,    35,    36,    37,    -1,    39,
+    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,
+    50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   111,   112,     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,    33,    -1,    35,    36,    37,    -1,    39,
+    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,
+    50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,     3,
+     4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
+    14,    15,   112,    17,    18,    19,    20,    21,    22,    23,
+    24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    59,    -1,    61,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
+    94,    -1,    96,    -1,    -1,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    -1,    13,    14,    15,   112,    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,    -1,    45,    -1,    -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,     3,     4,     5,     6,     7,     8,     9,    10,    -1,
-    12,    13,    14,   111,    16,    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,    -1,    45,    -1,    -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,    -1,    -1,    -1,    -1,   111,
-    -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,    -1,    -1,    97,     3,
+    28,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    96,     3,
      4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-    -1,    -1,   111,    -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,    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,    -1,    -1,    97,     3,     4,     5,    -1,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,   111,    -1,    -1,
-    -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,    75,    -1,    77,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-    -1,     3,     4,     5,    93,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -1,    -1,    -1,    28,    29,    30,    -1,
-    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,    -1,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,   111,
-    -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,    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,    -1,     7,
-     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,
-    -1,   111,    -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,    -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,    -1,    12,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,    -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,    -1,     3,     4,     5,    93,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,    -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,
-     3,     4,     5,    93,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,    -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,     3,     4,     5,
-    93,     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -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,    -1,     3,     4,     5,    93,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   111,    -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,    -1,
-     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,
-    -1,    -1,   111,    -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,     3,     4,     5,    93,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,    -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,
-     3,     4,     5,    93,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,    -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,     3,     4,     5,
-    93,     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -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,     3,     4,     5,    93,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   111,    -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,     3,     4,     5,    93,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -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,     3,     4,
-     5,    93,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -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,     3,     4,     5,    93,     7,
-     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   111,    -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,    -1,
-    78,    79,    80,    13,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,    -1,    93,    26,    27,    28,    -1,
-    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-    -1,    41,    -1,   111,    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,     3,     4,     5,     6,     7,     8,    -1,
-    80,    -1,    -1,    13,    -1,    -1,    -1,    -1,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    -1,    26,    27,    28,    99,
-    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-    -1,    41,    -1,    -1,    44,    45,    46,    -1,    48,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-    60,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
-    70,    -1,    11,    -1,    13,    -1,    -1,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    28,
-    -1,    30,    31,    93,    -1,    -1,    -1,    36,    -1,    99,
-    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,     3,
-     4,     5,     6,     7,     8,    54,    -1,    56,    57,    13,
+    14,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    48,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,    -1,    91,    -1,    -1,
+    94,    95,    -1,    -1,    98,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    12,    13,    14,    -1,   112,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    -1,    -1,    28,    -1,    30,    31,    -1,    -1,
-    -1,    80,    36,    -1,    -1,    -1,    -1,    41,    -1,    88,
-    -1,    45,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    62,    -1,
-     3,     4,     5,     6,     7,     8,    70,    -1,    -1,    -1,
-    13,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    88,    28,    -1,    30,    31,    93,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    45,    -1,    -1,     3,     4,     5,     6,     7,
-     8,    54,    -1,    56,    57,    13,    -1,    60,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-    28,    -1,    30,    31,    -1,    -1,    -1,    80,    36,    -1,
-    -1,    -1,    -1,    41,    -1,    88,    -1,    45,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-     3,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-    13,    -1,    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,     3,     4,     5,     6,     7,
-     8,    54,    -1,    56,    57,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    31,    -1,    -1,    -1,    80,    36,    -1,
-    -1,    -1,    -1,    41,    -1,    88,    -1,    45,    -1,    47,
-    93,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    29,    30,    31,    32,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    48,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,    -1,    91,    -1,    -1,    94,    95,    -1,    -1,
+    98,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
+    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
+    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
+    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
+    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    76,    -1,    78,    79,    80,    81,
+    -1,    -1,    -1,    -1,    -1,    87,    88,    89,     3,     4,
+     5,     6,    94,     8,     9,    10,    11,    -1,    13,    14,
     -1,    -1,    -1,    -1,    -1,    -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,    63,    64,    65,    66,
+   112,    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,
+    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+    -1,    46,    -1,    48,    -1,    50,    51,    52,    53,    54,
+    55,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+    -1,    -1,    87,    88,    89,    -1,    91,    -1,    -1,    94,
+    95,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,   112,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
+    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
+    42,    43,    44,    -1,    46,    -1,    48,    -1,    50,    51,
+    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
+    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    -1,    91,
+    -1,    -1,    94,    95,     3,     4,     5,     6,    -1,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    29,    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,    -1,    -1,    -1,    -1,    94,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    29,    30,    31,    32,    33,    -1,    35,    36,
+    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
+    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
+    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+    87,    88,    89,     3,     4,     5,     6,    94,     8,     9,
+    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,
+    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,
+    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,
+    50,    51,    52,    53,    54,    55,    -1,    57,    58,    -1,
+    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+     3,     4,     5,     6,    94,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   112,    -1,    -1,    -1,    29,    30,    31,    -1,
+    33,    -1,    35,    36,    37,    -1,    39,    40,    41,    42,
+    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
+    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,    62,
+    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,
+    -1,    -1,    -1,    -1,    87,    88,    89,     3,     4,     5,
+     6,    94,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
+    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,
+    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
+    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
+    -1,    57,    58,    59,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
+    -1,    87,    88,    89,     3,     4,     5,     6,    94,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,
+    29,    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,    -1,    -1,    -1,    -1,    94,    95,     3,     4,     5,
+     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,
+    36,    37,    -1,    39,    40,    41,    42,    43,    44,    -1,
+    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,
+    -1,    57,    58,    -1,    -1,    -1,    62,    -1,    -1,    -1,
+    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,    -1,
+    -1,    87,    88,    89,     3,     4,     5,     6,    94,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,
+    29,    30,    31,    -1,    33,    -1,    35,    36,    37,    -1,
+    39,    40,    41,    42,    43,    44,    -1,    46,    -1,    -1,
+    -1,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+    -1,    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    68,
+    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,    88,
+    89,     3,     4,     5,     6,    94,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,    30,    31,
+    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,    41,
+    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,    51,
+    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,    -1,
+    62,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
+    -1,    -1,    -1,    -1,    -1,    87,    88,    89,     3,     4,
+     5,     6,    94,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   112,    -1,    -1,    -1,    29,    30,    31,    -1,    33,    -1,
+    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    54,
+    55,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,    -1,
+    -1,    -1,    87,    88,    89,     3,     4,     5,     6,    94,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,
+    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,    37,
+    -1,    39,    40,    41,    42,    43,    44,    -1,    46,    -1,
+    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    57,
+    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    68,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,    87,
+    88,    89,     3,     4,     5,     6,    94,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    29,    30,
+    31,    -1,    33,    -1,    35,    36,    37,    -1,    39,    40,
+    41,    42,    43,    44,    -1,    46,    -1,    -1,    -1,    50,
+    51,    52,    53,    54,    55,    -1,    57,    58,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,
+    81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,     3,
+     4,     5,     6,    94,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   112,    -1,    -1,    -1,    29,    30,    31,    -1,    33,
+    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
+    44,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+    54,    55,    -1,    57,    58,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    68,    -1,    -1,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    79,    80,    81,    -1,    -1,
+    -1,    -1,    -1,    87,    88,    89,     3,     4,     5,     6,
+    94,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,
+    -1,    -1,    29,    30,    31,    -1,    33,    -1,    35,    36,
+    37,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
+    -1,    -1,    -1,    50,    51,    52,    53,    54,    55,    -1,
+    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    68,    -1,     1,    71,     3,     4,     5,     6,     7,
+     8,     9,    79,    80,    81,    -1,    14,    -1,    -1,    -1,
+    87,    88,    89,    -1,    -1,    -1,    -1,    94,    -1,    27,
+    28,    29,    -1,    31,    32,    33,    -1,    -1,    -1,    37,
+    -1,    -1,    -1,    -1,    42,   112,    -1,    45,    46,    47,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,
+    58,    -1,     1,    61,     3,     4,     5,     6,     7,     8,
+     9,    -1,    -1,    71,    -1,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    27,    28,
+    29,    89,    31,    32,    33,    -1,    94,    -1,    37,    -1,
+    -1,    -1,   100,    42,    -1,    -1,    45,    46,    47,    -1,
+    49,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,
+    -1,    -1,    61,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    71,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    89,    -1,    32,    -1,    -1,    94,    -1,    37,    -1,    -1,
+    -1,   100,    42,    -1,    -1,    -1,    46,    -1,    48,    -1,
+    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,     3,
+     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    32,    89,
+    -1,    91,    -1,    37,    94,    95,    -1,    -1,    42,    -1,
+    -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+    -1,    55,    -1,    57,    58,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    -1,    -1,    14,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
+    -1,    29,    -1,    31,    32,    89,    -1,    91,    -1,    37,
+    94,    95,    -1,    -1,    42,    -1,    -1,    -1,    46,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,
+    58,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
+    12,    -1,    14,    71,    -1,    -1,    -1,    75,    -1,    -1,
+    -1,    -1,    -1,    81,    -1,    -1,    -1,    29,    -1,    31,
+    32,    89,    -1,    -1,    -1,    37,    94,    -1,    -1,    -1,
+    42,    -1,    -1,    -1,    46,    -1,     3,     4,     5,     6,
+     7,     8,     9,    55,    -1,    57,    58,    14,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,
+    -1,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,    81,
+    37,    -1,    -1,    -1,    -1,    42,    -1,    89,    -1,    46,
+    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    55,    -1,
+    57,    58,    -1,    -1,    -1,    -1,    63,     3,     4,     5,
+     6,     7,     8,     9,    71,    -1,    -1,    -1,    14,    -1,
+    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    89,    29,    -1,    31,    32,    94,    -1,    -1,
+    -1,    37,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
+    46,    -1,     3,     4,     5,     6,     7,     8,     9,    55,
+    -1,    57,    58,    14,    -1,    61,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    29,    -1,
+    31,    32,    -1,    -1,    -1,    81,    37,    -1,    -1,    -1,
+    -1,    42,    -1,    89,    -1,    46,    -1,    -1,    94,    -1,
+    -1,    -1,    -1,    -1,    55,    -1,    57,    58,     3,     4,
+     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    81,    -1,    -1,    -1,    29,    -1,    31,    32,    89,    -1,
+    -1,    -1,    37,    94,    -1,    -1,    -1,    42,    -1,    -1,
+    -1,    46,    -1,     3,     4,     5,     6,     7,     8,     9,
+    55,    -1,    57,    58,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+    -1,    -1,    32,    -1,    -1,    -1,    81,    37,    -1,    -1,
+    -1,    -1,    42,    -1,    89,    12,    46,    -1,    48,    94,
+    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    71,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+    -1,    -1,    -1,    -1,    94,    -1,    63,    64,    65,    66,
     67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    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,    84,    -1,   112,    62,    63,    64,    65,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,     4,
+     5,    -1,     7,     8,     9,    -1,     4,     5,    -1,    14,
+     8,     9,    -1,     4,     5,    -1,    14,     8,     9,    -1,
+    -1,    -1,    -1,    14,    29,    -1,    31,    32,    -1,    -1,
+    -1,    29,    37,    31,    -1,    -1,    32,    -1,    29,    37,
+    31,    46,    -1,    -1,    -1,    -1,    37,    -1,    46,    -1,
+    55,    -1,    57,    58,    -1,    46,    -1,    55,    -1,    57,
+    58,    -1,    -1,    -1,    55,    -1,    57,    58,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    -1,    -1,    -1,    -1,    -1,   113,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    60,    -1,    -1,   109,    64,    65,
     66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    62,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
     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,    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
+    83,    84,    85,    63,    64,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    64,    65,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,    85
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -3910,7 +3993,7 @@ yyreduce:
   switch (yyn) {
 
 case 2:
-#line 308 "parse.y"
+#line 313 "parse.y"
 {
                  /* In case there were missing closebraces,
                     get us back to the global binding level.  */
@@ -3920,98 +4003,98 @@ case 2:
                ;
     break;}
 case 3:
-#line 322 "parse.y"
+#line 327 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 4:
-#line 324 "parse.y"
+#line 329 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 5:
-#line 326 "parse.y"
+#line 331 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 8:
-#line 335 "parse.y"
+#line 340 "parse.y"
 { have_extern_spec = 1;
                  used_extern_spec = 0;
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 9:
-#line 340 "parse.y"
+#line 345 "parse.y"
 { have_extern_spec = 0; ;
     break;}
 case 10:
-#line 345 "parse.y"
+#line 350 "parse.y"
 { yyval.itype = pedantic;
                  pedantic = 0; ;
     break;}
 case 13:
-#line 355 "parse.y"
+#line 360 "parse.y"
 { if (pending_lang_change) do_pending_lang_change(); ;
     break;}
 case 14:
-#line 357 "parse.y"
+#line 362 "parse.y"
 { if (! toplevel_bindings_p () && ! pseudo_global_level_p())
                  pop_everything (); ;
     break;}
 case 15:
-#line 363 "parse.y"
+#line 368 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 16:
-#line 365 "parse.y"
+#line 370 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 17:
-#line 367 "parse.y"
+#line 372 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 18:
-#line 369 "parse.y"
+#line 374 "parse.y"
 { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
                  assemble_asm (yyvsp[-2].ttype); ;
     break;}
 case 19:
-#line 372 "parse.y"
+#line 377 "parse.y"
 { pop_lang_context (); ;
     break;}
 case 20:
-#line 374 "parse.y"
+#line 379 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 21:
-#line 377 "parse.y"
+#line 382 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 22:
-#line 380 "parse.y"
+#line 385 "parse.y"
 { push_namespace (yyvsp[-1].ttype); ;
     break;}
 case 23:
-#line 382 "parse.y"
+#line 387 "parse.y"
 { pop_namespace (); ;
     break;}
 case 24:
-#line 384 "parse.y"
+#line 389 "parse.y"
 { push_namespace (NULL_TREE); ;
     break;}
 case 25:
-#line 386 "parse.y"
+#line 391 "parse.y"
 { pop_namespace (); ;
     break;}
 case 26:
-#line 388 "parse.y"
+#line 393 "parse.y"
 { do_namespace_alias (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 27:
-#line 390 "parse.y"
+#line 395 "parse.y"
 { do_toplevel_using_decl (yyvsp[-1].ttype); ;
     break;}
 case 28:
-#line 392 "parse.y"
+#line 397 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -4019,61 +4102,62 @@ case 28:
                ;
     break;}
 case 29:
-#line 398 "parse.y"
+#line 403 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 30:
-#line 403 "parse.y"
+#line 408 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 31:
-#line 405 "parse.y"
+#line 410 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 32:
-#line 407 "parse.y"
+#line 412 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 35:
-#line 414 "parse.y"
+#line 419 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 36:
-#line 416 "parse.y"
+#line 421 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 37:
-#line 421 "parse.y"
+#line 426 "parse.y"
 { push_lang_context (yyvsp[0].ttype); ;
     break;}
 case 38:
-#line 423 "parse.y"
+#line 428 "parse.y"
 { if (current_lang_name != yyvsp[0].ttype)
                    cp_error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name);
                  pop_lang_context (); push_lang_context (yyvsp[0].ttype); ;
     break;}
 case 39:
-#line 430 "parse.y"
+#line 435 "parse.y"
 { begin_template_parm_list (); ;
     break;}
 case 40:
-#line 432 "parse.y"
+#line 437 "parse.y"
 { yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); ;
     break;}
 case 41:
-#line 434 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
+#line 439 "parse.y"
+{ begin_specialization(); 
+                 yyval.ttype = NULL_TREE; ;
     break;}
 case 42:
-#line 439 "parse.y"
+#line 445 "parse.y"
 { yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 43:
-#line 441 "parse.y"
+#line 447 "parse.y"
 { yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 44:
-#line 446 "parse.y"
+#line 452 "parse.y"
 { 
                  yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE);
                 ttpa:
@@ -4087,61 +4171,71 @@ case 44:
                ;
     break;}
 case 45:
-#line 458 "parse.y"
+#line 464 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); goto ttpa; ;
     break;}
 case 46:
-#line 460 "parse.y"
+#line 466 "parse.y"
 { yyval.ttype = build_tree_list (class_type_node, NULL_TREE); ;
     break;}
 case 47:
-#line 462 "parse.y"
+#line 468 "parse.y"
 { yyval.ttype = build_tree_list (class_type_node, yyvsp[0].ttype); ;
     break;}
 case 48:
-#line 474 "parse.y"
+#line 480 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 49:
-#line 476 "parse.y"
+#line 482 "parse.y"
 { yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); ;
     break;}
 case 50:
-#line 478 "parse.y"
+#line 484 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
 case 51:
-#line 480 "parse.y"
+#line 486 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); ;
     break;}
 case 52:
-#line 486 "parse.y"
-{ end_template_decl (); ;
+#line 492 "parse.y"
+{ 
+                  if (yyvsp[-1].ttype) 
+                    end_template_decl (); 
+                 else
+                   end_specialization ();
+               ;
     break;}
 case 53:
-#line 489 "parse.y"
-{ end_template_decl (); ;
+#line 500 "parse.y"
+{ 
+                  if (yyvsp[-1].ttype) 
+                    end_template_decl ();
+                 else
+                   end_specialization (); 
+                ;
     break;}
 case 54:
-#line 494 "parse.y"
+#line 510 "parse.y"
 {;
     break;}
 case 55:
-#line 496 "parse.y"
+#line 512 "parse.y"
 {;
     break;}
 case 56:
-#line 498 "parse.y"
+#line 514 "parse.y"
 {
                  note_list_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
 case 57:
-#line 502 "parse.y"
+#line 518 "parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 59:
-#line 505 "parse.y"
+#line 521 "parse.y"
 {
                  tree t, attrs;
                  split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs);
@@ -4150,27 +4244,27 @@ case 59:
                ;
     break;}
 case 63:
-#line 518 "parse.y"
+#line 534 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 64:
-#line 520 "parse.y"
+#line 536 "parse.y"
 { yyval.itype = 1; ;
     break;}
 case 70:
-#line 536 "parse.y"
+#line 552 "parse.y"
 { finish_function (lineno, (int)yyvsp[-1].itype, 0); ;
     break;}
 case 71:
-#line 538 "parse.y"
+#line 554 "parse.y"
 { ;
     break;}
 case 72:
-#line 540 "parse.y"
+#line 556 "parse.y"
 { ;
     break;}
 case 73:
-#line 545 "parse.y"
+#line 561 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4181,11 +4275,11 @@ case 73:
                ;
     break;}
 case 74:
-#line 554 "parse.y"
+#line 570 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 75:
-#line 556 "parse.y"
+#line 572 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4197,7 +4291,7 @@ case 75:
                ;
     break;}
 case 76:
-#line 566 "parse.y"
+#line 582 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4208,11 +4302,11 @@ case 76:
                ;
     break;}
 case 77:
-#line 575 "parse.y"
+#line 591 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 78:
-#line 577 "parse.y"
+#line 593 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4224,7 +4318,7 @@ case 78:
                ;
     break;}
 case 79:
-#line 587 "parse.y"
+#line 603 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4235,11 +4329,11 @@ case 79:
                ;
     break;}
 case 80:
-#line 596 "parse.y"
+#line 612 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 81:
-#line 598 "parse.y"
+#line 614 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4251,7 +4345,7 @@ case 81:
                ;
     break;}
 case 82:
-#line 608 "parse.y"
+#line 624 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
                  if (yyvsp[-2].ttype != current_class_type)
@@ -4262,11 +4356,11 @@ case 82:
                ;
     break;}
 case 83:
-#line 617 "parse.y"
+#line 633 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 84:
-#line 619 "parse.y"
+#line 635 "parse.y"
 {
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
                  if (yyvsp[-4].ttype != current_class_type)
@@ -4278,7 +4372,7 @@ case 84:
                ;
     break;}
 case 85:
-#line 632 "parse.y"
+#line 648 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-1].ftype.t, &specs, &attrs);
                  if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
@@ -4287,7 +4381,7 @@ case 85:
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 86:
-#line 639 "parse.y"
+#line 655 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs);
                  if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
@@ -4296,14 +4390,14 @@ case 86:
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 87:
-#line 646 "parse.y"
+#line 662 "parse.y"
 { if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 88:
-#line 651 "parse.y"
+#line 667 "parse.y"
 { tree specs, attrs;
                  split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs);
                  if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
@@ -4312,30 +4406,30 @@ case 88:
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 89:
-#line 658 "parse.y"
+#line 674 "parse.y"
 { if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0))
                    YYERROR1;
                  reinit_parse_for_function ();
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 90:
-#line 666 "parse.y"
+#line 682 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 91:
-#line 668 "parse.y"
+#line 684 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 92:
-#line 670 "parse.y"
+#line 686 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 93:
-#line 672 "parse.y"
+#line 688 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 94:
-#line 679 "parse.y"
+#line 695 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype);
                 rest_of_mdef:
@@ -4346,37 +4440,42 @@ case 94:
                  reinit_parse_for_method (yychar, yyval.ttype); ;
     break;}
 case 95:
-#line 688 "parse.y"
+#line 704 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 96:
-#line 690 "parse.y"
+#line 706 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 97:
-#line 693 "parse.y"
+#line 709 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 98:
-#line 696 "parse.y"
+#line 712 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
     break;}
 case 99:
-#line 698 "parse.y"
+#line 714 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 100:
-#line 701 "parse.y"
+#line 717 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
     break;}
 case 101:
-#line 703 "parse.y"
+#line 719 "parse.y"
 { 
-                 end_template_decl (); 
-                 if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype))
+                  if (yyvsp[-1].ttype)
+                    end_template_decl (); 
+                 else
+                   end_specialization ();
+
+                 if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype)
+                     && !DECL_TEMPLATE_SPECIALIZATION (yyvsp[0].ttype))
                    {
                      yyval.ttype = DECL_TI_TEMPLATE (yyvsp[0].ttype); 
                      check_member_template (yyval.ttype);
@@ -4391,7 +4490,7 @@ case 101:
                ;
     break;}
 case 102:
-#line 722 "parse.y"
+#line 743 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -4399,19 +4498,19 @@ case 102:
                ;
     break;}
 case 103:
-#line 731 "parse.y"
+#line 752 "parse.y"
 { store_return_init (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 104:
-#line 733 "parse.y"
+#line 754 "parse.y"
 { store_return_init (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 105:
-#line 735 "parse.y"
+#line 756 "parse.y"
 { store_return_init (yyval.ttype, NULL_TREE); ;
     break;}
 case 106:
-#line 740 "parse.y"
+#line 761 "parse.y"
 {
                  if (yyvsp[0].itype == 0)
                    error ("no base initializers given following ':'");
@@ -4423,7 +4522,7 @@ case 106:
                ;
     break;}
 case 107:
-#line 753 "parse.y"
+#line 774 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -4442,15 +4541,15 @@ case 107:
                ;
     break;}
 case 108:
-#line 773 "parse.y"
+#line 794 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 109:
-#line 775 "parse.y"
+#line 796 "parse.y"
 { yyval.itype = 1; ;
     break;}
 case 112:
-#line 782 "parse.y"
+#line 803 "parse.y"
 {
                  if (current_class_name)
                    pedwarn ("anachronistic old style base class initializer");
@@ -4458,7 +4557,7 @@ case 112:
                ;
     break;}
 case 113:
-#line 788 "parse.y"
+#line 809 "parse.y"
 {
                  if (current_class_name)
                    pedwarn ("anachronistic old style base class initializer");
@@ -4466,69 +4565,69 @@ case 113:
                ;
     break;}
 case 114:
-#line 794 "parse.y"
+#line 815 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 115:
-#line 796 "parse.y"
+#line 817 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
     break;}
 case 116:
-#line 798 "parse.y"
+#line 819 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 117:
-#line 800 "parse.y"
+#line 821 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
     break;}
 case 118:
-#line 802 "parse.y"
+#line 823 "parse.y"
 { expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-3].ttype),
                                      yyvsp[-1].ttype); ;
     break;}
 case 119:
-#line 805 "parse.y"
+#line 826 "parse.y"
 { expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-1].ttype),
                                      void_type_node); ;
     break;}
 case 131:
-#line 831 "parse.y"
+#line 852 "parse.y"
 { do_type_instantiation (yyvsp[-1].ftype.t, NULL_TREE);
                  yyungetc (';', 1); ;
     break;}
 case 132:
-#line 834 "parse.y"
+#line 855 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  do_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 133:
-#line 837 "parse.y"
+#line 858 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 134:
-#line 839 "parse.y"
+#line 860 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 135:
-#line 841 "parse.y"
+#line 862 "parse.y"
 { do_type_instantiation (yyvsp[-1].ftype.t, yyvsp[-3].ttype);
                  yyungetc (';', 1); ;
     break;}
 case 136:
-#line 844 "parse.y"
+#line 865 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  do_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-3].ttype); ;
     break;}
 case 137:
-#line 847 "parse.y"
+#line 868 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
     break;}
 case 138:
-#line 849 "parse.y"
+#line 870 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
     break;}
 case 139:
-#line 858 "parse.y"
+#line 879 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
@@ -4536,7 +4635,7 @@ case 139:
                ;
     break;}
 case 140:
-#line 864 "parse.y"
+#line 885 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
@@ -4544,7 +4643,7 @@ case 140:
                ;
     break;}
 case 141:
-#line 870 "parse.y"
+#line 891 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
@@ -4552,7 +4651,7 @@ case 141:
                ;
     break;}
 case 142:
-#line 876 "parse.y"
+#line 897 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
@@ -4560,7 +4659,7 @@ case 142:
                ;
     break;}
 case 144:
-#line 886 "parse.y"
+#line 907 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
@@ -4568,7 +4667,7 @@ case 144:
                ;
     break;}
 case 145:
-#line 892 "parse.y"
+#line 913 "parse.y"
 {
                  yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE);
                  if (yyval.ttype != error_mark_node)
@@ -4576,7 +4675,7 @@ case 145:
                ;
     break;}
 case 147:
-#line 902 "parse.y"
+#line 923 "parse.y"
 {
                  /* Handle `Class<Class<Type>>' without space in the `>>' */
                  pedwarn ("`>>' should be `> >' in template class name");
@@ -4584,75 +4683,75 @@ case 147:
                ;
     break;}
 case 148:
-#line 911 "parse.y"
+#line 932 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 149:
-#line 913 "parse.y"
+#line 934 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 150:
-#line 918 "parse.y"
+#line 939 "parse.y"
 { yyval.ttype = groktypename (yyvsp[0].ftype.t); ;
     break;}
 case 152:
-#line 924 "parse.y"
+#line 945 "parse.y"
 { yyval.code = NEGATE_EXPR; ;
     break;}
 case 153:
-#line 926 "parse.y"
+#line 947 "parse.y"
 { yyval.code = CONVERT_EXPR; ;
     break;}
 case 154:
-#line 928 "parse.y"
+#line 949 "parse.y"
 { yyval.code = PREINCREMENT_EXPR; ;
     break;}
 case 155:
-#line 930 "parse.y"
+#line 951 "parse.y"
 { yyval.code = PREDECREMENT_EXPR; ;
     break;}
 case 156:
-#line 932 "parse.y"
+#line 953 "parse.y"
 { yyval.code = TRUTH_NOT_EXPR; ;
     break;}
 case 157:
-#line 937 "parse.y"
+#line 958 "parse.y"
 { yyval.ttype = build_x_compound_expr (yyval.ttype); ;
     break;}
 case 159:
-#line 943 "parse.y"
+#line 964 "parse.y"
 { error ("ANSI C++ forbids an empty condition for `%s'",
                         cond_stmt_keyword);
                  yyval.ttype = integer_zero_node; ;
     break;}
 case 160:
-#line 947 "parse.y"
+#line 968 "parse.y"
 { yyval.ttype = condition_conversion (yyvsp[-1].ttype); ;
     break;}
 case 161:
-#line 952 "parse.y"
+#line 973 "parse.y"
 { error ("ANSI C++ forbids an empty condition for `%s'",
                         cond_stmt_keyword);
                  yyval.ttype = integer_zero_node; ;
     break;}
 case 162:
-#line 956 "parse.y"
+#line 977 "parse.y"
 { yyval.ttype = condition_conversion (yyvsp[-1].ttype); ;
     break;}
 case 163:
-#line 961 "parse.y"
+#line 982 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 164:
-#line 963 "parse.y"
+#line 984 "parse.y"
 { yyval.ttype = condition_conversion (yyval.ttype); ;
     break;}
 case 165:
-#line 965 "parse.y"
+#line 986 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 166:
-#line 970 "parse.y"
+#line 991 "parse.y"
 { {
                  tree d;
                  for (d = getdecls (); d; d = TREE_CHAIN (d))
@@ -4672,7 +4771,7 @@ case 166:
                ;
     break;}
 case 167:
-#line 988 "parse.y"
+#line 1009 "parse.y"
 { 
                  cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype, 1, LOOKUP_ONLYCONVERTING);
                  resume_momentary (yyvsp[-2].itype);
@@ -4682,7 +4781,7 @@ case 167:
                ;
     break;}
 case 173:
-#line 1007 "parse.y"
+#line 1028 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -4693,7 +4792,7 @@ case 173:
                ;
     break;}
 case 174:
-#line 1016 "parse.y"
+#line 1037 "parse.y"
 { 
                  if (processing_template_decl)
                    {
@@ -4705,50 +4804,50 @@ case 174:
                ;
     break;}
 case 176:
-#line 1031 "parse.y"
+#line 1052 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, 
                                  build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 177:
-#line 1034 "parse.y"
+#line 1055 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, 
                                  build_tree_list (NULL_TREE, error_mark_node)); ;
     break;}
 case 178:
-#line 1037 "parse.y"
+#line 1058 "parse.y"
 { chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 179:
-#line 1039 "parse.y"
+#line 1060 "parse.y"
 { chainon (yyval.ttype, build_tree_list (NULL_TREE, error_mark_node)); ;
     break;}
 case 180:
-#line 1044 "parse.y"
+#line 1065 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 182:
-#line 1050 "parse.y"
+#line 1071 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 183:
-#line 1053 "parse.y"
+#line 1074 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 184:
-#line 1056 "parse.y"
+#line 1077 "parse.y"
 { yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); ;
     break;}
 case 185:
-#line 1058 "parse.y"
+#line 1079 "parse.y"
 { yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); ;
     break;}
 case 186:
-#line 1060 "parse.y"
+#line 1081 "parse.y"
 { yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
 case 187:
-#line 1062 "parse.y"
+#line 1083 "parse.y"
 { yyval.ttype = build_x_unary_op (yyvsp[-1].code, yyvsp[0].ttype);
                  if (yyvsp[-1].code == NEGATE_EXPR && TREE_CODE (yyvsp[0].ttype) == INTEGER_CST)
                    TREE_NEGATED_INT (yyval.ttype) = 1;
@@ -4756,7 +4855,7 @@ case 187:
                ;
     break;}
 case 188:
-#line 1069 "parse.y"
+#line 1090 "parse.y"
 { tree label = lookup_label (yyvsp[0].ttype);
                  if (label == NULL_TREE)
                    yyval.ttype = null_pointer_node;
@@ -4769,115 +4868,115 @@ case 188:
                ;
     break;}
 case 189:
-#line 1080 "parse.y"
+#line 1101 "parse.y"
 { yyval.ttype = expr_sizeof (yyvsp[0].ttype); ;
     break;}
 case 190:
-#line 1082 "parse.y"
+#line 1103 "parse.y"
 { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ftype.t)); ;
     break;}
 case 191:
-#line 1084 "parse.y"
+#line 1105 "parse.y"
 { yyval.ttype = grok_alignof (yyvsp[0].ttype); ;
     break;}
 case 192:
-#line 1086 "parse.y"
+#line 1107 "parse.y"
 { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ftype.t)); 
                  check_for_new_type ("alignof", yyvsp[-1].ftype); ;
     break;}
 case 193:
-#line 1092 "parse.y"
+#line 1113 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); 
                  check_for_new_type ("new", yyvsp[0].ftype); ;
     break;}
 case 194:
-#line 1095 "parse.y"
+#line 1116 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 195:
-#line 1098 "parse.y"
+#line 1119 "parse.y"
 { yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); 
                  check_for_new_type ("new", yyvsp[0].ftype); ;
     break;}
 case 196:
-#line 1101 "parse.y"
+#line 1122 "parse.y"
 { yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 197:
-#line 1104 "parse.y"
+#line 1125 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t),
                                  NULL_TREE, yyvsp[-3].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 198:
-#line 1108 "parse.y"
+#line 1129 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-4].itype); 
                  check_for_new_type ("new", yyvsp[-2].ftype); ;
     break;}
 case 199:
-#line 1111 "parse.y"
+#line 1132 "parse.y"
 { yyval.ttype = build_new (yyvsp[-3].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-4].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 200:
-#line 1114 "parse.y"
+#line 1135 "parse.y"
 { yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); 
                  check_for_new_type ("new", yyvsp[-2].ftype); ;
     break;}
 case 201:
-#line 1118 "parse.y"
+#line 1139 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); ;
     break;}
 case 202:
-#line 1120 "parse.y"
+#line 1141 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype);
                  if (yychar == YYEMPTY)
                    yychar = YYLEX; ;
     break;}
 case 203:
-#line 1124 "parse.y"
+#line 1145 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype);
                  if (yychar == YYEMPTY)
                    yychar = YYLEX; ;
     break;}
 case 204:
-#line 1128 "parse.y"
+#line 1149 "parse.y"
 { yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); ;
     break;}
 case 205:
-#line 1130 "parse.y"
+#line 1151 "parse.y"
 { yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); ;
     break;}
 case 206:
-#line 1135 "parse.y"
+#line 1156 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 207:
-#line 1137 "parse.y"
+#line 1158 "parse.y"
 {
                  yyval.ttype = yyvsp[-1].ttype; 
                  pedwarn ("old style placement syntax, use () instead");
                ;
     break;}
 case 208:
-#line 1145 "parse.y"
+#line 1166 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 209:
-#line 1147 "parse.y"
+#line 1168 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 210:
-#line 1149 "parse.y"
+#line 1170 "parse.y"
 {
                  cp_error ("`%T' is not a valid expression", yyvsp[-1].ftype.t);
                  yyval.ttype = error_mark_node;
                ;
     break;}
 case 211:
-#line 1157 "parse.y"
+#line 1178 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids initialization of new expression with `='");
@@ -4885,25 +4984,25 @@ case 211:
                ;
     break;}
 case 212:
-#line 1167 "parse.y"
+#line 1188 "parse.y"
 { yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
                  TREE_PARMLIST (yyvsp[-1].ftype.t) = 1;
                  yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
                  check_for_new_type ("cast", yyvsp[-1].ftype); ;
     break;}
 case 213:
-#line 1172 "parse.y"
+#line 1193 "parse.y"
 { yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
                  TREE_PARMLIST (yyvsp[-1].ftype.t) = 1;
                  yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
                  check_for_new_type ("cast", yyvsp[-1].ftype); ;
     break;}
 case 215:
-#line 1181 "parse.y"
+#line 1202 "parse.y"
 { yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 216:
-#line 1183 "parse.y"
+#line 1204 "parse.y"
 { 
                  tree init = build_nt (CONSTRUCTOR, NULL_TREE,
                                        nreverse (yyvsp[-2].ttype)); 
@@ -4916,134 +5015,172 @@ case 216:
                ;
     break;}
 case 218:
-#line 1199 "parse.y"
+#line 1220 "parse.y"
 { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 219:
-#line 1201 "parse.y"
+#line 1222 "parse.y"
 { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 220:
-#line 1203 "parse.y"
+#line 1224 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 221:
-#line 1205 "parse.y"
+#line 1226 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 222:
-#line 1207 "parse.y"
+#line 1228 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 223:
-#line 1209 "parse.y"
+#line 1230 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 224:
-#line 1211 "parse.y"
+#line 1232 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 225:
-#line 1213 "parse.y"
+#line 1234 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 226:
-#line 1215 "parse.y"
+#line 1236 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 227:
-#line 1217 "parse.y"
+#line 1238 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 228:
-#line 1219 "parse.y"
+#line 1240 "parse.y"
 { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 229:
-#line 1221 "parse.y"
+#line 1242 "parse.y"
 { yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 230:
-#line 1223 "parse.y"
+#line 1244 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 231:
-#line 1225 "parse.y"
+#line 1246 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 232:
-#line 1227 "parse.y"
+#line 1248 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 233:
-#line 1229 "parse.y"
+#line 1250 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 234:
-#line 1231 "parse.y"
+#line 1252 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 235:
-#line 1233 "parse.y"
+#line 1254 "parse.y"
 { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 236:
-#line 1235 "parse.y"
+#line 1256 "parse.y"
 { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 237:
-#line 1237 "parse.y"
+#line 1258 "parse.y"
 { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 238:
-#line 1239 "parse.y"
+#line 1260 "parse.y"
 { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype);
                  if (yyval.ttype != error_mark_node)
                     C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
     break;}
 case 239:
-#line 1243 "parse.y"
+#line 1264 "parse.y"
 { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
     break;}
 case 240:
-#line 1245 "parse.y"
+#line 1266 "parse.y"
 { yyval.ttype = build_throw (NULL_TREE); ;
     break;}
 case 241:
-#line 1247 "parse.y"
+#line 1268 "parse.y"
 { yyval.ttype = build_throw (yyvsp[0].ttype); ;
     break;}
 case 242:
-#line 1265 "parse.y"
+#line 1286 "parse.y"
 { yyval.ttype = build_parse_node (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
+case 248:
+#line 1296 "parse.y"
+{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+    break;}
+case 249:
+#line 1298 "parse.y"
+{ yyval.ttype = lookup_template_function (yyvsp[-2].ttype, NULL_TREE); ;
+    break;}
+case 250:
+#line 1300 "parse.y"
+{ yyval.ttype = lookup_template_function 
+                   (do_identifier (yyvsp[-3].ttype, 1), yyvsp[-1].ttype); ;
+    break;}
 case 251:
-#line 1281 "parse.y"
-{ yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ;
+#line 1303 "parse.y"
+{ yyval.ttype = lookup_template_function 
+                   (do_identifier (yyvsp[-2].ttype, 1), NULL_TREE); ;
     break;}
 case 252:
-#line 1283 "parse.y"
-{ yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ;
+#line 1309 "parse.y"
+{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 253:
-#line 1285 "parse.y"
+#line 1311 "parse.y"
+{ yyval.ttype = lookup_template_function (DECL_NAME (yyvsp[-3].ttype), yyvsp[-1].ttype); ;
+    break;}
+case 254:
+#line 1313 "parse.y"
+{ yyval.ttype = lookup_template_function (DECL_NAME (yyvsp[-3].ttype), yyvsp[-1].ttype); ;
+    break;}
+case 259:
+#line 1325 "parse.y"
+{ yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ;
+    break;}
+case 260:
+#line 1327 "parse.y"
+{ yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ;
+    break;}
+case 261:
+#line 1329 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 256:
-#line 1292 "parse.y"
+case 262:
+#line 1334 "parse.y"
+{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+    break;}
+case 263:
+#line 1336 "parse.y"
+{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
+    break;}
+case 267:
+#line 1344 "parse.y"
 { yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); ;
     break;}
-case 257:
-#line 1297 "parse.y"
+case 268:
+#line 1349 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == BIT_NOT_EXPR)
                    yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyval.ttype, 0));
-                 else
+                 else if (TREE_CODE (yyval.ttype) != TEMPLATE_ID_EXPR)
                    yyval.ttype = do_identifier (yyval.ttype, 1);
                ;
     break;}
-case 260:
-#line 1306 "parse.y"
+case 271:
+#line 1358 "parse.y"
 {
                  if (processing_template_decl)
                    push_obstacks (&permanent_obstack, &permanent_obstack);
@@ -5052,8 +5189,8 @@ case 260:
                    pop_obstacks ();
                ;
     break;}
-case 261:
-#line 1314 "parse.y"
+case 272:
+#line 1366 "parse.y"
 { char class;
                  yyval.ttype = yyvsp[-1].ttype;
                  class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
@@ -5062,8 +5199,8 @@ case 261:
                     /* This inhibits warnings in truthvalue_conversion.  */
                    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
     break;}
-case 262:
-#line 1322 "parse.y"
+case 273:
+#line 1374 "parse.y"
 { char class;
                  yyval.ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype);
                  class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
@@ -5072,12 +5209,12 @@ case 262:
                     /* This inhibits warnings in truthvalue_conversion.  */
                    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
     break;}
-case 263:
-#line 1330 "parse.y"
+case 274:
+#line 1382 "parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
-case 264:
-#line 1332 "parse.y"
+case 275:
+#line 1384 "parse.y"
 { if (current_function_decl == 0)
                    {
                      error ("braced-group within expression allowed only inside a function");
@@ -5086,8 +5223,8 @@ case 264:
                  keep_next_level ();
                  yyval.ttype = expand_start_stmt_expr (); ;
     break;}
-case 265:
-#line 1340 "parse.y"
+case 276:
+#line 1392 "parse.y"
 { tree rtl_exp;
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids braced-groups within expressions");
@@ -5109,8 +5246,8 @@ case 265:
                    yyval.ttype = yyvsp[-1].ttype;
                ;
     break;}
-case 266:
-#line 1361 "parse.y"
+case 277:
+#line 1413 "parse.y"
 {
                   yyval.ttype = build_x_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype, current_class_ref); 
                   if (TREE_CODE (yyval.ttype) == CALL_EXPR
@@ -5118,8 +5255,8 @@ case 266:
                    yyval.ttype = require_complete_type (yyval.ttype);
                 ;
     break;}
-case 267:
-#line 1368 "parse.y"
+case 278:
+#line 1420 "parse.y"
 {
                  yyval.ttype = build_x_function_call (yyval.ttype, NULL_TREE, current_class_ref);
                  if (TREE_CODE (yyval.ttype) == CALL_EXPR
@@ -5127,12 +5264,12 @@ case 267:
                    yyval.ttype = require_complete_type (yyval.ttype);
                 ;
     break;}
-case 268:
-#line 1375 "parse.y"
+case 279:
+#line 1427 "parse.y"
 { yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 269:
-#line 1377 "parse.y"
+case 280:
+#line 1429 "parse.y"
 { /* If we get an OFFSET_REF, turn it into what it really
                     means (e.g., a COMPONENT_REF).  This way if we've got,
                     say, a reference to a static member that's being operated
@@ -5142,14 +5279,14 @@ case 269:
                    yyval.ttype = resolve_offset_ref (yyval.ttype);
                  yyval.ttype = build_x_unary_op (POSTINCREMENT_EXPR, yyval.ttype); ;
     break;}
-case 270:
-#line 1386 "parse.y"
+case 281:
+#line 1438 "parse.y"
 { if (TREE_CODE (yyval.ttype) == OFFSET_REF)
                    yyval.ttype = resolve_offset_ref (yyval.ttype);
                  yyval.ttype = build_x_unary_op (POSTDECREMENT_EXPR, yyval.ttype); ;
     break;}
-case 271:
-#line 1391 "parse.y"
+case 282:
+#line 1443 "parse.y"
 { if (current_class_ptr)
                    {
 #ifdef WARNING_ABOUT_CCD
@@ -5173,8 +5310,8 @@ case 271:
                    }
                ;
     break;}
-case 272:
-#line 1414 "parse.y"
+case 283:
+#line 1466 "parse.y"
 {
                  tree type;
                  tree id = yyval.ttype;
@@ -5219,46 +5356,46 @@ case 272:
                    }
                ;
     break;}
-case 274:
-#line 1459 "parse.y"
+case 285:
+#line 1511 "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 275:
-#line 1463 "parse.y"
+case 286:
+#line 1515 "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 276:
-#line 1467 "parse.y"
+case 287:
+#line 1519 "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 277:
-#line 1471 "parse.y"
+case 288:
+#line 1523 "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 278:
-#line 1475 "parse.y"
+case 289:
+#line 1527 "parse.y"
 { yyval.ttype = build_x_typeid (yyvsp[-1].ttype); ;
     break;}
-case 279:
-#line 1477 "parse.y"
+case 290:
+#line 1529 "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 280:
-#line 1481 "parse.y"
+case 291:
+#line 1533 "parse.y"
 { yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1); ;
     break;}
-case 281:
-#line 1483 "parse.y"
+case 292:
+#line 1535 "parse.y"
 {
                  got_scope = NULL_TREE;
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
@@ -5267,38 +5404,58 @@ case 281:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 282:
-#line 1491 "parse.y"
+case 293:
+#line 1543 "parse.y"
 { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); ;
     break;}
-case 283:
-#line 1493 "parse.y"
+case 294:
+#line 1545 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-3].ttype), yyvsp[-1].ttype, NULL_TREE);
                  else
                    yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), yyvsp[-1].ttype); ;
     break;}
-case 284:
-#line 1498 "parse.y"
+case 295:
+#line 1550 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-1].ttype), 
                                       NULL_TREE, NULL_TREE);
                  else
                    yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), NULL_TREE); ;
     break;}
-case 285:
-#line 1504 "parse.y"
+case 296:
+#line 1556 "parse.y"
+{ 
+                 yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); 
+               ;
+    break;}
+case 297:
+#line 1560 "parse.y"
+{
+                 yyval.ttype = build_method_call (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, 
+                                         NULL_TREE, LOOKUP_NORMAL); 
+                ;
+    break;}
+case 298:
+#line 1565 "parse.y"
+{
+                 yyval.ttype = build_method_call (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE,
+                                         NULL_TREE, LOOKUP_NORMAL); 
+                ;
+    break;}
+case 299:
+#line 1570 "parse.y"
 { yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); ;
     break;}
-case 286:
-#line 1506 "parse.y"
+case 300:
+#line 1572 "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 287:
-#line 1511 "parse.y"
+case 301:
+#line 1577 "parse.y"
 {
 #if 0
                  /* This is a future direction of this code, but because
@@ -5314,8 +5471,8 @@ case 287:
 #endif
                ;
     break;}
-case 288:
-#line 1526 "parse.y"
+case 302:
+#line 1592 "parse.y"
 {
 #if 0
                  /* This is a future direction of this code, but because
@@ -5331,8 +5488,8 @@ case 288:
 #endif
                ;
     break;}
-case 289:
-#line 1541 "parse.y"
+case 303:
+#line 1607 "parse.y"
 {
                  if (IS_SIGNATURE (OP0 (yyvsp[-3].ttype)))
                    {
@@ -5344,8 +5501,8 @@ case 289:
                    yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-3].ttype), OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype);
                ;
     break;}
-case 290:
-#line 1552 "parse.y"
+case 304:
+#line 1618 "parse.y"
 {
                  if (IS_SIGNATURE (OP0 (yyvsp[-1].ttype)))
                    {
@@ -5357,8 +5514,8 @@ case 290:
                    yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-1].ttype), OP1 (yyvsp[-1].ttype), NULL_TREE);
                ;
     break;}
-case 291:
-#line 1564 "parse.y"
+case 305:
+#line 1630 "parse.y"
 {
                  if (IDENTIFIER_GLOBAL_VALUE (yyvsp[-1].ttype)
                      && (TREE_CODE (TREE_TYPE (yyvsp[-3].ttype)) 
@@ -5367,8 +5524,8 @@ case 291:
                  yyval.ttype = cp_convert (void_type_node, yyvsp[-3].ttype);
                ;
     break;}
-case 292:
-#line 1572 "parse.y"
+case 306:
+#line 1638 "parse.y"
 {
                  if (yyvsp[-4].ttype != yyvsp[-1].ttype)
                    cp_error ("destructor specifier `%T::~%T()' must have matching names", yyvsp[-4].ttype, yyvsp[-1].ttype);
@@ -5378,42 +5535,42 @@ case 292:
                  yyval.ttype = cp_convert (void_type_node, yyvsp[-5].ttype);
                ;
     break;}
-case 293:
-#line 1581 "parse.y"
+case 307:
+#line 1647 "parse.y"
 {
                  yyval.ttype = error_mark_node;
                ;
     break;}
-case 294:
-#line 1626 "parse.y"
+case 308:
+#line 1692 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 295:
-#line 1628 "parse.y"
+case 309:
+#line 1694 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
-case 296:
-#line 1633 "parse.y"
+case 310:
+#line 1699 "parse.y"
 { yyval.itype = 0; ;
     break;}
-case 297:
-#line 1635 "parse.y"
+case 311:
+#line 1701 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
-case 298:
-#line 1640 "parse.y"
+case 312:
+#line 1706 "parse.y"
 { yyval.ttype = boolean_true_node; ;
     break;}
-case 299:
-#line 1642 "parse.y"
+case 313:
+#line 1708 "parse.y"
 { yyval.ttype = boolean_false_node; ;
     break;}
-case 301:
-#line 1649 "parse.y"
+case 315:
+#line 1715 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 302:
-#line 1654 "parse.y"
+case 316:
+#line 1720 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -5424,220 +5581,220 @@ case 302:
                  keep_next_level ();
                ;
     break;}
-case 303:
-#line 1667 "parse.y"
+case 317:
+#line 1733 "parse.y"
 { got_object = TREE_TYPE (yyval.ttype); ;
     break;}
-case 304:
-#line 1669 "parse.y"
+case 318:
+#line 1735 "parse.y"
 {
                  yyval.ttype = build_x_arrow (yyval.ttype); 
                  got_object = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 305:
-#line 1677 "parse.y"
+case 319:
+#line 1743 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t)))
                    note_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
-case 306:
-#line 1683 "parse.y"
+case 320:
+#line 1749 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  note_list_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
-case 307:
-#line 1688 "parse.y"
+case 321:
+#line 1754 "parse.y"
 { resume_momentary (yyvsp[-1].itype); ;
     break;}
-case 308:
-#line 1690 "parse.y"
+case 322:
+#line 1756 "parse.y"
 {
                  shadow_tag (yyvsp[-1].ftype.t);
                  note_list_got_semicolon (yyvsp[-1].ftype.t);
                ;
     break;}
-case 309:
-#line 1695 "parse.y"
+case 323:
+#line 1761 "parse.y"
 { warning ("empty declaration"); ;
     break;}
-case 310:
-#line 1697 "parse.y"
+case 324:
+#line 1763 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
-case 313:
-#line 1711 "parse.y"
+case 327:
+#line 1777 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (),
                                             NULL_TREE, NULL_TREE); ;
     break;}
-case 314:
-#line 1714 "parse.y"
+case 328:
+#line 1780 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE,
                                             NULL_TREE); ;
     break;}
-case 315:
-#line 1721 "parse.y"
+case 329:
+#line 1787 "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 316:
-#line 1724 "parse.y"
+case 330:
+#line 1790 "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 317:
-#line 1727 "parse.y"
+case 331:
+#line 1793 "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 318:
-#line 1730 "parse.y"
+case 332:
+#line 1796 "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 319:
-#line 1733 "parse.y"
+case 333:
+#line 1799 "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 322:
-#line 1749 "parse.y"
+case 336:
+#line 1815 "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 323:
-#line 1752 "parse.y"
+case 337:
+#line 1818 "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 324:
-#line 1755 "parse.y"
+case 338:
+#line 1821 "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 325:
-#line 1758 "parse.y"
+case 339:
+#line 1824 "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 326:
-#line 1761 "parse.y"
+case 340:
+#line 1827 "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 327:
-#line 1764 "parse.y"
+case 341:
+#line 1830 "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 328:
-#line 1771 "parse.y"
+case 342:
+#line 1837 "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 329:
-#line 1776 "parse.y"
+case 343:
+#line 1842 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ;
     break;}
-case 330:
-#line 1778 "parse.y"
+case 344:
+#line 1844 "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 331:
-#line 1783 "parse.y"
+case 345:
+#line 1849 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 332:
-#line 1785 "parse.y"
+case 346:
+#line 1851 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
-case 333:
-#line 1795 "parse.y"
+case 347:
+#line 1861 "parse.y"
 { yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ;
     break;}
-case 334:
-#line 1797 "parse.y"
+case 348:
+#line 1863 "parse.y"
 { yyval.ttype = IDENTIFIER_AS_LIST (yyval.ttype); ;
     break;}
-case 335:
-#line 1799 "parse.y"
+case 349:
+#line 1865 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
-case 336:
-#line 1802 "parse.y"
+case 350:
+#line 1868 "parse.y"
 { if (extra_warnings && TREE_STATIC (yyval.ttype))
                    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);
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
-case 337:
-#line 1808 "parse.y"
+case 351:
+#line 1874 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 338:
-#line 1810 "parse.y"
+case 352:
+#line 1876 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
-case 339:
-#line 1821 "parse.y"
+case 353:
+#line 1887 "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 340:
-#line 1824 "parse.y"
+case 354:
+#line 1890 "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 341:
-#line 1827 "parse.y"
+case 355:
+#line 1893 "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 342:
-#line 1830 "parse.y"
+case 356:
+#line 1896 "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 343:
-#line 1836 "parse.y"
+case 357:
+#line 1902 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
-case 344:
-#line 1838 "parse.y"
+case 358:
+#line 1904 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 346:
-#line 1848 "parse.y"
+case 360:
+#line 1914 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 347:
-#line 1850 "parse.y"
+case 361:
+#line 1916 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 348:
-#line 1852 "parse.y"
+case 362:
+#line 1918 "parse.y"
 { yyval.ftype.t = TREE_TYPE (yyvsp[-1].ttype);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 349:
-#line 1855 "parse.y"
+case 363:
+#line 1921 "parse.y"
 { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 350:
-#line 1858 "parse.y"
+case 364:
+#line 1924 "parse.y"
 { tree type = TREE_TYPE (yyvsp[-1].ttype);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5653,8 +5810,8 @@ case 350:
                    }
                ;
     break;}
-case 351:
-#line 1873 "parse.y"
+case 365:
+#line 1939 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5670,24 +5827,24 @@ case 351:
                    }
                ;
     break;}
-case 352:
-#line 1893 "parse.y"
+case 366:
+#line 1959 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 353:
-#line 1895 "parse.y"
+case 367:
+#line 1961 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
-case 361:
-#line 1916 "parse.y"
+case 375:
+#line 1982 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 362:
-#line 1918 "parse.y"
+case 376:
+#line 1984 "parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 363:
-#line 1923 "parse.y"
+case 377:
+#line 1989 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  if (current_declspecs
@@ -5704,13 +5861,13 @@ case 363:
                  yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 364:
-#line 1940 "parse.y"
+case 378:
+#line 2006 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
-case 365:
-#line 1943 "parse.y"
+case 379:
+#line 2009 "parse.y"
 { tree d;
                  split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
@@ -5729,36 +5886,36 @@ case 365:
                  cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 366:
-#line 1964 "parse.y"
+case 380:
+#line 2030 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 367:
-#line 1968 "parse.y"
+case 381:
+#line 2034 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ;
     break;}
-case 368:
-#line 1970 "parse.y"
+case 382:
+#line 2036 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 369:
-#line 1977 "parse.y"
+case 383:
+#line 2043 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 370:
-#line 1984 "parse.y"
+case 384:
+#line 2050 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
-case 371:
-#line 1987 "parse.y"
+case 385:
+#line 2053 "parse.y"
 { tree d;
                  split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
@@ -5767,21 +5924,21 @@ case 371:
                  cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 372:
-#line 1998 "parse.y"
+case 386:
+#line 2064 "parse.y"
 { current_declspecs = NULL_TREE;
                  prefix_attributes = NULL_TREE;
                  yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
                  cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
     break;}
-case 373:
-#line 2005 "parse.y"
+case 387:
+#line 2071 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
-case 374:
-#line 2008 "parse.y"
+case 388:
+#line 2074 "parse.y"
 { tree d;
                  current_declspecs = NULL_TREE;
                  prefix_attributes = NULL_TREE;
@@ -5790,121 +5947,121 @@ case 374:
                  cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
-case 375:
-#line 2021 "parse.y"
+case 389:
+#line 2087 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 376:
-#line 2023 "parse.y"
+case 390:
+#line 2089 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 377:
-#line 2028 "parse.y"
+case 391:
+#line 2094 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 378:
-#line 2030 "parse.y"
+case 392:
+#line 2096 "parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 379:
-#line 2035 "parse.y"
+case 393:
+#line 2101 "parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
-case 380:
-#line 2040 "parse.y"
+case 394:
+#line 2106 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 381:
-#line 2042 "parse.y"
+case 395:
+#line 2108 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 382:
-#line 2047 "parse.y"
+case 396:
+#line 2113 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 383:
-#line 2049 "parse.y"
+case 397:
+#line 2115 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 384:
-#line 2051 "parse.y"
+case 398:
+#line 2117 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
-case 385:
-#line 2053 "parse.y"
+case 399:
+#line 2119 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
-case 386:
-#line 2055 "parse.y"
+case 400:
+#line 2121 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 391:
-#line 2071 "parse.y"
+case 405:
+#line 2137 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 392:
-#line 2073 "parse.y"
+case 406:
+#line 2139 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 393:
-#line 2078 "parse.y"
+case 407:
+#line 2144 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 394:
-#line 2080 "parse.y"
+case 408:
+#line 2146 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 396:
-#line 2088 "parse.y"
+case 410:
+#line 2154 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
-case 397:
-#line 2091 "parse.y"
+case 411:
+#line 2157 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
-case 398:
-#line 2094 "parse.y"
+case 412:
+#line 2160 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
-case 399:
-#line 2097 "parse.y"
+case 413:
+#line 2163 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 400:
-#line 2104 "parse.y"
+case 414:
+#line 2170 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
-case 401:
-#line 2106 "parse.y"
+case 415:
+#line 2172 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 402:
-#line 2109 "parse.y"
+case 416:
+#line 2175 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 403:
-#line 2111 "parse.y"
+case 417:
+#line 2177 "parse.y"
 { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 404:
-#line 2113 "parse.y"
+case 418:
+#line 2179 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 405:
-#line 2115 "parse.y"
+case 419:
+#line 2181 "parse.y"
 { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 406:
-#line 2120 "parse.y"
+case 420:
+#line 2186 "parse.y"
 { start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype),
                                  NULL_TREE, 1);
                  reinit_parse_for_function (); ;
     break;}
-case 407:
-#line 2126 "parse.y"
+case 421:
+#line 2192 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -5912,92 +6069,96 @@ case 407:
                  process_next_inline (yyvsp[-3].ttype);
                ;
     break;}
-case 408:
-#line 2133 "parse.y"
+case 422:
+#line 2199 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
-case 409:
-#line 2135 "parse.y"
+case 423:
+#line 2201 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
-case 412:
-#line 2147 "parse.y"
+case 426:
+#line 2213 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 413:
-#line 2149 "parse.y"
+case 427:
+#line 2215 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, error_mark_node); ;
     break;}
-case 415:
-#line 2154 "parse.y"
+case 429:
+#line 2220 "parse.y"
 { do_pending_defargs (); ;
     break;}
-case 416:
-#line 2156 "parse.y"
+case 430:
+#line 2222 "parse.y"
 { do_pending_defargs (); ;
     break;}
-case 417:
-#line 2161 "parse.y"
+case 431:
+#line 2227 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (yyvsp[-1].ttype); ;
     break;}
-case 418:
-#line 2164 "parse.y"
+case 432:
+#line 2230 "parse.y"
 { yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype);
                  yyval.ftype.new_type_flag = 1;
                  resume_momentary ((int) yyvsp[-4].itype);
                  check_for_missing_semicolon (yyvsp[-3].ttype); ;
     break;}
-case 419:
-#line 2169 "parse.y"
+case 433:
+#line 2235 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype), NULL_TREE);
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
-case 420:
-#line 2173 "parse.y"
+case 434:
+#line 2239 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = start_enum (make_anon_name ()); ;
     break;}
-case 421:
-#line 2176 "parse.y"
+case 435:
+#line 2242 "parse.y"
 { yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype);
                  resume_momentary ((int) yyvsp[-5].itype);
                  check_for_missing_semicolon (yyvsp[-3].ttype);
                  yyval.ftype.new_type_flag = 1; ;
     break;}
-case 422:
-#line 2181 "parse.y"
+case 436:
+#line 2247 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (make_anon_name()), NULL_TREE);
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
-case 423:
-#line 2185 "parse.y"
+case 437:
+#line 2251 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 424:
-#line 2188 "parse.y"
+case 438:
+#line 2254 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 425:
-#line 2191 "parse.y"
+case 439:
+#line 2257 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 426:
-#line 2195 "parse.y"
+case 440:
+#line 2261 "parse.y"
+{ reset_specialization(); ;
+    break;}
+case 441:
+#line 2263 "parse.y"
 {
                  int semi;
                  tree id;
 
-                 yyval.ttype = yyvsp[-4].ttype;
+                 yyval.ttype = yyvsp[-5].ttype;
 #if 0
                  /* Need to rework class nesting in the
                     presence of nested classes, etc.  */
-                 shadow_tag (CLASSTYPE_AS_LIST (yyvsp[-4].ttype)); */
+                 shadow_tag (CLASSTYPE_AS_LIST (yyvsp[-5].ttype)); */
 #endif
                  if (yychar == YYEMPTY)
                    yychar = YYLEX;
@@ -6005,34 +6166,34 @@ case 426:
                  /* finish_struct nukes this anyway; if
                     finish_exception does too, then it can go.  */
                  if (semi)
-                   note_got_semicolon (yyvsp[-4].ttype);
+                   note_got_semicolon (yyvsp[-5].ttype);
 
-                 if (TREE_CODE (yyvsp[-4].ttype) == ENUMERAL_TYPE)
+                 if (TREE_CODE (yyvsp[-5].ttype) == ENUMERAL_TYPE)
                    ;
                  else
                    {
-                     yyval.ttype = finish_struct (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, semi);
+                     yyval.ttype = finish_struct (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, semi);
                      if (semi) note_got_semicolon (yyval.ttype);
                    }
 
                  pop_obstacks ();
 
                  if (! semi)
-                   check_for_missing_semicolon (yyvsp[-4].ttype); 
+                   check_for_missing_semicolon (yyvsp[-5].ttype); 
                  if (current_scope () == current_function_decl)
                    do_pending_defargs ();
                ;
     break;}
-case 427:
-#line 2229 "parse.y"
+case 442:
+#line 2297 "parse.y"
 {
                  if (pending_inlines 
                      && current_scope () == current_function_decl)
                    do_pending_inlines ();
                ;
     break;}
-case 428:
-#line 2235 "parse.y"
+case 443:
+#line 2303 "parse.y"
 { 
                  yyval.ftype.t = yyvsp[-3].ttype;
                  yyval.ftype.new_type_flag = 1; 
@@ -6040,8 +6201,8 @@ case 428:
                    clear_inline_text_obstack (); 
                ;
     break;}
-case 429:
-#line 2242 "parse.y"
+case 444:
+#line 2310 "parse.y"
 {
                  yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0;
@@ -6052,82 +6213,82 @@ case 429:
                              yyval.ftype.t);
                ;
     break;}
-case 433:
-#line 2261 "parse.y"
+case 448:
+#line 2329 "parse.y"
 { if (pedantic && !in_system_header)
                    pedwarn ("comma at end of enumerator list"); ;
     break;}
-case 435:
-#line 2268 "parse.y"
+case 450:
+#line 2336 "parse.y"
 { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 436:
-#line 2270 "parse.y"
+case 451:
+#line 2338 "parse.y"
 { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 437:
-#line 2272 "parse.y"
+case 452:
+#line 2340 "parse.y"
 { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 438:
-#line 2274 "parse.y"
+case 453:
+#line 2342 "parse.y"
 { error ("no body nor ';' separates two class, struct or union declarations"); ;
     break;}
-case 439:
-#line 2279 "parse.y"
+case 454:
+#line 2347 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 440:
-#line 2284 "parse.y"
+case 455:
+#line 2352 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 441:
-#line 2289 "parse.y"
+case 456:
+#line 2357 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 442:
-#line 2294 "parse.y"
+case 457:
+#line 2362 "parse.y"
 {
                  current_aggr = yyvsp[-3].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 443:
-#line 2299 "parse.y"
+case 458:
+#line 2367 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
-case 444:
-#line 2304 "parse.y"
+case 459:
+#line 2372 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 445:
-#line 2306 "parse.y"
+case 460:
+#line 2374 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 446:
-#line 2311 "parse.y"
+case 461:
+#line 2379 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 0); ;
     break;}
-case 447:
-#line 2316 "parse.y"
+case 462:
+#line 2384 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 1); ;
     break;}
-case 448:
-#line 2319 "parse.y"
+case 463:
+#line 2387 "parse.y"
 { 
                  yyval.ttype = yyvsp[-1].ttype;
                  if (yyvsp[0].ttype)
                     xref_basetypes (current_aggr, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); 
                ;
     break;}
-case 449:
-#line 2325 "parse.y"
+case 464:
+#line 2393 "parse.y"
 { 
                  yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
                  if (TREE_INT_CST_LOW (current_aggr) == union_type 
@@ -6154,29 +6315,29 @@ case 449:
                    }
                ;
     break;}
-case 450:
-#line 2354 "parse.y"
+case 465:
+#line 2422 "parse.y"
 { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), NULL_TREE, 0);
                  yyungetc ('{', 1); ;
     break;}
-case 453:
-#line 2365 "parse.y"
+case 468:
+#line 2433 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 454:
-#line 2367 "parse.y"
+case 469:
+#line 2435 "parse.y"
 { yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
     break;}
-case 455:
-#line 2369 "parse.y"
+case 470:
+#line 2437 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 457:
-#line 2375 "parse.y"
+case 472:
+#line 2443 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 458:
-#line 2380 "parse.y"
+case 473:
+#line 2448 "parse.y"
 {
                  tree type = TREE_TYPE (yyvsp[0].ttype);
                  if (! is_aggr_type (type, 1))
@@ -6202,8 +6363,8 @@ case 458:
                    yyval.ttype = build_tree_list (access_default_node, type);
                ;
     break;}
-case 459:
-#line 2405 "parse.y"
+case 474:
+#line 2473 "parse.y"
 {
                  tree type = TREE_TYPE (yyvsp[0].ttype);
                  if (current_aggr == signature_type_node)
@@ -6231,12 +6392,12 @@ case 459:
                    yyval.ttype = build_tree_list (yyval.ttype, type);
                ;
     break;}
-case 460:
-#line 2435 "parse.y"
+case 475:
+#line 2503 "parse.y"
 { yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
     break;}
-case 462:
-#line 2438 "parse.y"
+case 477:
+#line 2506 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6258,8 +6419,8 @@ case 462:
                    }
                ;
     break;}
-case 463:
-#line 2459 "parse.y"
+case 478:
+#line 2527 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6281,14 +6442,14 @@ case 463:
                    }
                ;
     break;}
-case 465:
-#line 2484 "parse.y"
+case 480:
+#line 2552 "parse.y"
 { if (yyval.ttype != ridpointers[(int)RID_VIRTUAL])
                    sorry ("non-virtual access");
                  yyval.ttype = access_default_virtual_node; ;
     break;}
-case 466:
-#line 2488 "parse.y"
+case 481:
+#line 2556 "parse.y"
 { int err = 0;
                  if (yyvsp[-1].ttype == access_protected_node)
                    {
@@ -6315,8 +6476,8 @@ case 466:
                    }
                ;
     break;}
-case 467:
-#line 2514 "parse.y"
+case 482:
+#line 2582 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    sorry ("non-virtual access");
                  if (yyval.ttype == access_public_node)
@@ -6324,8 +6485,8 @@ case 467:
                  else if (yyval.ttype == access_private_node)
                    yyval.ttype = access_private_virtual_node; ;
     break;}
-case 468:
-#line 2524 "parse.y"
+case 483:
+#line 2592 "parse.y"
 { tree t = yyvsp[-1].ttype;
                  push_obstacks_nochange ();
                  end_temporary_allocation ();
@@ -6406,18 +6567,18 @@ case 468:
 #endif
                ;
     break;}
-case 469:
-#line 2607 "parse.y"
+case 484:
+#line 2675 "parse.y"
 {
                    yyval.ttype = build_self_reference ();
                ;
     break;}
-case 470:
-#line 2614 "parse.y"
+case 485:
+#line 2682 "parse.y"
 { if (yyval.ttype) yyval.ttype = build_tree_list (access_public_node, yyval.ttype); ;
     break;}
-case 471:
-#line 2616 "parse.y"
+case 486:
+#line 2684 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    yyval.ttype = build_tree_list (access_public_node, yyvsp[0].ttype);
@@ -6426,8 +6587,8 @@ case 471:
                  if (yyvsp[-1].ttype) yyval.ttype = tree_cons (access_public_node, yyvsp[-1].ttype, yyval.ttype);
                ;
     break;}
-case 472:
-#line 2624 "parse.y"
+case 487:
+#line 2692 "parse.y"
 {
                  tree visspec = yyvsp[-2].ttype;
 
@@ -6439,20 +6600,20 @@ case 472:
                  yyval.ttype = chainon (yyval.ttype, build_tree_list (visspec, yyvsp[0].ttype));
                ;
     break;}
-case 473:
-#line 2635 "parse.y"
+case 488:
+#line 2703 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    error ("access specifier not allowed in signature");
                ;
     break;}
-case 474:
-#line 2645 "parse.y"
+case 489:
+#line 2713 "parse.y"
 { if (yyval.ttype == void_type_node) yyval.ttype = NULL_TREE; 
                ;
     break;}
-case 475:
-#line 2648 "parse.y"
+case 490:
+#line 2716 "parse.y"
 { /* In pushdecl, we created a reverse list of names
                     in this binding level.  Make sure that the chain
                     of what we're trying to add isn't the item itself
@@ -6466,87 +6627,92 @@ case 475:
                    }
                ;
     break;}
-case 476:
-#line 2664 "parse.y"
+case 491:
+#line 2732 "parse.y"
 { ;
     break;}
-case 477:
-#line 2666 "parse.y"
+case 492:
+#line 2734 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
-case 478:
-#line 2671 "parse.y"
+case 493:
+#line 2739 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 479:
-#line 2673 "parse.y"
+case 494:
+#line 2741 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 480:
-#line 2675 "parse.y"
+case 495:
+#line 2743 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 481:
-#line 2677 "parse.y"
+case 496:
+#line 2745 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
-case 482:
-#line 2679 "parse.y"
+case 497:
+#line 2747 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 483:
-#line 2681 "parse.y"
+case 498:
+#line 2749 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
-case 484:
-#line 2690 "parse.y"
+case 499:
+#line 2758 "parse.y"
 { yyval.ttype = grok_x_components (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 485:
-#line 2692 "parse.y"
+case 500:
+#line 2760 "parse.y"
 { yyval.ttype = grok_x_components (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 486:
-#line 2694 "parse.y"
+case 501:
+#line 2762 "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 487:
-#line 2697 "parse.y"
+case 502:
+#line 2765 "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 488:
-#line 2700 "parse.y"
+case 503:
+#line 2768 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 489:
-#line 2702 "parse.y"
+case 504:
+#line 2770 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 490:
-#line 2713 "parse.y"
+case 505:
+#line 2781 "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 491:
-#line 2718 "parse.y"
+case 506:
+#line 2786 "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 492:
-#line 2721 "parse.y"
+case 507:
+#line 2789 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
-case 493:
-#line 2723 "parse.y"
+case 508:
+#line 2791 "parse.y"
 { 
-                 end_template_decl (); 
-                 if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype))
+                  if (yyvsp[-1].ttype)
+                   end_template_decl (); 
+                  else
+                    end_specialization ();
+
+                 if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype)
+                     && !DECL_TEMPLATE_SPECIALIZATION (yyvsp[0].ttype))
                    {
                      yyval.ttype = DECL_TI_TEMPLATE (yyvsp[0].ttype); 
                      check_member_template (yyval.ttype);
@@ -6560,12 +6726,12 @@ case 493:
                    }
                ;
     break;}
-case 494:
-#line 2743 "parse.y"
+case 509:
+#line 2816 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 496:
-#line 2746 "parse.y"
+case 511:
+#line 2819 "parse.y"
 {
                  /* In this context, void_type_node encodes
                     friends.  They have been recorded elsewhere.  */
@@ -6575,12 +6741,12 @@ case 496:
                    yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
                ;
     break;}
-case 497:
-#line 2758 "parse.y"
+case 512:
+#line 2831 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 499:
-#line 2761 "parse.y"
+case 514:
+#line 2834 "parse.y"
 {
                  /* In this context, void_type_node encodes
                     friends.  They have been recorded elsewhere.  */
@@ -6590,103 +6756,103 @@ case 499:
                    yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
                ;
     break;}
-case 504:
-#line 2783 "parse.y"
+case 519:
+#line 2856 "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 505:
-#line 2789 "parse.y"
+case 520:
+#line 2862 "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 506:
-#line 2798 "parse.y"
+case 521:
+#line 2871 "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 507:
-#line 2804 "parse.y"
+case 522:
+#line 2877 "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 508:
-#line 2810 "parse.y"
+case 523:
+#line 2883 "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 509:
-#line 2816 "parse.y"
+case 524:
+#line 2889 "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 510:
-#line 2825 "parse.y"
+case 525:
+#line 2898 "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 511:
-#line 2828 "parse.y"
+case 526:
+#line 2901 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 512:
-#line 2834 "parse.y"
+case 527:
+#line 2907 "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 513:
-#line 2837 "parse.y"
+case 528:
+#line 2910 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 514:
-#line 2840 "parse.y"
+case 529:
+#line 2913 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 516:
-#line 2851 "parse.y"
+case 531:
+#line 2924 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 517:
-#line 2856 "parse.y"
+case 532:
+#line 2929 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE); ;
     break;}
-case 518:
-#line 2858 "parse.y"
+case 533:
+#line 2931 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 519:
-#line 2864 "parse.y"
+case 534:
+#line 2937 "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 520:
-#line 2867 "parse.y"
+case 535:
+#line 2940 "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 521:
-#line 2872 "parse.y"
+case 536:
+#line 2945 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6695,72 +6861,72 @@ case 521:
                  yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag;
                ;
     break;}
-case 522:
-#line 2883 "parse.y"
+case 537:
+#line 2956 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 523:
-#line 2885 "parse.y"
+case 538:
+#line 2958 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 524:
-#line 2890 "parse.y"
+case 539:
+#line 2963 "parse.y"
 { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 525:
-#line 2893 "parse.y"
+case 540:
+#line 2966 "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 526:
-#line 2902 "parse.y"
+case 541:
+#line 2975 "parse.y"
 { yyval.itype = suspend_momentary (); ;
     break;}
-case 527:
-#line 2907 "parse.y"
+case 542:
+#line 2980 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 528:
-#line 2913 "parse.y"
+case 543:
+#line 2986 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 529:
-#line 2915 "parse.y"
+case 544:
+#line 2988 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 530:
-#line 2917 "parse.y"
+case 545:
+#line 2990 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
-case 531:
-#line 2919 "parse.y"
+case 546:
+#line 2992 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
-case 532:
-#line 2926 "parse.y"
+case 547:
+#line 2999 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 533:
-#line 2928 "parse.y"
+case 548:
+#line 3001 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 534:
-#line 2930 "parse.y"
+case 549:
+#line 3003 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 535:
-#line 2932 "parse.y"
+case 550:
+#line 3005 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 536:
-#line 2934 "parse.y"
+case 551:
+#line 3007 "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 538:
-#line 2942 "parse.y"
+case 553:
+#line 3015 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
@@ -6781,8 +6947,8 @@ case 538:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 539:
-#line 2962 "parse.y"
+case 554:
+#line 3035 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype);
@@ -6791,98 +6957,98 @@ case 539:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 542:
-#line 2975 "parse.y"
+case 557:
+#line 3048 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 543:
-#line 2980 "parse.y"
+case 558:
+#line 3053 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
-case 544:
-#line 2985 "parse.y"
+case 559:
+#line 3058 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 545:
-#line 2987 "parse.y"
+case 560:
+#line 3060 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 546:
-#line 2989 "parse.y"
+case 561:
+#line 3062 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 547:
-#line 2991 "parse.y"
+case 562:
+#line 3064 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 548:
-#line 2993 "parse.y"
+case 563:
+#line 3066 "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 550:
-#line 3004 "parse.y"
+case 565:
+#line 3077 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 551:
-#line 3006 "parse.y"
+case 566:
+#line 3079 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 552:
-#line 3008 "parse.y"
+case 567:
+#line 3081 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 553:
-#line 3010 "parse.y"
+case 568:
+#line 3083 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 554:
-#line 3012 "parse.y"
+case 569:
+#line 3085 "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 556:
-#line 3020 "parse.y"
+case 571:
+#line 3093 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 557:
-#line 3022 "parse.y"
+case 572:
+#line 3095 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 558:
-#line 3024 "parse.y"
+case 573:
+#line 3097 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 559:
-#line 3026 "parse.y"
+case 574:
+#line 3099 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 560:
-#line 3028 "parse.y"
+case 575:
+#line 3101 "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 562:
-#line 3036 "parse.y"
+case 577:
+#line 3109 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 563:
-#line 3038 "parse.y"
+case 578:
+#line 3111 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 564:
-#line 3040 "parse.y"
+case 579:
+#line 3113 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 565:
-#line 3042 "parse.y"
+case 580:
+#line 3115 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 566:
-#line 3044 "parse.y"
+case 581:
+#line 3117 "parse.y"
 { if (OP0 (yyval.ttype) != current_class_type)
                    {
                      push_nested_class (OP0 (yyval.ttype), 3);
@@ -6890,38 +7056,59 @@ case 566:
                    }
                ;
     break;}
-case 567:
-#line 3054 "parse.y"
+case 582:
+#line 3124 "parse.y"
+{ got_scope = NULL_TREE;
+                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
+                 if (yyvsp[-1].ttype != current_class_type)
+                   {
+                     push_nested_class (yyvsp[-1].ttype, 3);
+                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
+                   }
+               ;
+    break;}
+case 583:
+#line 3136 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 568:
-#line 3060 "parse.y"
+case 584:
+#line 3139 "parse.y"
+{ got_scope = NULL_TREE;
+                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+    break;}
+case 585:
+#line 3145 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 570:
-#line 3067 "parse.y"
+case 586:
+#line 3148 "parse.y"
+{ got_scope = NULL_TREE;
+                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+    break;}
+case 588:
+#line 3155 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 571:
-#line 3072 "parse.y"
+case 589:
+#line 3160 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 572:
-#line 3074 "parse.y"
+case 590:
+#line 3162 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 573:
-#line 3076 "parse.y"
+case 591:
+#line 3164 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 578:
-#line 3088 "parse.y"
+case 596:
+#line 3176 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 579:
-#line 3095 "parse.y"
+case 597:
+#line 3183 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
@@ -6936,32 +7123,32 @@ case 579:
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 580:
-#line 3109 "parse.y"
+case 598:
+#line 3197 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 581:
-#line 3115 "parse.y"
+case 599:
+#line 3203 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 582:
-#line 3121 "parse.y"
+case 600:
+#line 3209 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
-case 584:
-#line 3137 "parse.y"
+case 602:
+#line 3225 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 585:
-#line 3142 "parse.y"
+case 603:
+#line 3230 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6971,15 +7158,15 @@ case 585:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 586:
-#line 3154 "parse.y"
+case 604:
+#line 3242 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
-case 587:
-#line 3159 "parse.y"
+case 605:
+#line 3247 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6989,36 +7176,36 @@ case 587:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 588:
-#line 3171 "parse.y"
+case 606:
+#line 3259 "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 589:
-#line 3177 "parse.y"
+case 607:
+#line 3265 "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 590:
-#line 3183 "parse.y"
+case 608:
+#line 3271 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
-case 593:
-#line 3187 "parse.y"
+case 611:
+#line 3275 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 594:
-#line 3196 "parse.y"
+case 612:
+#line 3284 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype);
@@ -7027,157 +7214,157 @@ case 594:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 596:
-#line 3205 "parse.y"
+case 614:
+#line 3293 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 597:
-#line 3210 "parse.y"
+case 615:
+#line 3298 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 598:
-#line 3212 "parse.y"
+case 616:
+#line 3300 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
-case 599:
-#line 3219 "parse.y"
+case 617:
+#line 3307 "parse.y"
 { got_scope = void_type_node; ;
     break;}
-case 600:
-#line 3225 "parse.y"
+case 618:
+#line 3313 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 601:
-#line 3227 "parse.y"
+case 619:
+#line 3315 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 602:
-#line 3229 "parse.y"
+case 620:
+#line 3317 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 603:
-#line 3231 "parse.y"
+case 621:
+#line 3319 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 604:
-#line 3233 "parse.y"
+case 622:
+#line 3321 "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 605:
-#line 3237 "parse.y"
+case 623:
+#line 3325 "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 607:
-#line 3246 "parse.y"
+case 625:
+#line 3334 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 608:
-#line 3248 "parse.y"
+case 626:
+#line 3336 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 609:
-#line 3254 "parse.y"
+case 627:
+#line 3342 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 610:
-#line 3256 "parse.y"
+case 628:
+#line 3344 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 611:
-#line 3258 "parse.y"
+case 629:
+#line 3346 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 612:
-#line 3260 "parse.y"
+case 630:
+#line 3348 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 613:
-#line 3262 "parse.y"
+case 631:
+#line 3350 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 614:
-#line 3264 "parse.y"
+case 632:
+#line 3352 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 615:
-#line 3266 "parse.y"
+case 633:
+#line 3354 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 616:
-#line 3268 "parse.y"
+case 634:
+#line 3356 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 617:
-#line 3270 "parse.y"
+case 635:
+#line 3358 "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 618:
-#line 3274 "parse.y"
+case 636:
+#line 3362 "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 620:
-#line 3283 "parse.y"
+case 638:
+#line 3371 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 622:
-#line 3287 "parse.y"
+case 640:
+#line 3375 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 623:
-#line 3289 "parse.y"
+case 641:
+#line 3377 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 624:
-#line 3291 "parse.y"
+case 642:
+#line 3379 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 625:
-#line 3293 "parse.y"
+case 643:
+#line 3381 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 626:
-#line 3295 "parse.y"
+case 644:
+#line 3383 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 627:
-#line 3297 "parse.y"
+case 645:
+#line 3385 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 628:
-#line 3299 "parse.y"
+case 646:
+#line 3387 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 629:
-#line 3301 "parse.y"
+case 647:
+#line 3389 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 630:
-#line 3303 "parse.y"
+case 648:
+#line 3391 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
-case 636:
-#line 3327 "parse.y"
+case 654:
+#line 3415 "parse.y"
 { do_pushlevel (); ;
     break;}
-case 637:
-#line 3332 "parse.y"
+case 655:
+#line 3420 "parse.y"
 { yyval.ttype = do_poplevel (); ;
     break;}
-case 639:
-#line 3340 "parse.y"
+case 657:
+#line 3428 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
-case 642:
-#line 3351 "parse.y"
+case 660:
+#line 3439 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7187,12 +7374,12 @@ case 642:
                    }
                ;
     break;}
-case 643:
-#line 3365 "parse.y"
+case 661:
+#line 3453 "parse.y"
 {;
     break;}
-case 645:
-#line 3371 "parse.y"
+case 663:
+#line 3459 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7201,8 +7388,8 @@ case 645:
                    }
                ;
     break;}
-case 646:
-#line 3379 "parse.y"
+case 664:
+#line 3467 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7213,8 +7400,8 @@ case 646:
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 647:
-#line 3392 "parse.y"
+case 665:
+#line 3480 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7225,8 +7412,8 @@ case 647:
                   cond_stmt_keyword = "if";
                ;
     break;}
-case 648:
-#line 3402 "parse.y"
+case 666:
+#line 3490 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7246,8 +7433,8 @@ case 648:
                    }
                ;
     break;}
-case 649:
-#line 3421 "parse.y"
+case 667:
+#line 3509 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7257,12 +7444,12 @@ case 649:
                    }
                ;
     break;}
-case 650:
-#line 3433 "parse.y"
+case 668:
+#line 3521 "parse.y"
 { finish_stmt (); ;
     break;}
-case 651:
-#line 3435 "parse.y"
+case 669:
+#line 3523 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7271,8 +7458,8 @@ case 651:
                    }
                ;
     break;}
-case 652:
-#line 3443 "parse.y"
+case 670:
+#line 3531 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7283,16 +7470,16 @@ case 652:
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 653:
-#line 3456 "parse.y"
+case 671:
+#line 3544 "parse.y"
 { finish_stmt (); ;
     break;}
-case 655:
-#line 3462 "parse.y"
+case 673:
+#line 3550 "parse.y"
 { finish_stmt (); ;
     break;}
-case 656:
-#line 3464 "parse.y"
+case 674:
+#line 3552 "parse.y"
 {
                  tree expr = yyvsp[-1].ttype;
                  if (! processing_template_decl)
@@ -7309,12 +7496,12 @@ case 656:
                  clear_momentary ();
                  finish_stmt (); ;
     break;}
-case 657:
-#line 3480 "parse.y"
+case 675:
+#line 3568 "parse.y"
 { if (! processing_template_decl) expand_start_else (); ;
     break;}
-case 658:
-#line 3482 "parse.y"
+case 676:
+#line 3570 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7326,18 +7513,18 @@ case 658:
                    expand_end_cond ();
                ;
     break;}
-case 659:
-#line 3493 "parse.y"
+case 677:
+#line 3581 "parse.y"
 { finish_stmt (); ;
     break;}
-case 660:
-#line 3495 "parse.y"
+case 678:
+#line 3583 "parse.y"
 { if (! processing_template_decl) expand_end_cond ();
                  do_poplevel ();
                  finish_stmt (); ;
     break;}
-case 661:
-#line 3499 "parse.y"
+case 679:
+#line 3587 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7353,8 +7540,8 @@ case 661:
                  cond_stmt_keyword = "while";
                ;
     break;}
-case 662:
-#line 3514 "parse.y"
+case 680:
+#line 3602 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7374,8 +7561,8 @@ case 662:
                    }
                ;
     break;}
-case 663:
-#line 3533 "parse.y"
+case 681:
+#line 3621 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7388,8 +7575,8 @@ case 663:
                  finish_stmt ();
                ;
     break;}
-case 664:
-#line 3545 "parse.y"
+case 682:
+#line 3633 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7404,8 +7591,8 @@ case 664:
                    }
                ;
     break;}
-case 665:
-#line 3559 "parse.y"
+case 683:
+#line 3647 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7420,8 +7607,8 @@ case 665:
                    }
                ;
     break;}
-case 666:
-#line 3573 "parse.y"
+case 684:
+#line 3661 "parse.y"
 {
                  if (processing_template_decl)
                    TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype;
@@ -7435,8 +7622,8 @@ case 666:
                  finish_stmt ();
                ;
     break;}
-case 667:
-#line 3586 "parse.y"
+case 685:
+#line 3674 "parse.y"
 { if (processing_template_decl)
                    {
                      yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, 
@@ -7456,8 +7643,8 @@ case 667:
                    }
                ;
     break;}
-case 668:
-#line 3605 "parse.y"
+case 686:
+#line 3693 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7476,8 +7663,8 @@ case 668:
                    }
                ;
     break;}
-case 669:
-#line 3623 "parse.y"
+case 687:
+#line 3711 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7497,16 +7684,16 @@ case 669:
                    }
                ;
     break;}
-case 670:
-#line 3644 "parse.y"
+case 688:
+#line 3732 "parse.y"
 {
                  if (processing_template_decl)
                    TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype;
                  push_momentary ();
                ;
     break;}
-case 671:
-#line 3650 "parse.y"
+case 689:
+#line 3738 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7528,8 +7715,8 @@ case 671:
                    }
                  finish_stmt (); ;
     break;}
-case 672:
-#line 3671 "parse.y"
+case 690:
+#line 3759 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7547,8 +7734,8 @@ case 672:
                  push_momentary ();
                ;
     break;}
-case 673:
-#line 3688 "parse.y"
+case 691:
+#line 3776 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7562,60 +7749,60 @@ case 673:
                  pop_switch (); 
                ;
     break;}
-case 674:
-#line 3701 "parse.y"
+case 692:
+#line 3789 "parse.y"
 { finish_stmt (); ;
     break;}
-case 675:
-#line 3703 "parse.y"
+case 693:
+#line 3791 "parse.y"
 { do_case (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
-case 677:
-#line 3706 "parse.y"
+case 695:
+#line 3794 "parse.y"
 { do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 679:
-#line 3709 "parse.y"
+case 697:
+#line 3797 "parse.y"
 { do_case (NULL_TREE, NULL_TREE); ;
     break;}
-case 681:
-#line 3712 "parse.y"
+case 699:
+#line 3800 "parse.y"
 { emit_line_note (input_filename, lineno);
                  if (processing_template_decl)
                    add_tree (build_min_nt (BREAK_STMT));
                  else if ( ! expand_exit_something ())
                    error ("break statement not within loop or switch"); ;
     break;}
-case 682:
-#line 3718 "parse.y"
+case 700:
+#line 3806 "parse.y"
 { emit_line_note (input_filename, lineno);
                  if (processing_template_decl)
                    add_tree (build_min_nt (CONTINUE_STMT));
                  else if (! expand_continue_loop (0))
                    error ("continue statement not within a loop"); ;
     break;}
-case 683:
-#line 3724 "parse.y"
+case 701:
+#line 3812 "parse.y"
 { emit_line_note (input_filename, lineno);
                  c_expand_return (NULL_TREE); ;
     break;}
-case 684:
-#line 3727 "parse.y"
+case 702:
+#line 3815 "parse.y"
 { emit_line_note (input_filename, lineno);
                  c_expand_return (yyvsp[-1].ttype);
                  finish_stmt ();
                ;
     break;}
-case 685:
-#line 3732 "parse.y"
+case 703:
+#line 3820 "parse.y"
 { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
                  emit_line_note (input_filename, lineno);
                  expand_asm (yyvsp[-2].ttype);
                  finish_stmt ();
                ;
     break;}
-case 686:
-#line 3739 "parse.y"
+case 704:
+#line 3827 "parse.y"
 { if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
                  emit_line_note (input_filename, lineno);
                  c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
@@ -7624,8 +7811,8 @@ case 686:
                  finish_stmt ();
                ;
     break;}
-case 687:
-#line 3748 "parse.y"
+case 705:
+#line 3836 "parse.y"
 { if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
                  emit_line_note (input_filename, lineno);
                  c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
@@ -7634,8 +7821,8 @@ case 687:
                  finish_stmt ();
                ;
     break;}
-case 688:
-#line 3758 "parse.y"
+case 706:
+#line 3846 "parse.y"
 { if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype);
                  emit_line_note (input_filename, lineno);
                  c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
@@ -7644,8 +7831,8 @@ case 688:
                  finish_stmt ();
                ;
     break;}
-case 689:
-#line 3766 "parse.y"
+case 707:
+#line 3854 "parse.y"
 {
                  if (processing_template_decl)
                    add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
@@ -7654,8 +7841,8 @@ case 689:
                      expand_computed_goto (yyvsp[-1].ttype); }
                ;
     break;}
-case 690:
-#line 3774 "parse.y"
+case 708:
+#line 3862 "parse.y"
 {
                  if (processing_template_decl)
                    add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
@@ -7669,34 +7856,34 @@ case 690:
                    }
                ;
     break;}
-case 691:
-#line 3787 "parse.y"
+case 709:
+#line 3875 "parse.y"
 { finish_stmt (); ;
     break;}
-case 692:
-#line 3789 "parse.y"
+case 710:
+#line 3877 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
-case 693:
-#line 3793 "parse.y"
+case 711:
+#line 3881 "parse.y"
 { finish_stmt (); ;
     break;}
-case 695:
-#line 3799 "parse.y"
+case 713:
+#line 3887 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
                  expand_start_early_try_stmts ();
                ;
     break;}
-case 696:
-#line 3805 "parse.y"
+case 714:
+#line 3893 "parse.y"
 { expand_start_all_catch (); ;
     break;}
-case 697:
-#line 3807 "parse.y"
+case 715:
+#line 3895 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -7704,8 +7891,8 @@ case 697:
                  finish_function (lineno, (int)yyvsp[-3].itype, nested);
                ;
     break;}
-case 698:
-#line 3817 "parse.y"
+case 716:
+#line 3905 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7720,8 +7907,8 @@ case 698:
                    }
                ;
     break;}
-case 699:
-#line 3831 "parse.y"
+case 717:
+#line 3919 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7733,8 +7920,8 @@ case 699:
                    expand_start_all_catch ();
                ;
     break;}
-case 700:
-#line 3842 "parse.y"
+case 718:
+#line 3930 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7746,8 +7933,8 @@ case 700:
                    expand_end_all_catch ();
                ;
     break;}
-case 703:
-#line 3861 "parse.y"
+case 721:
+#line 3949 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7757,8 +7944,8 @@ case 703:
                    }
                ;
     break;}
-case 704:
-#line 3870 "parse.y"
+case 722:
+#line 3958 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7768,8 +7955,8 @@ case 704:
                    }
                ;
     break;}
-case 705:
-#line 3879 "parse.y"
+case 723:
+#line 3967 "parse.y"
 {
                  if (processing_template_decl)
                    {
@@ -7781,18 +7968,18 @@ case 705:
                    expand_end_catch_block ();
                ;
     break;}
-case 709:
-#line 3899 "parse.y"
+case 727:
+#line 3987 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
-case 710:
-#line 3915 "parse.y"
+case 728:
+#line 4003 "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 711:
-#line 3922 "parse.y"
+case 729:
+#line 4010 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7800,130 +7987,130 @@ case 711:
                    expand_label (label);
                ;
     break;}
-case 712:
-#line 3929 "parse.y"
+case 730:
+#line 4017 "parse.y"
 { goto do_label; ;
     break;}
-case 713:
-#line 3931 "parse.y"
+case 731:
+#line 4019 "parse.y"
 { goto do_label; ;
     break;}
-case 714:
-#line 3933 "parse.y"
+case 732:
+#line 4021 "parse.y"
 { goto do_label; ;
     break;}
-case 715:
-#line 3938 "parse.y"
+case 733:
+#line 4026 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 717:
-#line 3941 "parse.y"
+case 735:
+#line 4029 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
-case 718:
-#line 3950 "parse.y"
+case 736:
+#line 4038 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 719:
-#line 3953 "parse.y"
+case 737:
+#line 4041 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
-case 720:
-#line 3958 "parse.y"
+case 738:
+#line 4046 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 722:
-#line 3961 "parse.y"
+case 740:
+#line 4049 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 723:
-#line 3968 "parse.y"
+case 741:
+#line 4056 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 726:
-#line 3975 "parse.y"
+case 744:
+#line 4063 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 727:
-#line 3980 "parse.y"
+case 745:
+#line 4068 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 728:
-#line 3985 "parse.y"
+case 746:
+#line 4073 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
-case 729:
-#line 3987 "parse.y"
+case 747:
+#line 4075 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 730:
-#line 3998 "parse.y"
+case 748:
+#line 4086 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
-case 732:
-#line 4003 "parse.y"
+case 750:
+#line 4091 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, void_list_node);
                  TREE_PARMLIST (yyval.ttype) = 1; 
                  check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
     break;}
-case 733:
-#line 4012 "parse.y"
+case 751:
+#line 4100 "parse.y"
 {
                  yyval.ttype = chainon (yyval.ttype, void_list_node);
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 734:
-#line 4017 "parse.y"
+case 752:
+#line 4105 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 735:
-#line 4022 "parse.y"
+case 753:
+#line 4110 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 736:
-#line 4026 "parse.y"
+case 754:
+#line 4114 "parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); 
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 737:
-#line 4031 "parse.y"
+case 755:
+#line 4119 "parse.y"
 {
                  yyval.ttype = NULL_TREE;
                ;
     break;}
-case 738:
-#line 4035 "parse.y"
+case 756:
+#line 4123 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 739:
-#line 4039 "parse.y"
+case 757:
+#line 4127 "parse.y"
 {
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 740:
-#line 4043 "parse.y"
+case 758:
+#line 4131 "parse.y"
 {
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t);
                  TREE_PARMLIST (yyval.ttype) = 1;
                ;
     break;}
-case 741:
-#line 4048 "parse.y"
+case 759:
+#line 4136 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7935,8 +8122,8 @@ case 741:
                  yychar = ')';
                ;
     break;}
-case 742:
-#line 4059 "parse.y"
+case 760:
+#line 4147 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7948,99 +8135,99 @@ case 742:
                  yychar = ')';
                ;
     break;}
-case 743:
-#line 4074 "parse.y"
+case 761:
+#line 4162 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
-case 744:
-#line 4076 "parse.y"
+case 762:
+#line 4164 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 747:
-#line 4087 "parse.y"
+case 765:
+#line 4175 "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 748:
-#line 4090 "parse.y"
+case 766:
+#line 4178 "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 749:
-#line 4093 "parse.y"
+case 767:
+#line 4181 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
-case 750:
-#line 4096 "parse.y"
+case 768:
+#line 4184 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 751:
-#line 4098 "parse.y"
+case 769:
+#line 4186 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
-case 753:
-#line 4104 "parse.y"
+case 771:
+#line 4192 "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 754:
-#line 4114 "parse.y"
+case 772:
+#line 4202 "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 755:
-#line 4118 "parse.y"
+case 773:
+#line 4206 "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 756:
-#line 4121 "parse.y"
+case 774:
+#line 4209 "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 757:
-#line 4124 "parse.y"
+case 775:
+#line 4212 "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 758:
-#line 4128 "parse.y"
+case 776:
+#line 4216 "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 759:
-#line 4132 "parse.y"
+case 777:
+#line 4220 "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 760:
-#line 4139 "parse.y"
+case 778:
+#line 4227 "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 761:
-#line 4142 "parse.y"
+case 779:
+#line 4230 "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 764:
-#line 4153 "parse.y"
+case 782:
+#line 4241 "parse.y"
 { see_typename (); ;
     break;}
-case 765:
-#line 4158 "parse.y"
+case 783:
+#line 4246 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
-case 766:
-#line 4163 "parse.y"
+case 784:
+#line 4251 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -8049,189 +8236,189 @@ case 766:
                  yyval.ttype = build_tree_list (integer_type_node, yyval.ttype);
                ;
     break;}
-case 767:
-#line 4174 "parse.y"
+case 785:
+#line 4262 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 768:
-#line 4176 "parse.y"
+case 786:
+#line 4264 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 769:
-#line 4178 "parse.y"
+case 787:
+#line 4266 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
-case 770:
-#line 4183 "parse.y"
+case 788:
+#line 4271 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
-case 772:
-#line 4189 "parse.y"
+case 790:
+#line 4277 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 773:
-#line 4197 "parse.y"
+case 791:
+#line 4285 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 774:
-#line 4199 "parse.y"
+case 792:
+#line 4287 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 775:
-#line 4201 "parse.y"
+case 793:
+#line 4289 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 776:
-#line 4203 "parse.y"
+case 794:
+#line 4291 "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 777:
-#line 4210 "parse.y"
+case 795:
+#line 4298 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 778:
-#line 4215 "parse.y"
+case 796:
+#line 4303 "parse.y"
 { yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
-case 779:
-#line 4217 "parse.y"
+case 797:
+#line 4305 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
-case 780:
-#line 4219 "parse.y"
+case 798:
+#line 4307 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
-case 781:
-#line 4221 "parse.y"
+case 799:
+#line 4309 "parse.y"
 { yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
-case 782:
-#line 4223 "parse.y"
+case 800:
+#line 4311 "parse.y"
 { yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
-case 783:
-#line 4225 "parse.y"
+case 801:
+#line 4313 "parse.y"
 { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
-case 784:
-#line 4227 "parse.y"
+case 802:
+#line 4315 "parse.y"
 { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
-case 785:
-#line 4229 "parse.y"
+case 803:
+#line 4317 "parse.y"
 { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
-case 786:
-#line 4231 "parse.y"
+case 804:
+#line 4319 "parse.y"
 { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
-case 787:
-#line 4233 "parse.y"
+case 805:
+#line 4321 "parse.y"
 { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
-case 788:
-#line 4235 "parse.y"
+case 806:
+#line 4323 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 789:
-#line 4237 "parse.y"
+case 807:
+#line 4325 "parse.y"
 { yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
-case 790:
-#line 4239 "parse.y"
+case 808:
+#line 4327 "parse.y"
 { yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
-case 791:
-#line 4241 "parse.y"
+case 809:
+#line 4329 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 792:
-#line 4243 "parse.y"
+case 810:
+#line 4331 "parse.y"
 { yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
-case 793:
-#line 4245 "parse.y"
+case 811:
+#line 4333 "parse.y"
 { yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
-case 794:
-#line 4247 "parse.y"
+case 812:
+#line 4335 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 795:
-#line 4249 "parse.y"
+case 813:
+#line 4337 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 796:
-#line 4251 "parse.y"
+case 814:
+#line 4339 "parse.y"
 { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
-case 797:
-#line 4253 "parse.y"
+case 815:
+#line 4341 "parse.y"
 { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
-case 798:
-#line 4255 "parse.y"
+case 816:
+#line 4343 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
-case 799:
-#line 4257 "parse.y"
+case 817:
+#line 4345 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
-case 800:
-#line 4259 "parse.y"
+case 818:
+#line 4347 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
-case 801:
-#line 4261 "parse.y"
+case 819:
+#line 4349 "parse.y"
 { yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
-case 802:
-#line 4263 "parse.y"
+case 820:
+#line 4351 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
-case 803:
-#line 4265 "parse.y"
+case 821:
+#line 4353 "parse.y"
 { yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
-case 804:
-#line 4267 "parse.y"
+case 822:
+#line 4355 "parse.y"
 { yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
-case 805:
-#line 4269 "parse.y"
+case 823:
+#line 4357 "parse.y"
 { yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
-case 806:
-#line 4271 "parse.y"
+case 824:
+#line 4359 "parse.y"
 { yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
-case 807:
-#line 4273 "parse.y"
+case 825:
+#line 4361 "parse.y"
 { yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
-case 808:
-#line 4275 "parse.y"
+case 826:
+#line 4363 "parse.y"
 { yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
-case 809:
-#line 4277 "parse.y"
+case 827:
+#line 4365 "parse.y"
 { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
-case 810:
-#line 4279 "parse.y"
+case 828:
+#line 4367 "parse.y"
 { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
-case 811:
-#line 4282 "parse.y"
+case 829:
+#line 4370 "parse.y"
 { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 812:
-#line 4284 "parse.y"
+case 830:
+#line 4372 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
@@ -8432,7 +8619,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 4287 "parse.y"
+#line 4375 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 432766b00f28e98d35c5478281b2722759924745..f45eb6f8604cf1335f281df6fc8ea81cb6d305e5 100644 (file)
@@ -2,89 +2,90 @@ typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagg
 #define        IDENTIFIER      258
 #define        TYPENAME        259
 #define        SELFNAME        260
-#define        SCSPEC  261
-#define        TYPESPEC        262
-#define        CV_QUALIFIER    263
-#define        CONSTANT        264
-#define        STRING  265
-#define        ELLIPSIS        266
-#define        SIZEOF  267
-#define        ENUM    268
-#define        IF      269
-#define        ELSE    270
-#define        WHILE   271
-#define        DO      272
-#define        FOR     273
-#define        SWITCH  274
-#define        CASE    275
-#define        DEFAULT 276
-#define        BREAK   277
-#define        CONTINUE        278
-#define        RETURN  279
-#define        GOTO    280
-#define        ASM_KEYWORD     281
-#define        GCC_ASM_KEYWORD 282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        SIGOF   285
-#define        ATTRIBUTE       286
-#define        EXTENSION       287
-#define        LABEL   288
-#define        REALPART        289
-#define        IMAGPART        290
-#define        AGGR    291
-#define        VISSPEC 292
-#define        DELETE  293
-#define        NEW     294
-#define        THIS    295
-#define        OPERATOR        296
-#define        CXX_TRUE        297
-#define        CXX_FALSE       298
-#define        NAMESPACE       299
-#define        TYPENAME_KEYWORD        300
-#define        USING   301
-#define        LEFT_RIGHT      302
-#define        TEMPLATE        303
-#define        TYPEID  304
-#define        DYNAMIC_CAST    305
-#define        STATIC_CAST     306
-#define        REINTERPRET_CAST        307
-#define        CONST_CAST      308
-#define        SCOPE   309
-#define        EMPTY   310
-#define        PTYPENAME       311
-#define        NSNAME  312
-#define        THROW   313
-#define        ASSIGN  314
-#define        OROR    315
-#define        ANDAND  316
-#define        MIN_MAX 317
-#define        EQCOMPARE       318
-#define        ARITHCOMPARE    319
-#define        LSHIFT  320
-#define        RSHIFT  321
-#define        POINTSAT_STAR   322
-#define        DOT_STAR        323
-#define        UNARY   324
-#define        PLUSPLUS        325
-#define        MINUSMINUS      326
-#define        HYPERUNARY      327
-#define        PAREN_STAR_PAREN        328
-#define        POINTSAT        329
-#define        TRY     330
-#define        CATCH   331
-#define        TYPENAME_ELLIPSIS       332
-#define        PRE_PARSED_FUNCTION_DECL        333
-#define        EXTERN_LANG_STRING      334
-#define        ALL     335
-#define        PRE_PARSED_CLASS_DECL   336
-#define        DEFARG  337
-#define        DEFARG_MARKER   338
-#define        TYPENAME_DEFN   339
-#define        IDENTIFIER_DEFN 340
-#define        PTYPENAME_DEFN  341
-#define        END_OF_LINE     342
-#define        END_OF_SAVED_INPUT      343
+#define        PFUNCNAME       261
+#define        SCSPEC  262
+#define        TYPESPEC        263
+#define        CV_QUALIFIER    264
+#define        CONSTANT        265
+#define        STRING  266
+#define        ELLIPSIS        267
+#define        SIZEOF  268
+#define        ENUM    269
+#define        IF      270
+#define        ELSE    271
+#define        WHILE   272
+#define        DO      273
+#define        FOR     274
+#define        SWITCH  275
+#define        CASE    276
+#define        DEFAULT 277
+#define        BREAK   278
+#define        CONTINUE        279
+#define        RETURN  280
+#define        GOTO    281
+#define        ASM_KEYWORD     282
+#define        GCC_ASM_KEYWORD 283
+#define        TYPEOF  284
+#define        ALIGNOF 285
+#define        SIGOF   286
+#define        ATTRIBUTE       287
+#define        EXTENSION       288
+#define        LABEL   289
+#define        REALPART        290
+#define        IMAGPART        291
+#define        AGGR    292
+#define        VISSPEC 293
+#define        DELETE  294
+#define        NEW     295
+#define        THIS    296
+#define        OPERATOR        297
+#define        CXX_TRUE        298
+#define        CXX_FALSE       299
+#define        NAMESPACE       300
+#define        TYPENAME_KEYWORD        301
+#define        USING   302
+#define        LEFT_RIGHT      303
+#define        TEMPLATE        304
+#define        TYPEID  305
+#define        DYNAMIC_CAST    306
+#define        STATIC_CAST     307
+#define        REINTERPRET_CAST        308
+#define        CONST_CAST      309
+#define        SCOPE   310
+#define        EMPTY   311
+#define        PTYPENAME       312
+#define        NSNAME  313
+#define        THROW   314
+#define        ASSIGN  315
+#define        OROR    316
+#define        ANDAND  317
+#define        MIN_MAX 318
+#define        EQCOMPARE       319
+#define        ARITHCOMPARE    320
+#define        LSHIFT  321
+#define        RSHIFT  322
+#define        POINTSAT_STAR   323
+#define        DOT_STAR        324
+#define        UNARY   325
+#define        PLUSPLUS        326
+#define        MINUSMINUS      327
+#define        HYPERUNARY      328
+#define        PAREN_STAR_PAREN        329
+#define        POINTSAT        330
+#define        TRY     331
+#define        CATCH   332
+#define        TYPENAME_ELLIPSIS       333
+#define        PRE_PARSED_FUNCTION_DECL        334
+#define        EXTERN_LANG_STRING      335
+#define        ALL     336
+#define        PRE_PARSED_CLASS_DECL   337
+#define        DEFARG  338
+#define        DEFARG_MARKER   339
+#define        TYPENAME_DEFN   340
+#define        IDENTIFIER_DEFN 341
+#define        PTYPENAME_DEFN  342
+#define        END_OF_LINE     343
+#define        END_OF_SAVED_INPUT      344
 
 
 extern YYSTYPE yylval;
index e11e1f10493db0bf12d0679f7fa5be57e45e9c2d..97c5be780113305762b9a2f5c265bb5a62ef1422 100644 (file)
@@ -110,6 +110,9 @@ empty_parms ()
 %token TYPENAME
 %token SELFNAME
 
+/* A template function.  */
+%token <ttype> PFUNCNAME
+
 /* Reserved words that specify storage class.
    yylval contains an IDENTIFIER_NODE which indicates which one.  */
 %token SCSPEC
@@ -162,7 +165,7 @@ empty_parms ()
 %nonassoc IF
 %nonassoc ELSE
 
-%left IDENTIFIER TYPENAME SELFNAME PTYPENAME SCSPEC TYPESPEC CV_QUALIFIER ENUM AGGR ELLIPSIS TYPEOF SIGOF OPERATOR NSNAME TYPENAME_KEYWORD
+%left IDENTIFIER PFUNCNAME TYPENAME SELFNAME PTYPENAME SCSPEC TYPESPEC CV_QUALIFIER ENUM AGGR ELLIPSIS TYPEOF SIGOF OPERATOR NSNAME TYPENAME_KEYWORD
 
 %left '{' ',' ';'
 
@@ -193,6 +196,7 @@ empty_parms ()
 %type <code> unop
 
 %type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist
+%type <ttype> PFUNCNAME
 %type <ttype> paren_expr_or_null nontrivial_exprlist SELFNAME
 %type <ttype> expr_no_commas cast_expr unary_expr primary string STRING
 %type <ttype> reserved_declspecs boolean.literal
@@ -224,6 +228,7 @@ empty_parms ()
 %type <ttype> fcast_or_absdcl regcast_or_absdcl
 %type <ttype> expr_or_declarator complex_notype_declarator
 %type <ttype> notype_unqualified_id unqualified_id qualified_id
+%type <ttype> template_id object_template_id notype_template_declarator
 %type <ttype> overqualified_id notype_qualified_id any_id
 %type <ttype> complex_direct_notype_declarator functional_cast
 %type <ttype> complex_parmlist parms_comma
@@ -431,7 +436,8 @@ template_header:
          template_parm_list '>'
                { $$ = end_template_parm_list ($4); }
        | TEMPLATE '<' '>'
-               { $$ = NULL_TREE; }
+                { begin_specialization(); 
+                 $$ = NULL_TREE; }
        ;
 
 template_parm_list:
@@ -483,10 +489,20 @@ template_parm:
 template_def:
          template_header
          extdef
-               { end_template_decl (); }
+                { 
+                  if ($1) 
+                    end_template_decl (); 
+                 else
+                   end_specialization ();
+               }
        | template_header
          error  %prec EMPTY
-               { end_template_decl (); }
+               { 
+                  if ($1) 
+                    end_template_decl ();
+                 else
+                   end_specialization (); 
+                }
        ;
 
 datadef:
@@ -701,8 +717,13 @@ fn.def2:
                { $$ = start_method (NULL_TREE, $$); goto rest_of_mdef; }
         | template_header fn.def2 
                 { 
-                 end_template_decl (); 
-                 if ($2 && DECL_TEMPLATE_INFO ($2))
+                  if ($1)
+                    end_template_decl (); 
+                 else
+                   end_specialization ();
+
+                 if ($2 && DECL_TEMPLATE_INFO ($2)
+                     && !DECL_TEMPLATE_SPECIALIZATION ($2))
                    {
                      $$ = DECL_TI_TEMPLATE ($2); 
                      check_member_template ($$);
@@ -1263,12 +1284,35 @@ expr_no_commas:
 notype_unqualified_id:
          '~' see_typename identifier
                { $$ = build_parse_node (BIT_NOT_EXPR, $3); }
+        | template_id
        | operator_name
        | IDENTIFIER
        | PTYPENAME
        | NSNAME  %prec EMPTY
        ;
 
+template_id:
+        PFUNCNAME '<' template_arg_list template_close_bracket 
+                { $$ = lookup_template_function ($1, $3); }
+        | PFUNCNAME '<' template_close_bracket
+                { $$ = lookup_template_function ($1, NULL_TREE); }
+        | operator_name '<' template_arg_list template_close_bracket
+                { $$ = lookup_template_function 
+                   (do_identifier ($1, 1), $3); }
+        | operator_name '<' template_close_bracket
+                { $$ = lookup_template_function 
+                   (do_identifier ($1, 1), NULL_TREE); }
+       ;
+
+object_template_id:
+        TEMPLATE identifier '<' template_arg_list template_close_bracket
+                { $$ = lookup_template_function ($2, $4); }
+        | TEMPLATE PFUNCNAME '<' template_arg_list template_close_bracket
+                { $$ = lookup_template_function (DECL_NAME ($2), $4); }
+        | TEMPLATE operator_name '<' template_arg_list template_close_bracket
+                { $$ = lookup_template_function (DECL_NAME ($2), $4); }
+        ;
+
 unqualified_id:
          notype_unqualified_id
        | TYPENAME
@@ -1285,9 +1329,17 @@ expr_or_declarator:
                { $$ = $2; }
        ;
 
+notype_template_declarator:
+         IDENTIFIER '<' template_arg_list template_close_bracket
+                { $$ = lookup_template_function ($1, $3); }
+       | NSNAME '<' template_arg_list template_close_bracket
+                { $$ = lookup_template_function ($1, $3); }
+       ;
+               
 direct_notype_declarator:
          complex_direct_notype_declarator
        | notype_unqualified_id
+       | notype_template_declarator
        | '(' expr_or_declarator ')'
                { $$ = finish_decl_parsing ($2); }
        ;
@@ -1297,7 +1349,7 @@ primary:
                {
                  if (TREE_CODE ($$) == BIT_NOT_EXPR)
                    $$ = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND ($$, 0));
-                 else
+                 else if (TREE_CODE ($$) != TEMPLATE_ID_EXPR)
                    $$ = do_identifier ($$, 1);
                }               
        | CONSTANT
@@ -1500,6 +1552,20 @@ primary:
                                       NULL_TREE, NULL_TREE);
                  else
                    $$ = build_member_call (OP0 ($$), OP1 ($$), NULL_TREE); }
+        | object object_template_id %prec UNARY
+                { 
+                 $$ = build_x_component_ref ($$, $2, NULL_TREE, 1); 
+               }
+        | object object_template_id '(' nonnull_exprlist ')'
+                {
+                 $$ = build_method_call ($1, $2, $4, 
+                                         NULL_TREE, LOOKUP_NORMAL); 
+                }
+       | object object_template_id LEFT_RIGHT
+                {
+                 $$ = build_method_call ($1, $2, NULL_TREE,
+                                         NULL_TREE, LOOKUP_NORMAL); 
+                }
        | object unqualified_id  %prec UNARY
                { $$ = build_x_component_ref ($$, $2, NULL_TREE, 1); }
        | object overqualified_id  %prec UNARY
@@ -2191,7 +2257,9 @@ structsp:
                { $$.t = $2;
                  $$.new_type_flag = 0; }
        /* C++ extensions, merged with C to avoid shift/reduce conflicts */
-       | class_head left_curly opt.component_decl_list '}' maybe_attribute
+       | class_head left_curly 
+                { reset_specialization(); }
+          opt.component_decl_list '}' maybe_attribute
                {
                  int semi;
                  tree id;
@@ -2214,7 +2282,7 @@ structsp:
                    ;
                  else
                    {
-                     $<ttype>$ = finish_struct ($1, $3, $5, semi);
+                     $<ttype>$ = finish_struct ($1, $4, $6, semi);
                      if (semi) note_got_semicolon ($<ttype>$);
                    }
 
@@ -2233,7 +2301,7 @@ structsp:
                }
          pending_inlines
                { 
-                 $$.t = $<ttype>6;
+                 $$.t = $<ttype>7;
                  $$.new_type_flag = 1; 
                  if (current_class_type == NULL_TREE)
                    clear_inline_text_obstack (); 
@@ -2721,8 +2789,13 @@ component_decl_1:
                { $$ = do_class_using_decl ($1); }
         | template_header component_decl_1 
                 { 
-                 end_template_decl (); 
-                 if ($2 && DECL_TEMPLATE_INFO ($2))
+                  if ($1)
+                   end_template_decl (); 
+                  else
+                    end_specialization ();
+
+                 if ($2 && DECL_TEMPLATE_INFO ($2)
+                     && !DECL_TEMPLATE_SPECIALIZATION ($2))
                    {
                      $$ = DECL_TI_TEMPLATE ($2); 
                      check_member_template ($$);
@@ -3047,18 +3120,33 @@ complex_direct_notype_declarator:
                      TREE_COMPLEXITY ($$) = current_class_depth;
                    }
                }
+        | nested_name_specifier notype_template_declarator
+                { got_scope = NULL_TREE;
+                 $$ = build_parse_node (SCOPE_REF, $1, $2);
+                 if ($1 != current_class_type)
+                   {
+                     push_nested_class ($1, 3);
+                     TREE_COMPLEXITY ($$) = current_class_depth;
+                   }
+               }
        ;
 
 qualified_id:
          nested_name_specifier unqualified_id
                { got_scope = NULL_TREE;
                  $$ = build_parse_node (SCOPE_REF, $$, $2); }
+        | nested_name_specifier object_template_id
+                { got_scope = NULL_TREE;
+                 $$ = build_parse_node (SCOPE_REF, $1, $2); }
        ;
 
 notype_qualified_id:
          nested_name_specifier notype_unqualified_id
                { got_scope = NULL_TREE;
                  $$ = build_parse_node (SCOPE_REF, $$, $2); }
+        | nested_name_specifier object_template_id
+                { got_scope = NULL_TREE;
+                 $$ = build_parse_node (SCOPE_REF, $1, $2); }
        ;
 
 overqualified_id:
index 8df5038b9ab5d20a0bc510d1cfc90d78de806ea3..7ac69c29d078bc60eb37d24befdcf53b198aee50 100644 (file)
@@ -63,6 +63,9 @@ static tree *maybe_template_tail = &maybe_templates;
 
 int minimal_parse_mode;
 
+static int processing_specialization;
+static int template_header_count;
+
 #define obstack_chunk_alloc xmalloc
 #define obstack_chunk_free free
 
@@ -78,6 +81,10 @@ static tree get_class_bindings PROTO((tree, tree, tree));
 static tree coerce_template_parms PROTO((tree, tree, tree));
 static tree tsubst_enum        PROTO((tree, tree, int, tree *));
 static tree add_to_template_args PROTO((tree, tree));
+static int  type_unification_real PROTO((tree, tree *, tree, tree, int*,
+                                        int, int, int));
+static int processing_explicit_specialization PROTO((int));
+static void note_template_header PROTO((int));
 
 /* Restore the template parameter context. */
 
@@ -150,9 +157,10 @@ is_member_template (t)
        certainly not a member template.  */
     return 0;
 
-  if (DECL_FUNCTION_MEMBER_P (t) ||
-      (TREE_CODE (t) == TEMPLATE_DECL && 
-       DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))))
+  if ((DECL_FUNCTION_MEMBER_P (t) 
+       && !DECL_TEMPLATE_SPECIALIZATION (t))
+      || (TREE_CODE (t) == TEMPLATE_DECL && 
+         DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))))
     {
       tree tmpl = NULL_TREE;
 
@@ -246,8 +254,391 @@ begin_template_parm_list ()
   pushlevel (0);
   declare_pseudo_global_level ();
   ++processing_template_decl;
+  note_template_header (0);
+}
+
+
+/* We've just seen template <>. */
+
+void
+begin_specialization ()
+{
+  note_template_header (1);
+}
+
+
+/* Called at then end of processing a declaration preceeded by
+   template<>.  */
+
+void 
+end_specialization ()
+{
+  reset_specialization ();
+}
+
+
+/* Any template <>'s that we have seen thus far are not referring to a
+   function specialization. */
+
+void
+reset_specialization ()
+{
+  processing_specialization = 0;
+  template_header_count = 0;
+}
+
+
+/* We've just seen a template header.  If SPECIALIZATION is non-zero,
+   it was of the form template <>.  */
+
+void 
+note_template_header (specialization)
+     int specialization;
+{
+  processing_specialization = specialization;
+  template_header_count++;
+}
+
+
+/* Returns non-zero iff a declarator, in which the number of template
+   types that appeared was TEMPLATE_COUNT, is an explicit
+   specialization.  */
+
+int
+processing_explicit_specialization(template_count)
+     int template_count;
+{
+  /* A function declaration is an explicit specialization of a member
+     template if all of the following conditions hold:
+     
+     o There was a template <...> preceeding the declaration.
+     o The last template <...> was in fact template <>.
+     o The number of template <...>'s preceeding the declaration, less
+       the number of template classes with arguments specified used to
+       qualify the function name, is 1.
+
+     For example:
+
+     template <> void S<int>::foo(); 
+     template <class T> template <> void S<T>::foo();
+     template <> struct S<int> { ... template <> void foo(); }
+
+     The first of these is not a specialization of S<int>::foo() (it
+     is instead a specialization of S<T>::foo), while the next two are
+     specializations of member template functions.  */
+
+  return processing_specialization 
+    && template_header_count > template_count; 
+}
+
+/* Returns the template function specialized by TEMPLATE_ID, or
+   NULL_TREE if there is none.
+
+   The TEMPLATE_ID is a TEMPLATE_ID_EXPR.  The TYPE is
+   the type it has been declared to have.  Return the TEMPLATE_DECL
+   that is being specialized, and put the specialization arguments in
+   *TARGS.  If no appropriate specialization can be found, NULL_TREE is
+   returned, and *TARGS is assigned NULL_TREE.  If complain is
+   non-zero, error messages are printed where appropriate.  */
+   
+tree
+determine_explicit_specialization (template_id, type, targs_out,
+                                  need_member_template,
+                                  complain)
+     tree template_id;
+     tree type;
+     tree* targs_out;
+     int need_member_template;
+     int complain;
+{
+  int i;
+  int overloaded;
+  tree fns;
+  tree matching_fns = NULL_TREE;
+  tree name = NULL_TREE;
+  tree result;
+  tree fn;
+
+  my_friendly_assert (TREE_CODE (template_id) == TEMPLATE_ID_EXPR,
+                     0); 
+                     
+  fns = TREE_OPERAND (template_id, 0);
+
+  overloaded = fns != NULL_TREE && really_overloaded_fn (fns);
+
+  for (fn = (fns != NULL_TREE) ? get_first_fn (fns) : NULL_TREE; 
+       fn != NULL_TREE; 
+       fn = overloaded ? DECL_CHAIN (fn) : NULL_TREE)
+    {
+      int dummy;
+      tree targs;
+
+      if (name == NULL_TREE)
+       name = DECL_NAME (fn);
+
+      if (TREE_CODE (fn) != TEMPLATE_DECL
+         || (need_member_template && !is_member_template (fn)))
+       continue;
+
+      if (list_length (TREE_OPERAND (template_id, 1)) > DECL_NTPARMS (fn))
+       continue;
+
+      targs = make_tree_vec (DECL_NTPARMS (fn));
+
+      /* We allow incomplete unification here, because we are going to
+        check all the functions. */
+      i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (fn),
+                           &TREE_VEC_ELT (targs, 0),
+                           type 
+                           ? TYPE_ARG_TYPES (TREE_TYPE (fn)) : NULL_TREE, 
+                           type ? TYPE_ARG_TYPES (type) : NULL_TREE,
+                           TREE_OPERAND (template_id, 1),
+                           &dummy, 1, 1);
+      
+      if (i == 0) 
+       {
+         /* Unification was successful.  See if the return types
+            match. */
+         if (type != NULL_TREE)
+           {
+             tree tmpl_return_type = tsubst (TREE_TYPE (TREE_TYPE (fn)),
+                                             targs,
+                                             DECL_NTPARMS (fn),
+                                             NULL_TREE);
+             
+             if (tmpl_return_type != TREE_TYPE (type))
+               {
+                 /* Always complain about this.  With ambiguity, some
+                    other context, might resolve things.  But, a
+                    non-matching return type will always be a
+                    problem.  */
+                 cp_error ("Return type of explicit specialization of");
+                 cp_error ("`%D' is `%T', but should be `%T'.", 
+                           fn, TREE_TYPE (type), tmpl_return_type);
+                 *targs_out = NULL_TREE;
+                 return NULL_TREE;
+               }
+           }
+
+         matching_fns = tree_cons (fn, targs, matching_fns);
+       }
+    }
+
+  if (matching_fns == NULL_TREE)
+    {
+      if (complain)
+       cp_error ("Specialization of `%s' does not match any template "
+                 "declaration.", IDENTIFIER_POINTER (name));
+      *targs_out = NULL_TREE;
+      return NULL_TREE;
+    }
+
+  if (TREE_CHAIN (matching_fns) != NULL_TREE) 
+    {
+      if (complain)
+       {
+         tree fn;
+         
+         cp_error ("Ambiguous explicit specialization.  Candidates are:");
+         for (fn = matching_fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
+           cp_error ("    %D", TREE_PURPOSE (fn));
+       }
+
+      *targs_out = NULL_TREE;
+      return NULL_TREE;
+    }
+
+  /* We have one, and exactly one, match. */
+  *targs_out = TREE_VALUE (matching_fns);
+  return TREE_PURPOSE (matching_fns);
 }
 
+       
+/* Check to see if the function just declared, as indicated in
+   DECLARATOR, and in DECL, is a specialization.  Check that the
+   specialization is OK.  If FLAGS == 1, we are being called by
+   finish_struct_methods.  If FLAGS == 2, we are being called by
+   grokfndecl, and the function has a definition, or is a friend.  If
+   FLAGS == 3, this is a friend declaration.
+   Returns 0 if the decl is not an explicit specialization or
+   instantiation, 1 if it is an explicit specialization, and 2 if it
+   is an explicit instantiation.  */
+
+int
+check_explicit_specialization(declarator, decl, template_count,
+                             flags)
+     tree declarator;
+     tree decl;
+     int template_count;
+     int flags;
+{
+  int finish_member = flags == 1;
+  int have_def = flags == 2;
+  int is_friend = flags == 3;
+
+  if (processing_explicit_specialization (template_count)
+      || finish_member
+      || TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
+    {
+      tree tmpl = NULL_TREE;
+      tree dname = DECL_NAME (decl);
+      tree ctype = DECL_CLASS_CONTEXT (decl);
+      tree targs;
+
+      /* We've come across a declarator that looks like: U f<T1,
+        T2, ...>(A1, A2, ..).  This is an explicit template
+        specialization.  Check that: 
+              
+        o The explicitly specified parameters together with those
+        that can be deduced by template argument deduction
+        uniquely determine a particular specialization.  
+              
+        See [temp.expl.spec].  */
+
+      if (!finish_member
+         && TREE_CODE (declarator) == TEMPLATE_ID_EXPR
+         && !processing_explicit_specialization (template_count)
+         && !is_friend)
+       {
+         if (!have_def)
+           /* This is not an explicit specialization.  It must be
+              an explicit instantiation.  */
+           return 2;
+         else if (pedantic)
+           pedwarn ("Explicit specialization not preceeded by "
+                    "`template <>'");
+       }
+
+      if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
+       {
+         tree fns;
+
+         my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE, 
+                             0);
+         if (!ctype)
+           fns = IDENTIFIER_GLOBAL_VALUE (dname);
+         else
+           fns = dname;
+
+         declarator = lookup_template_function (fns, NULL_TREE);
+       }
+
+      if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR) 
+       {
+         /* A friend declaration.  We can't do much, because we don't
+          know what this resolves to, yet.  */
+         my_friendly_assert (is_friend != 0, 0);
+         SET_DECL_IMPLICIT_INSTANTIATION (decl);
+         return 1;
+       } 
+
+      if (ctype 
+         && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE)
+       {
+         tree fns;
+         if (TYPE_BEING_DEFINED (ctype) && !finish_member)
+           {
+             /* Since finish_struct_1 has not been called yet, we
+                can't call lookup_fnfields.  We note that this
+                template is a specialization, and proceed, letting
+                finish_struct_methods fix this up later.  */
+             SET_DECL_TEMPLATE_SPECIALIZATION (decl);
+             DECL_TEMPLATE_INFO (decl) 
+               = perm_tree_cons (NULL_TREE, 
+                                 TREE_OPERAND (declarator, 1),
+                                 NULL_TREE);
+             return 1;
+           }
+
+         fns = lookup_fnfields (TYPE_BINFO (ctype), 
+                                TREE_OPERAND (declarator, 0),
+                                1);
+         
+         if (fns == NULL_TREE) 
+           {
+             cp_error ("No member template `%s' declared in `%T'",
+                       IDENTIFIER_POINTER (TREE_OPERAND (declarator,
+                                                         0)),
+                       ctype);
+             return 1;
+           }
+         else
+           TREE_OPERAND (declarator, 0) = fns;
+       }
+
+      tmpl = 
+       determine_explicit_specialization 
+       (declarator, TREE_TYPE (decl), &targs, 
+        TREE_CODE (decl) == TEMPLATE_DECL, 1);
+           
+      if (tmpl)
+       {
+         /* Mangle the function name appropriately.  */
+         if (name_mangling_version >= 1)
+           {
+             tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (tmpl));
+
+             if (ctype 
+                 && TREE_CODE (TREE_TYPE (tmpl)) == FUNCTION_TYPE)
+               arg_types = 
+                 hash_tree_chain (build_pointer_type (ctype),
+                                  arg_types);
+
+             DECL_ASSEMBLER_NAME (decl) 
+               = build_template_decl_overload 
+               (DECL_NAME (decl), 
+                arg_types,
+                TREE_TYPE (TREE_TYPE (tmpl)),
+                DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
+                targs, ctype != NULL_TREE);
+           }
+
+         if (is_friend && !have_def)
+           {
+             /* This is not really a declaration of a specialization.
+                It's just the name of an instantiation.  But, it's not
+                a request for an instantiation, either.  */
+             SET_DECL_IMPLICIT_INSTANTIATION (decl);
+             DECL_TEMPLATE_INFO (decl) 
+               = perm_tree_cons (tmpl, targs, NULL_TREE);
+             return 1;
+           }
+
+         /* This function declaration is a template specialization.
+            Record that fact.  */
+         SET_DECL_TEMPLATE_SPECIALIZATION (decl);
+         DECL_TEMPLATE_SPECIALIZATIONS (tmpl) 
+           = perm_tree_cons (targs, decl, 
+                             DECL_TEMPLATE_SPECIALIZATIONS
+                             (tmpl));
+         /* If DECL_TI_TEMPLATE (decl), the decl is an
+            instantiation of a specialization of a member template.
+            (In other words, there was a member template, in a
+            class template.  That member template was specialized.
+            We then instantiated the class, so there is now an
+            instance of that specialization.)  
+
+            According to the CD2,
+
+            14.7.3.13 [tmpl.expl.spec]
+              
+            A specialization  of  a member function template or
+            member class template of a non-specialized class
+            template is itself a template.             
+
+            So, we just leave the template info alone in this case.
+            */
+         if (!(DECL_TEMPLATE_INFO (decl) && DECL_TI_TEMPLATE (decl)))
+           DECL_TEMPLATE_INFO (decl)
+             = perm_tree_cons (tmpl, targs, NULL_TREE);
+         return 1;
+       }
+    }
+
+  return 0;
+}
+                          
 /* Process information from new template parameter NEXT and append it to the
    LIST being built.  */
 
@@ -358,6 +749,8 @@ end_template_parm_list (parms)
 void
 end_template_decl ()
 {
+  reset_specialization ();
+
   if (! processing_template_decl)
     return;
 
@@ -465,6 +858,15 @@ push_template_decl (decl)
          DECL_CLASS_CONTEXT (tmpl) = DECL_CLASS_CONTEXT (decl);
          DECL_STATIC_FUNCTION_P (tmpl) = 
            DECL_STATIC_FUNCTION_P (decl);
+
+         if (DECL_TEMPLATE_SPECIALIZATION (decl))
+           {
+             /* A specialization of a member template of a template
+                class. */
+             SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
+             DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
+             DECL_TEMPLATE_INFO (decl) = NULL_TREE;
+           }
        }
     }
   else
@@ -749,6 +1151,9 @@ comp_template_args (oldargs, newargs)
 {
   int i;
 
+  if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
+    return 0;
+
   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
     {
       tree nt = TREE_VEC_ELT (newargs, i);
@@ -895,6 +1300,35 @@ add_pending_template (d)
   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
 }
 
+
+/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which
+   may be either a _DECL or an overloaded function or an
+   IDENTIFIER_NODE), and ARGLIST.  */
+
+tree
+lookup_template_function (fns, arglist)
+     tree fns, arglist;
+{
+  if (fns == NULL_TREE)
+    {
+      cp_error ("non-template used as template");
+      return error_mark_node;
+    }
+
+  if (arglist != NULL_TREE && !TREE_PERMANENT (arglist))
+    {
+      push_obstacks (&permanent_obstack, &permanent_obstack);
+      arglist = copy_list (arglist);
+      pop_obstacks ();
+    }
+
+  return build_min (TEMPLATE_ID_EXPR,
+                   TREE_TYPE (fns) 
+                   ? TREE_TYPE (fns) : unknown_type_node, 
+                   fns, arglist);  
+}
+
+
 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
    parameters, find the desired type.
 
@@ -1028,7 +1462,7 @@ lookup_template_class (d1, arglist, in_decl)
 
       /* We need to set this again after CLASSTYPE_TEMPLATE_INFO is set up.  */
       DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) = id;
-      if (! uses_template_parms (arglist))
+      /* if (! uses_template_parms (arglist)) */
        DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) 
          = get_identifier (build_overload_name (t, 1, 1));
 
@@ -1746,6 +2180,7 @@ tsubst (t, args, nargs, in_decl)
        tree decl = DECL_TEMPLATE_RESULT (t);
        tree new_decl;
        tree parms;
+       tree spec;
        int i;
 
        /* We might already have an instance of this template. */
@@ -1788,13 +2223,15 @@ tsubst (t, args, nargs, in_decl)
        DECL_TEMPLATE_INSTANTIATIONS (t)
          = perm_tree_cons (NULL_TREE, tmpl,
                            DECL_TEMPLATE_INSTANTIATIONS (t));
+
+       DECL_TEMPLATE_SPECIALIZATIONS (tmpl) = NULL_TREE;
        return tmpl;
       }
 
     case FUNCTION_DECL:
       {
        tree r = NULL_TREE;
-       tree arg_types, ctx;
+       tree ctx;
 
        int member;
 
@@ -1857,12 +2294,6 @@ tsubst (t, args, nargs, in_decl)
            DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
          }
 
-       arg_types = TYPE_VALUES (type);
-
-       if (member && TREE_CODE (type) == FUNCTION_TYPE)
-         arg_types = hash_tree_chain
-           (build_pointer_type (DECL_CONTEXT (r)), arg_types);
-
        if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (t)))
          {
            char *buf, *dbuf = build_overload_name (ctx, 1, 1);
@@ -1874,9 +2305,72 @@ tsubst (t, args, nargs, in_decl)
            strcat (buf, dbuf);
            DECL_ASSEMBLER_NAME (r) = get_identifier (buf);
          }
-       else
-         DECL_ASSEMBLER_NAME (r)
-           = build_decl_overload (DECL_NAME (r), arg_types, member);
+       else 
+         {
+           /* Instantiations of template functions must be mangled
+              specially, in order to conform to 14.5.5.1
+              [temp.over.link].  We use in_decl below rather than
+              DECL_TI_TEMPLATE (r) because the latter is set to
+              NULL_TREE in instantiate_decl.  */
+           tree tmpl;
+           tree arg_types;
+
+           if (DECL_TEMPLATE_INFO (r))
+             tmpl = DECL_TI_TEMPLATE (r);
+           else
+             tmpl = in_decl;
+
+           /* tmpl will be NULL if this is a specialization of a
+              member template of a template class.  */
+           if (name_mangling_version < 1
+               || tmpl == NULL_TREE
+               || (member && !is_member_template (tmpl)
+                   && !DECL_TEMPLATE_INFO (tmpl)))
+             {
+               arg_types = TYPE_ARG_TYPES (type);
+               if (member && TREE_CODE (type) == FUNCTION_TYPE)
+                 arg_types = hash_tree_chain 
+                   (build_pointer_type (DECL_CONTEXT (r)),
+                    arg_types); 
+               
+               DECL_ASSEMBLER_NAME (r) 
+                 = build_decl_overload (DECL_NAME (r), arg_types,
+                                        member);
+             }
+           else
+             {
+               /* We pass the outermost template parameters to
+                  build_template_decl_overload since the innermost
+                  template parameters are still just template
+                  parameters; there are no corresponding subsitution
+                  arguments.  */
+               tree tparms = DECL_TEMPLATE_PARMS (tmpl);
+
+               while (tparms && TREE_CHAIN (tparms) != NULL_TREE)
+                 tparms = TREE_CHAIN (tparms);
+
+               my_friendly_assert (tparms != NULL_TREE
+                                   && TREE_CODE (tparms) == TREE_LIST,
+                                   0);
+               tparms = TREE_VALUE (tparms);
+
+               arg_types = TYPE_ARG_TYPES (TREE_TYPE (tmpl));
+               if (member && TREE_CODE (type) == FUNCTION_TYPE)
+                 arg_types = hash_tree_chain 
+                   (build_pointer_type (DECL_CONTEXT (r)),
+                    arg_types); 
+
+               DECL_ASSEMBLER_NAME (r)
+                 = build_template_decl_overload 
+                 (DECL_NAME (r), arg_types, 
+                  TREE_TYPE (TREE_TYPE (tmpl)),
+                  tparms,
+                  TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC 
+                  ? TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 1) :
+                  args, 
+                  member);
+             }
+         }
        DECL_RTL (r) = 0;
        make_decl_rtl (r, NULL_PTR, 1);
 
@@ -2531,6 +3025,14 @@ tsubst_copy (t, args, nargs, in_decl)
        return r;
       }
 
+    case TEMPLATE_ID_EXPR:
+      {
+       tree r = lookup_template_function
+         (tsubst_copy (TREE_OPERAND (t, 0), args, nargs, in_decl),
+          tsubst_copy (TREE_OPERAND (t, 1), args, nargs, in_decl));
+       return r;
+      }
+
     case TREE_LIST:
       {
        tree purpose, value, chain;
@@ -2897,11 +3399,25 @@ instantiate_template (tmpl, targ_ptr)
   struct obstack *old_fmp_obstack;
   extern struct obstack *function_maybepermanent_obstack;
 
+  my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
+
+  if (DECL_FUNCTION_TEMPLATE_P (tmpl))
+    {
+      tree specs;
+      
+      /* Check to see if there is a matching specialization. */
+      for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
+          specs != NULL_TREE;
+          specs = TREE_CHAIN (specs))
+       if (comp_template_args (TREE_PURPOSE(specs),
+                               targ_ptr))
+         return TREE_VALUE (specs);
+    }
+
   push_obstacks (&permanent_obstack, &permanent_obstack);
   old_fmp_obstack = function_maybepermanent_obstack;
   function_maybepermanent_obstack = &permanent_obstack;
 
-  my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
   len = DECL_NTPARMS (tmpl);
 
   i = len;
@@ -2960,8 +3476,8 @@ overload_template_name (type)
    operators.  */
 
 int
-fn_type_unification (fn, targs, args, return_type, strict)
-     tree fn, targs, args, return_type;
+fn_type_unification (fn, explicit_targs, targs, args, return_type, strict)
+     tree fn, explicit_targs, targs, args, return_type;
      int strict;
 {
   int i, dummy = 0;
@@ -2986,7 +3502,8 @@ fn_type_unification (fn, targs, args, return_type, strict)
                        &TREE_VEC_ELT (targs, 0), 
                        fn_arg_types,
                        decl_arg_types,
-                       &dummy, 0, strict);
+                       explicit_targs,
+                       &dummy, strict, 0);
 
   return i;
 }
@@ -3016,25 +3533,54 @@ fn_type_unification (fn, targs, args, return_type, strict)
    addresses, explicit instantiation, and more_specialized).  */
 
 int
-type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
+type_unification (tparms, targs, parms, args, targs_in, nsubsts,
+                 strict, allow_incomplete)
+     tree tparms, *targs, parms, args, targs_in;
+     int *nsubsts, strict, allow_incomplete;
+{
+  int ntparms = TREE_VEC_LENGTH (tparms);
+  tree t;
+  int i;
+  int r;
+
+  bzero ((char *) targs, sizeof (tree) * ntparms);
+
+  /* Insert any explicit template arguments.  They are encoded as the
+     operands of NOP_EXPRs so that unify can tell that they are
+     explicit arguments.  */
+  for (i = 0, t = targs_in; t != NULL_TREE; t = TREE_CHAIN (t), ++i)
+    targs[i] = build1 (NOP_EXPR, NULL_TREE, TREE_VALUE (t));
+
+  r = type_unification_real (tparms, targs, parms, args, nsubsts, 0,
+                            strict, allow_incomplete); 
+
+  for (i = 0, t = targs_in; t != NULL_TREE; t = TREE_CHAIN (t), ++i)
+    if (TREE_CODE (targs[i]) == NOP_EXPR)
+      targs[i] = TREE_OPERAND (targs[i], 0);
+
+  return r;
+}
+
+
+int
+type_unification_real (tparms, targs, parms, args, nsubsts, subr,
+                      strict, allow_incomplete)
      tree tparms, *targs, parms, args;
-     int *nsubsts, subr, strict;
+     int *nsubsts, subr, strict, allow_incomplete;
 {
   tree parm, arg;
   int i;
   int ntparms = TREE_VEC_LENGTH (tparms);
 
   my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
-  my_friendly_assert (TREE_CODE (parms) == TREE_LIST, 290);
+  my_friendly_assert (parms == NULL_TREE 
+                     || TREE_CODE (parms) == TREE_LIST, 290);
   /* ARGS could be NULL (via a call from parse.y to
      build_x_function_call).  */
   if (args)
     my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
   my_friendly_assert (ntparms > 0, 292);
 
-  if (!subr)
-    bzero ((char *) targs, sizeof (tree) * ntparms);
-
   while (parms
         && parms != void_list_node
         && args
@@ -3107,10 +3653,12 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
              ntparms = DECL_NTPARMS (arg);
              targs = (tree *) alloca (sizeof (tree) * ntparms);
              parm = tree_cons (NULL_TREE, parm, NULL_TREE);
-             return type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg), 
-                                      targs,
-                                      TYPE_ARG_TYPES (TREE_TYPE (arg)),
-                                      parm, &nsubsts, 0, strict);
+             return 
+               type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg), 
+                                 targs,
+                                 TYPE_ARG_TYPES (TREE_TYPE (arg)),
+                                 parm, NULL_TREE, &nsubsts, strict,
+                                 allow_incomplete); 
            }
          arg = TREE_TYPE (arg);
        }
@@ -3150,7 +3698,8 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict)
     for (i = 0; i < ntparms; i++)
       if (!targs[i])
        {
-         error ("incomplete type unification");
+         if (!allow_incomplete)
+           error ("incomplete type unification");
          return 2;
        }
   return 0;
@@ -3190,6 +3739,17 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
     case TEMPLATE_TYPE_PARM:
       (*nsubsts)++;
       idx = TEMPLATE_TYPE_IDX (parm);
+      /* Check for mixed types and values.  */
+      if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TYPE_DECL)
+       return 1;
+
+      if (!strict && targs[idx] != NULL_TREE && 
+         TREE_CODE (targs[idx]) == NOP_EXPR)
+       /* An explicit template argument.  Don't even try to match
+          here; the overload resolution code will manage check to
+          see whether the call is legal.  */ 
+       return 0;
+
       if (strict && (TYPE_READONLY (arg) < TYPE_READONLY (parm)
                     || TYPE_VOLATILE (arg) < TYPE_VOLATILE (parm)))
        return 1;
@@ -3209,13 +3769,13 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
       }
 #endif
       /* Simple cases: Value already set, does match or doesn't.  */
-      if (targs[idx] == arg)
+      if (targs[idx] == arg 
+         || (targs[idx] 
+             && TREE_CODE (targs[idx]) == NOP_EXPR 
+             && TREE_OPERAND (targs[idx], 0) == arg))
        return 0;
       else if (targs[idx])
        return 1;
-      /* Check for mixed types and values.  */
-      if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TYPE_DECL)
-       return 1;
       targs[idx] = arg;
       return 0;
     case TEMPLATE_CONST_PARM:
@@ -3363,8 +3923,9 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict)
       if (unify (tparms, targs, ntparms, TREE_TYPE (parm),
                 TREE_TYPE (arg), nsubsts, strict))
        return 1;
-      return type_unification (tparms, targs, TYPE_ARG_TYPES (parm),
-                              TYPE_ARG_TYPES (arg), nsubsts, 1, strict);
+      return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
+                                   TYPE_ARG_TYPES (arg), nsubsts, 1, 
+                                   strict, 0);
 
     case OFFSET_TYPE:
       if (TREE_CODE (arg) != OFFSET_TYPE)
@@ -3470,7 +4031,7 @@ get_bindings (fn, decl)
   tree targs = make_tree_vec (ntparms);
   int i;
 
-  i = fn_type_unification (fn, targs, 
+  i = fn_type_unification (fn, NULL_TREE, targs, 
                           TYPE_ARG_TYPES (TREE_TYPE (decl)), 
                           TREE_TYPE (TREE_TYPE (decl)),
                           1);
@@ -3872,6 +4433,18 @@ instantiate_decl (d)
   if (d_defined)
     return d;
 
+  if (TREE_CODE (d) == FUNCTION_DECL) 
+    {
+      tree specs;
+
+      /* Check to see if there is a matching specialization. */
+      for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
+          specs != NULL_TREE;
+          specs = TREE_CHAIN (specs))
+       if (comp_template_args (TREE_PURPOSE (specs), args))
+         return TREE_VALUE (specs);
+    }
+
   /* This needs to happen before any tsubsting.  */
   if (! push_tinst_level (d))
     return d;
@@ -3950,9 +4523,16 @@ instantiate_decl (d)
       popclass (1);
     }
 
-  /* Convince duplicate_decls to use the DECL_ARGUMENTS from the new decl.  */
   if (TREE_CODE (d) == FUNCTION_DECL)
-    DECL_INITIAL (td) = error_mark_node;
+    {
+      /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
+        new decl.  */ 
+      DECL_INITIAL (td) = error_mark_node;
+
+      if (DECL_TEMPLATE_SPECIALIZATION (td) && !DECL_TEMPLATE_INFO (td))
+       /* Set up the information about what is being specialized. */
+       DECL_TEMPLATE_INFO (td) = DECL_TEMPLATE_INFO (d);
+    }
   duplicate_decls (td, d);
   if (TREE_CODE (d) == FUNCTION_DECL)
     DECL_INITIAL (td) = 0;
index c82f1ecf55d9d600e14b6473714c3f5b3bb824ea..b8280a27fa19abf7136961280e2265710136397f 100644 (file)
@@ -316,6 +316,7 @@ yylex ()
              if (got_scope)
                tmp_token.yylval.ttype = trrr;
              break;
+           case PFUNCNAME:
            case IDENTIFIER:
              lastiddecl = trrr;
              break;
@@ -377,6 +378,10 @@ yylex ()
   if (spew_debug)
     debug_yychar (yychar);
 #endif
+
+  if (yychar == PFUNCNAME)
+    yylval.ttype = do_identifier (yylval.ttype, 1);
+
   return yychar;
 }
 
index bf542af547ff2047eef11e354262e2c535c85674..c45745939966ec2e93e85b393f0428af9d96363e 100644 (file)
@@ -1262,6 +1262,9 @@ is_overloaded_fn (x)
   if (TREE_CODE (x) == FUNCTION_DECL)
     return 1;
 
+  if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
+    return 1;
+
   if (TREE_CODE (x) == TREE_LIST
       && (TREE_CODE (TREE_VALUE (x)) == FUNCTION_DECL
          || TREE_CODE (TREE_VALUE (x)) == TEMPLATE_DECL))
@@ -1274,9 +1277,12 @@ int
 really_overloaded_fn (x)
      tree x;
 {     
+  if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
+    return 1;
+
   if (TREE_CODE (x) == TREE_LIST
       && (TREE_CODE (TREE_VALUE (x)) == FUNCTION_DECL
-         || TREE_CODE (TREE_VALUE (x)) == TEMPLATE_DECL))
+         || DECL_FUNCTION_TEMPLATE_P (TREE_VALUE (x))))
     return 1;
 
   return 0;
@@ -1286,7 +1292,8 @@ tree
 get_first_fn (from)
      tree from;
 {
-  if (TREE_CODE (from) == FUNCTION_DECL)
+  if (TREE_CODE (from) == FUNCTION_DECL 
+      || DECL_FUNCTION_TEMPLATE_P (from))
     return from;
 
   my_friendly_assert (TREE_CODE (from) == TREE_LIST, 9);
index ecac505dc8b27b084f49e60169fe2004b9d174e3..2e4f6e2f676a847ff6c267fc32409d07a57f4eb3 100644 (file)
@@ -2375,7 +2375,7 @@ build_x_function_call (function, params, decl)
       return build_method_call (decl, function, params,
                                NULL_TREE, LOOKUP_NORMAL);
     }
-  else if (TREE_CODE (function) == TREE_LIST)
+  else if (really_overloaded_fn (function))
     {
       if (TREE_VALUE (function) == NULL_TREE)
        {
@@ -2643,7 +2643,8 @@ build_function_call_real (function, params, require_complete, flags)
 
   if (!((TREE_CODE (fntype) == POINTER_TYPE
         && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE)
-       || is_method))
+       || is_method
+       || TREE_CODE (function) == TEMPLATE_ID_EXPR))
     {
       cp_error ("`%E' cannot be used as a function", function);
       return error_mark_node;
@@ -4026,6 +4027,7 @@ build_x_unary_op (code, xarg)
   /* & rec, on incomplete RECORD_TYPEs is the simple opr &, not an
      error message.  */
   if (code == ADDR_EXPR
+      && TREE_CODE (xarg) != TEMPLATE_ID_EXPR
       && ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (xarg)))
           && TYPE_SIZE (TREE_TYPE (xarg)) == NULL_TREE)
          || (TREE_CODE (xarg) == OFFSET_REF)))
@@ -4420,6 +4422,27 @@ build_unary_op (code, xarg, noconvert)
                                   0);
          return build1 (ADDR_EXPR, unknown_type_node, arg);
        }
+      else if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
+       {
+         tree targs;
+         tree fn;
+         
+         /* We don't require a match here; it's possible that the
+            context (like a cast to a particular type) will resolve
+            the particular choice of template.  */
+         fn = determine_explicit_specialization (arg, NULL_TREE,
+                                                 &targs,
+                                                 0, 0);
+
+         if (fn)
+           {
+             fn = instantiate_template (fn, targs);
+             mark_addressable (fn);
+             return build_unary_op (ADDR_EXPR, fn, 0);
+           }
+
+         return build1 (ADDR_EXPR, unknown_type_node, arg);
+       }
 
       /* Handle complex lvalues (when permitted)
         by reduction to simpler cases.  */
@@ -4757,6 +4780,8 @@ mark_addressable (exp)
            if (x == current_function_decl)
              DECL_EXTERNAL (x) = 0;
          }
+       if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x))
+         mark_used (x);
        TREE_ADDRESSABLE (x) = 1;
        TREE_USED (x) = 1;
        TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;