[WIDL]
authorAleksey Bragin <aleksey@reactos.org>
Sun, 19 Dec 2010 20:47:16 +0000 (20:47 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Sun, 19 Dec 2010 20:47:16 +0000 (20:47 +0000)
- Update to Wine-1.3.9.
- Important note: Syntax of widl invocation changed slightly, so take this into account when merging to cmake branch.

svn path=/trunk/; revision=50063

22 files changed:
reactos/include/psdk/rpcndr.h
reactos/tools/rbuild/backend/mingw/rules.mak
reactos/tools/widl/client.c
reactos/tools/widl/header.c
reactos/tools/widl/header.h
reactos/tools/widl/parser.l
reactos/tools/widl/parser.tab.c
reactos/tools/widl/parser.tab.h
reactos/tools/widl/parser.y
reactos/tools/widl/parser.yy.c
reactos/tools/widl/proxy.c
reactos/tools/widl/register.c [new file with mode: 0644]
reactos/tools/widl/server.c
reactos/tools/widl/typegen.c
reactos/tools/widl/typegen.h
reactos/tools/widl/utils.c
reactos/tools/widl/utils.h
reactos/tools/widl/widl.c
reactos/tools/widl/widl.h
reactos/tools/widl/widl.rbuild
reactos/tools/widl/widltypes.h
reactos/tools/widl/write_msft.c

index 0164200..dd3a532 100644 (file)
  */
 
 #ifndef __RPCNDR_H_VERSION__
-/* FIXME: What version?   Perhaps something is better than nothing, however incorrect */
-#define __RPCNDR_H_VERSION__ ( 399 )
+#define __RPCNDR_H_VERSION__ ( 500 )
 #endif
 
 #ifndef __WINE_RPCNDR_H
 #define __WINE_RPCNDR_H
 
+#include <basetsd.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#include <basetsd.h>
-
 #ifdef _MSC_VER
 #pragma warning(push)
 #pragma warning(disable:4201)
 #pragma warning(disable:4255)
 #pragma warning(disable:4820)
 #endif
-
 #undef CONST_VTBL
 #ifdef CONST_VTABLE
 # define CONST_VTBL const
@@ -118,6 +116,9 @@ typedef unsigned char boolean;
 #define midl_user_free MIDL_user_free
 #define midl_user_allocate MIDL_user_allocate
 
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
 #define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)
 #define NdrFcLong(s)  (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \
   (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)
index 9990a02..c1eb636 100644 (file)
@@ -251,7 +251,7 @@ $(2): $${$(1)_precondition}
 
 ${call RBUILD_intermediate_path_noext,$(2)}.h: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
        $$(ECHO_WIDL)
-       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H $$@ $$<
+       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -o $$@ $$<
 
 endef
 
@@ -310,7 +310,7 @@ $(2): $${$(1)_precondition}
 
 ${call RBUILD_intermediate_path_noext,$(2)}_i.c: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
        $$(ECHO_WIDL)
-       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -u -U $$@ $$<
+       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -u -o $$@ $$<
 
 ${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_i.c,,,${call RBUILD_intermediate_path_noext,$(2)}_i.o}
 
@@ -322,7 +322,7 @@ define RBUILD_WIDL_DLLDATA_RULE
 
 $(2): $(3) ${$(1)_precondition} $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
        $$(ECHO_WIDL)
-       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4)} --dlldata-only --dlldata=$(2) $(5)
+       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4)} --dlldata-only -$(2) $(5)
 
 ${call RBUILD_CC,$(1),$(2),,,${call RBUILD_intermediate_path_noext,$(2)}.o}
 
@@ -335,7 +335,7 @@ $(2): $${$(1)_precondition}
 
 ${call RBUILD_intermediate_dir,$(2)}$$(SEP)$(1).tlb: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)}
        $$(ECHO_WIDL)
-       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -t -T $$@ $$<
+       $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -t -o $$@ $$<
 
 endef
 
index 569a18b..b5ac0ae 100644 (file)
@@ -76,7 +76,6 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
 {
     const statement_t *stmt;
     const char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
-    const var_t *var;
     int method_count = 0;
 
     if (!implicit_handle)
@@ -297,15 +296,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
         }
 
         /* update proc_offset */
-        if (args)
-        {
-            LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )
-                *proc_offset += get_size_procformatstring_type(var->name, var->type, var->attrs);
-        }
-        if (!is_void(type_function_get_rettype(func->type)))
-            *proc_offset += get_size_procformatstring_type("return value", type_function_get_rettype(func->type), NULL);
-        else
-            *proc_offset += 2; /* FC_END and FC_PAD */
+        *proc_offset += get_size_procformatstring_func( func );
 
         indent--;
         print_client("}\n");
@@ -457,8 +448,6 @@ static void init_client(void)
     print_client( "#define DECLSPEC_HIDDEN\n");
     print_client( "#endif\n");
     print_client( "\n");
-    write_exceptions( client );
-    print_client( "\n");
 }
 
 
@@ -512,6 +501,9 @@ static void write_client_routines(const statement_list_t *stmts)
     unsigned int proc_offset = 0;
     int expr_eval_routines;
 
+    write_exceptions( client );
+    print_client( "\n");
+
     write_formatstringsdecl(client, indent, stmts, need_stub);
     expr_eval_routines = write_expr_eval_routines(client, client_token);
     if (expr_eval_routines)
@@ -539,7 +531,7 @@ void write_client(const statement_list_t *stmts)
 
     if (do_win32 && do_win64)
     {
-        fprintf(client, "\n#ifndef _WIN64\n\n");
+        fprintf(client, "#ifndef _WIN64\n\n");
         pointer_size = 4;
         write_client_routines( stmts );
         fprintf(client, "\n#else /* _WIN64 */\n\n");
index eaef867..e0322c6 100644 (file)
@@ -1081,14 +1081,6 @@ static void write_rpc_interface_start(FILE *header, const type_t *iface)
 {
   unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION);
   const char *var = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
-  static int allocate_written = 0;
-
-  if (!allocate_written)
-  {
-    allocate_written = 1;
-    fprintf(header, "void * __RPC_USER MIDL_user_allocate(SIZE_T);\n");
-    fprintf(header, "void __RPC_USER MIDL_user_free(void *);\n\n");
-  }
 
   fprintf(header, "/*****************************************************************************\n");
   fprintf(header, " * %s interface (v%d.%d)\n", iface->name, MAJORVERSION(ver), MINORVERSION(ver));
index 2175f5e..6a37192 100644 (file)
@@ -39,6 +39,7 @@ extern void write_type_decl_left(FILE *f, type_t *t);
 extern int needs_space_after(type_t *t);
 extern int is_object(const type_t *iface);
 extern int is_local(const attr_list_t *list);
+extern int count_methods(const type_t *iface);
 extern int need_stub(const type_t *iface);
 extern int need_proxy(const type_t *iface);
 extern int need_stub_files(const statement_list_t *stmts);
index e7673d1..3a535e8 100644 (file)
@@ -289,11 +289,13 @@ static const struct keyword attr_keywords[] =
         {"aggregatable",                tAGGREGATABLE},
         {"allocate",                    tALLOCATE},
         {"annotation",                  tANNOTATION},
+        {"apartment",                   tAPARTMENT},
         {"appobject",                   tAPPOBJECT},
         {"async",                       tASYNC},
         {"async_uuid",                  tASYNCUUID},
         {"auto_handle",                 tAUTOHANDLE},
         {"bindable",                    tBINDABLE},
+        {"both",                        tBOTH},
         {"broadcast",                   tBROADCAST},
         {"byte_count",                  tBYTECOUNT},
         {"call_as",                     tCALLAS},
@@ -304,15 +306,23 @@ static const struct keyword attr_keywords[] =
         {"context_handle_noserialize",  tCONTEXTHANDLENOSERIALIZE},
         {"context_handle_serialize",    tCONTEXTHANDLENOSERIALIZE},
         {"control",                     tCONTROL},
+        {"decode",                      tDECODE},
+        {"defaultbind",                 tDEFAULTBIND},
         {"defaultcollelem",             tDEFAULTCOLLELEM},
         {"defaultvalue",                tDEFAULTVALUE},
         {"defaultvtable",               tDEFAULTVTABLE},
+        {"disable_consistency_check",   tDISABLECONSISTENCYCHECK},
         {"displaybind",                 tDISPLAYBIND},
         {"dllname",                     tDLLNAME},
         {"dual",                        tDUAL},
+        {"enable_allocate",             tENABLEALLOCATE},
+        {"encode",                      tENCODE},
         {"endpoint",                    tENDPOINT},
         {"entry",                       tENTRY},
         {"explicit_handle",             tEXPLICITHANDLE},
+        {"fault_status",                tFAULTSTATUS},
+        {"force_allocate",              tFORCEALLOCATE},
+        {"free",                        tFREE},
         {"handle",                      tHANDLE},
         {"helpcontext",                 tHELPCONTEXT},
         {"helpfile",                    tHELPFILE},
@@ -322,6 +332,7 @@ static const struct keyword attr_keywords[] =
         {"hidden",                      tHIDDEN},
         {"id",                          tID},
         {"idempotent",                  tIDEMPOTENT},
+        {"ignore",                      tIGNORE},
         {"iid_is",                      tIIDIS},
         {"immediatebind",               tIMMEDIATEBIND},
         {"implicit_handle",             tIMPLICITHANDLE},
@@ -330,42 +341,67 @@ static const struct keyword attr_keywords[] =
         {"input_sync",                  tINPUTSYNC},
         {"lcid",                        tLCID},
         {"length_is",                   tLENGTHIS},
+        {"licensed",                    tLICENSED},
         {"local",                       tLOCAL},
+        {"maybe",                       tMAYBE},
+        {"message",                     tMESSAGE},
+        {"neutral",                     tNEUTRAL},
+        {"nocode",                      tNOCODE},
         {"nonbrowsable",                tNONBROWSABLE},
         {"noncreatable",                tNONCREATABLE},
         {"nonextensible",               tNONEXTENSIBLE},
+        {"notify",                      tNOTIFY},
+        {"notify_flag",                 tNOTIFYFLAG},
         {"object",                      tOBJECT},
         {"odl",                         tODL},
         {"oleautomation",               tOLEAUTOMATION},
+        {"optimize",                    tOPTIMIZE},
         {"optional",                    tOPTIONAL},
         {"out",                         tOUT},
+        {"partial_ignore",              tPARTIALIGNORE},
         {"pointer_default",             tPOINTERDEFAULT},
+        {"progid",                      tPROGID},
         {"propget",                     tPROPGET},
         {"propput",                     tPROPPUT},
         {"propputref",                  tPROPPUTREF},
+        {"proxy",                       tPROXY},
         {"ptr",                         tPTR},
         {"public",                      tPUBLIC},
         {"range",                       tRANGE},
         {"readonly",                    tREADONLY},
         {"ref",                         tREF},
+        {"represent_as",                tREPRESENTAS},
         {"requestedit",                 tREQUESTEDIT},
         {"restricted",                  tRESTRICTED},
         {"retval",                      tRETVAL},
+        {"single",                      tSINGLE},
         {"size_is",                     tSIZEIS},
         {"source",                      tSOURCE},
         {"strict_context_handle",       tSTRICTCONTEXTHANDLE},
         {"string",                      tSTRING},
         {"switch_is",                   tSWITCHIS},
         {"switch_type",                 tSWITCHTYPE},
+        {"threading",                   tTHREADING},
         {"transmit_as",                 tTRANSMITAS},
+        {"uidefault",                   tUIDEFAULT},
         {"unique",                      tUNIQUE},
+        {"user_marshal",                tUSERMARSHAL},
+        {"usesgetlasterror",            tUSESGETLASTERROR},
         {"uuid",                        tUUID},
         {"v1_enum",                     tV1ENUM},
         {"vararg",                      tVARARG},
         {"version",                     tVERSION},
+        {"vi_progid",                   tVIPROGID},
         {"wire_marshal",                tWIREMARSHAL},
 };
 
+/* attributes TODO:
+    custom
+    first_is
+    last_is
+    max_is
+    min_is
+*/
 
 #define KWP(p) ((const struct keyword *)(p))
 
index 5c9137b..3df4c10 100644 (file)
@@ -304,112 +304,141 @@ static statement_list_t *append_statement(statement_list_t *list, statement_t *s
      tCONTEXTHANDLESERIALIZE = 301,
      tCONTROL = 302,
      tCPPQUOTE = 303,
-     tDEFAULT = 304,
-     tDEFAULTCOLLELEM = 305,
-     tDEFAULTVALUE = 306,
-     tDEFAULTVTABLE = 307,
-     tDISPLAYBIND = 308,
-     tDISPINTERFACE = 309,
-     tDLLNAME = 310,
-     tDOUBLE = 311,
-     tDUAL = 312,
-     tENDPOINT = 313,
-     tENTRY = 314,
-     tENUM = 315,
-     tERRORSTATUST = 316,
-     tEXPLICITHANDLE = 317,
-     tEXTERN = 318,
-     tFALSE = 319,
-     tFASTCALL = 320,
-     tFLOAT = 321,
-     tHANDLE = 322,
-     tHANDLET = 323,
-     tHELPCONTEXT = 324,
-     tHELPFILE = 325,
-     tHELPSTRING = 326,
-     tHELPSTRINGCONTEXT = 327,
-     tHELPSTRINGDLL = 328,
-     tHIDDEN = 329,
-     tHYPER = 330,
-     tID = 331,
-     tIDEMPOTENT = 332,
-     tIIDIS = 333,
-     tIMMEDIATEBIND = 334,
-     tIMPLICITHANDLE = 335,
-     tIMPORT = 336,
-     tIMPORTLIB = 337,
-     tIN = 338,
-     tIN_LINE = 339,
-     tINLINE = 340,
-     tINPUTSYNC = 341,
-     tINT = 342,
-     tINT3264 = 343,
-     tINT64 = 344,
-     tINTERFACE = 345,
-     tLCID = 346,
-     tLENGTHIS = 347,
-     tLIBRARY = 348,
-     tLOCAL = 349,
-     tLONG = 350,
-     tMETHODS = 351,
-     tMODULE = 352,
-     tNONBROWSABLE = 353,
-     tNONCREATABLE = 354,
-     tNONEXTENSIBLE = 355,
-     tNULL = 356,
-     tOBJECT = 357,
-     tODL = 358,
-     tOLEAUTOMATION = 359,
-     tOPTIONAL = 360,
-     tOUT = 361,
-     tPASCAL = 362,
-     tPOINTERDEFAULT = 363,
-     tPROPERTIES = 364,
-     tPROPGET = 365,
-     tPROPPUT = 366,
-     tPROPPUTREF = 367,
-     tPTR = 368,
-     tPUBLIC = 369,
-     tRANGE = 370,
-     tREADONLY = 371,
-     tREF = 372,
-     tREGISTER = 373,
-     tREQUESTEDIT = 374,
-     tRESTRICTED = 375,
-     tRETVAL = 376,
-     tSAFEARRAY = 377,
-     tSHORT = 378,
-     tSIGNED = 379,
-     tSIZEIS = 380,
-     tSIZEOF = 381,
-     tSMALL = 382,
-     tSOURCE = 383,
-     tSTATIC = 384,
-     tSTDCALL = 385,
-     tSTRICTCONTEXTHANDLE = 386,
-     tSTRING = 387,
-     tSTRUCT = 388,
-     tSWITCH = 389,
-     tSWITCHIS = 390,
-     tSWITCHTYPE = 391,
-     tTRANSMITAS = 392,
-     tTRUE = 393,
-     tTYPEDEF = 394,
-     tUNION = 395,
-     tUNIQUE = 396,
-     tUNSIGNED = 397,
-     tUUID = 398,
-     tV1ENUM = 399,
-     tVARARG = 400,
-     tVERSION = 401,
-     tVOID = 402,
-     tWCHAR = 403,
-     tWIREMARSHAL = 404,
-     ADDRESSOF = 405,
-     NEG = 406,
-     POS = 407,
-     PPTR = 408,
-     CAST = 409
+     tDECODE = 304,
+     tDEFAULT = 305,
+     tDEFAULTBIND = 306,
+     tDEFAULTCOLLELEM = 307,
+     tDEFAULTVALUE = 308,
+     tDEFAULTVTABLE = 309,
+     tDISABLECONSISTENCYCHECK = 310,
+     tDISPLAYBIND = 311,
+     tDISPINTERFACE = 312,
+     tDLLNAME = 313,
+     tDOUBLE = 314,
+     tDUAL = 315,
+     tENABLEALLOCATE = 316,
+     tENCODE = 317,
+     tENDPOINT = 318,
+     tENTRY = 319,
+     tENUM = 320,
+     tERRORSTATUST = 321,
+     tEXPLICITHANDLE = 322,
+     tEXTERN = 323,
+     tFALSE = 324,
+     tFASTCALL = 325,
+     tFAULTSTATUS = 326,
+     tFLOAT = 327,
+     tFORCEALLOCATE = 328,
+     tHANDLE = 329,
+     tHANDLET = 330,
+     tHELPCONTEXT = 331,
+     tHELPFILE = 332,
+     tHELPSTRING = 333,
+     tHELPSTRINGCONTEXT = 334,
+     tHELPSTRINGDLL = 335,
+     tHIDDEN = 336,
+     tHYPER = 337,
+     tID = 338,
+     tIDEMPOTENT = 339,
+     tIGNORE = 340,
+     tIIDIS = 341,
+     tIMMEDIATEBIND = 342,
+     tIMPLICITHANDLE = 343,
+     tIMPORT = 344,
+     tIMPORTLIB = 345,
+     tIN = 346,
+     tIN_LINE = 347,
+     tINLINE = 348,
+     tINPUTSYNC = 349,
+     tINT = 350,
+     tINT3264 = 351,
+     tINT64 = 352,
+     tINTERFACE = 353,
+     tLCID = 354,
+     tLENGTHIS = 355,
+     tLIBRARY = 356,
+     tLICENSED = 357,
+     tLOCAL = 358,
+     tLONG = 359,
+     tMAYBE = 360,
+     tMESSAGE = 361,
+     tMETHODS = 362,
+     tMODULE = 363,
+     tNOCODE = 364,
+     tNONBROWSABLE = 365,
+     tNONCREATABLE = 366,
+     tNONEXTENSIBLE = 367,
+     tNOTIFY = 368,
+     tNOTIFYFLAG = 369,
+     tNULL = 370,
+     tOBJECT = 371,
+     tODL = 372,
+     tOLEAUTOMATION = 373,
+     tOPTIMIZE = 374,
+     tOPTIONAL = 375,
+     tOUT = 376,
+     tPARTIALIGNORE = 377,
+     tPASCAL = 378,
+     tPOINTERDEFAULT = 379,
+     tPROGID = 380,
+     tPROPERTIES = 381,
+     tPROPGET = 382,
+     tPROPPUT = 383,
+     tPROPPUTREF = 384,
+     tPROXY = 385,
+     tPTR = 386,
+     tPUBLIC = 387,
+     tRANGE = 388,
+     tREADONLY = 389,
+     tREF = 390,
+     tREGISTER = 391,
+     tREPRESENTAS = 392,
+     tREQUESTEDIT = 393,
+     tRESTRICTED = 394,
+     tRETVAL = 395,
+     tSAFEARRAY = 396,
+     tSHORT = 397,
+     tSIGNED = 398,
+     tSIZEIS = 399,
+     tSIZEOF = 400,
+     tSMALL = 401,
+     tSOURCE = 402,
+     tSTATIC = 403,
+     tSTDCALL = 404,
+     tSTRICTCONTEXTHANDLE = 405,
+     tSTRING = 406,
+     tSTRUCT = 407,
+     tSWITCH = 408,
+     tSWITCHIS = 409,
+     tSWITCHTYPE = 410,
+     tTHREADING = 411,
+     tTRANSMITAS = 412,
+     tTRUE = 413,
+     tTYPEDEF = 414,
+     tUIDEFAULT = 415,
+     tUNION = 416,
+     tUNIQUE = 417,
+     tUNSIGNED = 418,
+     tUSESGETLASTERROR = 419,
+     tUSERMARSHAL = 420,
+     tUUID = 421,
+     tV1ENUM = 422,
+     tVARARG = 423,
+     tVERSION = 424,
+     tVIPROGID = 425,
+     tVOID = 426,
+     tWCHAR = 427,
+     tWIREMARSHAL = 428,
+     tAPARTMENT = 429,
+     tNEUTRAL = 430,
+     tSINGLE = 431,
+     tFREE = 432,
+     tBOTH = 433,
+     ADDRESSOF = 434,
+     NEG = 435,
+     POS = 436,
+     PPTR = 437,
+     CAST = 438
    };
 #endif
 
@@ -450,7 +479,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 454 "parser.tab.c"
+#line 483 "parser.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -462,7 +491,7 @@ typedef union YYSTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 466 "parser.tab.c"
+#line 495 "parser.tab.c"
 
 #ifdef short
 # undef short
@@ -677,20 +706,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2469
+#define YYLAST   2650
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  179
+#define YYNTOKENS  208
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  99
+#define YYNNTS  100
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  345
+#define YYNRULES  376
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  606
+#define YYNSTATES  655
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   409
+#define YYMAXUTOK   438
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -701,16 +730,16 @@ static const yytype_uint8 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,   163,     2,     2,     2,   162,   155,     2,
-     174,   175,   160,   159,   150,   158,   170,   161,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   152,   173,
-     156,   178,   157,   151,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   192,     2,     2,     2,   191,   184,     2,
+     203,   204,   189,   188,   179,   187,   199,   190,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   181,   202,
+     185,   207,   186,   180,     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,   171,     2,   172,   154,     2,     2,     2,     2,     2,
+       2,   200,     2,   201,   183,     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,   176,   153,   177,   164,     2,     2,     2,
+       2,     2,     2,   205,   182,   206,   193,     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,
@@ -738,7 +767,10 @@ static const yytype_uint8 yytranslate[] =
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   165,   166,   167,   168,   169
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   194,   195,   196,   197,   198
 };
 
 #if YYDEBUG
@@ -753,184 +785,198 @@ static const yytype_uint16 yyprhs[] =
      111,   115,   120,   121,   123,   125,   129,   131,   135,   139,
      142,   146,   150,   151,   153,   157,   159,   163,   168,   170,
      174,   175,   177,   182,   184,   186,   188,   190,   192,   197,
-     202,   204,   206,   208,   210,   212,   214,   219,   221,   223,
-     228,   230,   235,   240,   242,   244,   249,   254,   259,   264,
-     269,   271,   276,   278,   283,   285,   291,   293,   295,   300,
-     305,   307,   309,   311,   313,   315,   317,   319,   321,   323,
-     325,   330,   332,   334,   336,   338,   345,   347,   349,   351,
-     353,   358,   360,   362,   364,   369,   374,   379,   384,   386,
-     388,   393,   398,   400,   402,   404,   406,   408,   410,   412,
-     413,   416,   421,   425,   426,   429,   431,   433,   437,   441,
-     443,   449,   451,   455,   456,   458,   460,   462,   464,   466,
-     468,   470,   472,   474,   476,   478,   484,   488,   492,   496,
-     500,   504,   508,   512,   516,   520,   524,   528,   532,   536,
-     540,   544,   548,   552,   556,   559,   562,   565,   568,   571,
-     574,   578,   582,   588,   594,   599,   603,   605,   609,   611,
-     613,   614,   617,   622,   626,   629,   632,   633,   636,   639,
-     641,   645,   647,   651,   654,   655,   657,   658,   660,   662,
-     664,   666,   668,   670,   672,   675,   678,   680,   682,   684,
-     686,   688,   690,   691,   693,   695,   698,   700,   703,   706,
-     708,   710,   712,   715,   718,   721,   727,   728,   731,   734,
-     737,   740,   743,   746,   750,   753,   757,   763,   769,   770,
-     773,   776,   779,   782,   789,   798,   801,   804,   807,   810,
-     813,   816,   822,   824,   826,   828,   830,   832,   833,   836,
-     839,   843,   844,   846,   849,   852,   855,   859,   862,   864,
-     866,   870,   873,   878,   882,   885,   887,   891,   894,   895,
-     897,   901,   904,   906,   910,   915,   919,   922,   924,   928,
-     931,   932,   934,   936,   940,   943,   945,   949,   954,   956,
-     960,   961,   964,   967,   969,   973,   975,   979,   981,   983,
-     985,   991,   993,   995,   997,   999,  1002,  1004,  1007,  1009,
-    1012,  1017,  1022,  1028,  1039,  1041
+     202,   204,   206,   208,   210,   212,   214,   216,   218,   220,
+     222,   227,   229,   231,   233,   238,   240,   242,   244,   249,
+     254,   256,   258,   260,   262,   267,   272,   277,   282,   287,
+     289,   294,   296,   298,   303,   305,   311,   313,   315,   320,
+     325,   327,   329,   331,   333,   335,   337,   339,   341,   343,
+     345,   347,   349,   351,   353,   358,   360,   362,   364,   369,
+     374,   376,   378,   380,   382,   384,   391,   393,   398,   400,
+     402,   404,   409,   411,   413,   415,   420,   425,   430,   435,
+     437,   439,   444,   449,   451,   453,   458,   463,   468,   470,
+     472,   474,   476,   478,   480,   482,   483,   486,   491,   495,
+     496,   499,   501,   503,   507,   511,   513,   519,   521,   525,
+     526,   528,   530,   532,   534,   536,   538,   540,   542,   544,
+     546,   548,   554,   558,   562,   566,   570,   574,   578,   582,
+     586,   590,   594,   598,   602,   606,   610,   614,   618,   622,
+     626,   629,   632,   635,   638,   641,   644,   648,   652,   658,
+     664,   669,   673,   675,   679,   681,   683,   684,   687,   692,
+     696,   699,   702,   703,   706,   709,   711,   715,   717,   721,
+     724,   725,   727,   728,   730,   732,   734,   736,   738,   740,
+     742,   745,   748,   750,   752,   754,   756,   758,   760,   761,
+     763,   765,   768,   770,   773,   776,   778,   780,   782,   785,
+     788,   791,   797,   798,   801,   804,   807,   810,   813,   816,
+     820,   823,   827,   833,   839,   840,   843,   846,   849,   852,
+     859,   868,   871,   874,   877,   880,   883,   886,   892,   894,
+     896,   898,   900,   902,   903,   906,   909,   913,   914,   916,
+     919,   922,   925,   929,   932,   934,   936,   940,   943,   948,
+     952,   955,   957,   961,   964,   965,   967,   971,   974,   976,
+     980,   985,   989,   992,   994,   998,  1001,  1002,  1004,  1006,
+    1010,  1013,  1015,  1019,  1024,  1026,  1030,  1031,  1034,  1037,
+    1039,  1043,  1045,  1049,  1051,  1053,  1055,  1057,  1059,  1061,
+    1063,  1065,  1071,  1073,  1075,  1077,  1079,  1082,  1084,  1087,
+    1089,  1092,  1097,  1102,  1108,  1119,  1121
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     180,     0,    -1,   181,    -1,    -1,   181,   246,    -1,   181,
-     245,    -1,   181,   232,   173,    -1,   181,   234,    -1,   181,
-     249,    -1,   181,   193,    -1,   181,   185,    -1,    -1,   182,
-     246,    -1,   182,   245,    -1,   182,   232,   173,    -1,   182,
-     234,    -1,   182,   249,    -1,   182,   185,    -1,   182,   190,
-      -1,   182,   193,    -1,    -1,   183,   185,    -1,    -1,   173,
-      -1,   187,    -1,   186,   173,    -1,   225,   173,    -1,   189,
-      -1,   275,   173,    -1,   211,    -1,   273,    -1,   276,    -1,
-     200,   211,    -1,   200,   273,    -1,   200,   276,    -1,    48,
-     174,     8,   175,    -1,    81,     8,   173,    -1,   188,   182,
-      12,    -1,    82,   174,     8,   175,   184,    -1,    93,     3,
-      -1,   200,   191,   176,    -1,   192,   182,   177,   184,    -1,
-      -1,   196,    -1,   197,    -1,   195,   150,   197,    -1,   195,
-      -1,   195,   150,    22,    -1,   200,   254,   265,    -1,   254,
-     265,    -1,   171,   213,   172,    -1,   171,   160,   172,    -1,
-      -1,   200,    -1,   171,   201,   172,    -1,   203,    -1,   201,
-     150,   203,    -1,   201,   172,   171,   203,    -1,     8,    -1,
-     202,   150,     8,    -1,    -1,    23,    -1,    25,   174,     8,
-     175,    -1,    26,    -1,    27,    -1,    29,    -1,    30,    -1,
-      32,    -1,    35,   174,   228,   175,    -1,    37,   174,   215,
-     175,    -1,    44,    -1,    45,    -1,    46,    -1,    47,    -1,
-      49,    -1,    50,    -1,    51,   174,   217,   175,    -1,    52,
-      -1,    53,    -1,    55,   174,     8,   175,    -1,    57,    -1,
-      58,   174,   202,   175,    -1,    59,   174,   217,   175,    -1,
-      62,    -1,    67,    -1,    69,   174,   216,   175,    -1,    70,
-     174,     8,   175,    -1,    71,   174,     8,   175,    -1,    72,
-     174,   216,   175,    -1,    73,   174,     8,   175,    -1,    74,
-      -1,    76,   174,   216,   175,    -1,    77,    -1,    78,   174,
-     214,   175,    -1,    79,    -1,    80,   174,    68,     3,   175,
-      -1,    83,    -1,    86,    -1,    92,   174,   212,   175,    -1,
-      91,   174,   216,   175,    -1,    91,    -1,    94,    -1,    98,
-      -1,    99,    -1,   100,    -1,   102,    -1,   103,    -1,   104,
-      -1,   105,    -1,   106,    -1,   108,   174,   272,   175,    -1,
-     110,    -1,   111,    -1,   112,    -1,   114,    -1,   115,   174,
-     216,   150,   216,   175,    -1,   116,    -1,   119,    -1,   120,
-      -1,   121,    -1,   125,   174,   212,   175,    -1,   128,    -1,
-     131,    -1,   132,    -1,   135,   174,   214,   175,    -1,   136,
-     174,   274,   175,    -1,   137,   174,   274,   175,    -1,   143,
-     174,   204,   175,    -1,   144,    -1,   145,    -1,   146,   174,
-     277,   175,    -1,   149,   174,   274,   175,    -1,   272,    -1,
-      11,    -1,     8,    -1,    38,    -1,    65,    -1,   107,    -1,
-     130,    -1,    -1,   206,   207,    -1,    37,   216,   152,   222,
-      -1,    49,   152,   222,    -1,    -1,   209,   150,    -1,   209,
-      -1,   210,    -1,   209,   150,   210,    -1,   228,   178,   216,
-      -1,   228,    -1,    60,   227,   176,   208,   177,    -1,   213,
-      -1,   212,   150,   213,    -1,    -1,   214,    -1,     5,    -1,
-       6,    -1,     7,    -1,    64,    -1,   101,    -1,   138,    -1,
-       8,    -1,     9,    -1,    10,    -1,     3,    -1,   214,   151,
-     214,   152,   214,    -1,   214,    20,   214,    -1,   214,    21,
-     214,    -1,   214,   153,   214,    -1,   214,   154,   214,    -1,
-     214,   155,   214,    -1,   214,    16,   214,    -1,   214,    17,
-     214,    -1,   214,   157,   214,    -1,   214,   156,   214,    -1,
-     214,    18,   214,    -1,   214,    19,   214,    -1,   214,    13,
-     214,    -1,   214,    14,   214,    -1,   214,   159,   214,    -1,
-     214,   158,   214,    -1,   214,   162,   214,    -1,   214,   160,
-     214,    -1,   214,   161,   214,    -1,   163,   214,    -1,   164,
-     214,    -1,   159,   214,    -1,   158,   214,    -1,   155,   214,
-      -1,   160,   214,    -1,   214,    15,     3,    -1,   214,   170,
-       3,    -1,   174,   254,   261,   175,   214,    -1,   126,   174,
-     254,   261,   175,    -1,   214,   171,   214,   172,    -1,   174,
-     214,   175,    -1,   216,    -1,   215,   150,   216,    -1,   214,
-      -1,   214,    -1,    -1,   218,   219,    -1,   199,   254,   270,
-     173,    -1,   199,   276,   173,    -1,   223,   173,    -1,   200,
-     173,    -1,    -1,   221,   220,    -1,   223,   173,    -1,   173,
-      -1,   199,   254,   257,    -1,   225,    -1,   200,   254,   271,
-      -1,   254,   271,    -1,    -1,   228,    -1,    -1,     3,    -1,
-       4,    -1,     3,    -1,     4,    -1,    33,    -1,   148,    -1,
-     231,    -1,   124,   231,    -1,   142,   231,    -1,   142,    -1,
-      66,    -1,    56,    -1,    31,    -1,    61,    -1,    68,    -1,
-      -1,    87,    -1,    87,    -1,   123,   230,    -1,   127,    -1,
-      95,   230,    -1,    75,   230,    -1,    89,    -1,    39,    -1,
-      88,    -1,    40,     3,    -1,    40,     4,    -1,   200,   232,
-      -1,   233,   176,   235,   177,   184,    -1,    -1,   235,   236,
-      -1,   199,   246,    -1,    54,     3,    -1,    54,     4,    -1,
-     200,   237,    -1,   109,   152,    -1,   239,   223,   173,    -1,
-      96,   152,    -1,   240,   224,   173,    -1,   238,   176,   239,
-     240,   177,    -1,   238,   176,   243,   173,   177,    -1,    -1,
-     152,     4,    -1,    90,     3,    -1,    90,     4,    -1,   200,
-     243,    -1,   244,   242,   176,   183,   177,   184,    -1,   244,
-     152,     3,   176,   189,   183,   177,   184,    -1,   241,   184,
-      -1,   243,   173,    -1,   237,   173,    -1,    97,     3,    -1,
-      97,     4,    -1,   200,   247,    -1,   248,   176,   183,   177,
-     184,    -1,    63,    -1,   129,    -1,   118,    -1,    85,    -1,
-      43,    -1,    -1,   253,   252,    -1,   274,   255,    -1,   256,
-     274,   255,    -1,    -1,   256,    -1,   252,   255,    -1,   251,
-     255,    -1,   250,   255,    -1,   160,   253,   257,    -1,   205,
-     257,    -1,   258,    -1,   228,    -1,   174,   257,   175,    -1,
-     258,   198,    -1,   258,   174,   194,   175,    -1,   160,   253,
-     261,    -1,   205,   261,    -1,   262,    -1,   160,   253,   265,
-      -1,   205,   265,    -1,    -1,   259,    -1,   174,   260,   175,
-      -1,   262,   198,    -1,   198,    -1,   174,   194,   175,    -1,
-     262,   174,   194,   175,    -1,   160,   253,   265,    -1,   205,
-     265,    -1,   266,    -1,   160,   253,   265,    -1,   205,   265,
-      -1,    -1,   263,    -1,   228,    -1,   174,   264,   175,    -1,
-     266,   198,    -1,   198,    -1,   174,   194,   175,    -1,   266,
-     174,   194,   175,    -1,   257,    -1,   267,   150,   257,    -1,
-      -1,   152,   217,    -1,   263,   268,    -1,   269,    -1,   270,
-     150,   269,    -1,   257,    -1,   257,   178,   217,    -1,   117,
-      -1,   141,    -1,   113,    -1,   133,   227,   176,   218,   177,
-      -1,   147,    -1,     4,    -1,   229,    -1,   211,    -1,    60,
-       3,    -1,   273,    -1,   133,     3,    -1,   276,    -1,   140,
-       3,    -1,   122,   174,   274,   175,    -1,   139,   199,   254,
-     267,    -1,   140,   227,   176,   221,   177,    -1,   140,   227,
-     134,   174,   223,   175,   226,   176,   206,   177,    -1,     5,
-      -1,     5,   170,     5,    -1
+     209,     0,    -1,   210,    -1,    -1,   210,   275,    -1,   210,
+     274,    -1,   210,   261,   202,    -1,   210,   263,    -1,   210,
+     278,    -1,   210,   222,    -1,   210,   214,    -1,    -1,   211,
+     275,    -1,   211,   274,    -1,   211,   261,   202,    -1,   211,
+     263,    -1,   211,   278,    -1,   211,   214,    -1,   211,   219,
+      -1,   211,   222,    -1,    -1,   212,   214,    -1,    -1,   202,
+      -1,   216,    -1,   215,   202,    -1,   254,   202,    -1,   218,
+      -1,   305,   202,    -1,   240,    -1,   303,    -1,   306,    -1,
+     229,   240,    -1,   229,   303,    -1,   229,   306,    -1,    48,
+     203,     8,   204,    -1,    89,     8,   202,    -1,   217,   211,
+      12,    -1,    90,   203,     8,   204,   213,    -1,   101,     3,
+      -1,   229,   220,   205,    -1,   221,   211,   206,   213,    -1,
+      -1,   225,    -1,   226,    -1,   224,   179,   226,    -1,   224,
+      -1,   224,   179,    22,    -1,   229,   283,   294,    -1,   283,
+     294,    -1,   200,   242,   201,    -1,   200,   189,   201,    -1,
+      -1,   229,    -1,   200,   230,   201,    -1,   232,    -1,   230,
+     179,   232,    -1,   230,   201,   200,   232,    -1,     8,    -1,
+     231,   179,     8,    -1,    -1,    23,    -1,    25,   203,     8,
+     204,    -1,    26,    -1,    27,    -1,    29,    -1,    30,    -1,
+      32,    -1,    35,   203,   257,   204,    -1,    37,   203,   244,
+     204,    -1,    41,    -1,    42,    -1,    44,    -1,    45,    -1,
+      46,    -1,    47,    -1,    49,    -1,    50,    -1,    51,    -1,
+      52,    -1,    53,   203,   246,   204,    -1,    54,    -1,    55,
+      -1,    56,    -1,    58,   203,     8,   204,    -1,    60,    -1,
+      61,    -1,    62,    -1,    63,   203,   231,   204,    -1,    64,
+     203,   246,   204,    -1,    67,    -1,    71,    -1,    73,    -1,
+      74,    -1,    76,   203,   245,   204,    -1,    77,   203,     8,
+     204,    -1,    78,   203,     8,   204,    -1,    79,   203,   245,
+     204,    -1,    80,   203,     8,   204,    -1,    81,    -1,    83,
+     203,   245,   204,    -1,    84,    -1,    85,    -1,    86,   203,
+     243,   204,    -1,    87,    -1,    88,   203,    75,     3,   204,
+      -1,    91,    -1,    94,    -1,   100,   203,   241,   204,    -1,
+      99,   203,   245,   204,    -1,    99,    -1,   102,    -1,   103,
+      -1,   105,    -1,   106,    -1,   109,    -1,   110,    -1,   111,
+      -1,   112,    -1,   113,    -1,   114,    -1,   116,    -1,   117,
+      -1,   118,    -1,   119,   203,     8,   204,    -1,   120,    -1,
+     121,    -1,   122,    -1,   124,   203,   302,   204,    -1,   125,
+     203,     8,   204,    -1,   127,    -1,   128,    -1,   129,    -1,
+     130,    -1,   132,    -1,   133,   203,   245,   179,   245,   204,
+      -1,   134,    -1,   137,   203,   304,   204,    -1,   138,    -1,
+     139,    -1,   140,    -1,   144,   203,   241,   204,    -1,   147,
+      -1,   150,    -1,   151,    -1,   154,   203,   243,   204,    -1,
+     155,   203,   304,   204,    -1,   157,   203,   304,   204,    -1,
+     156,   203,   301,   204,    -1,   160,    -1,   164,    -1,   165,
+     203,   304,   204,    -1,   166,   203,   233,   204,    -1,   167,
+      -1,   168,    -1,   169,   203,   307,   204,    -1,   170,   203,
+       8,   204,    -1,   173,   203,   304,   204,    -1,   302,    -1,
+      11,    -1,     8,    -1,    38,    -1,    70,    -1,   123,    -1,
+     149,    -1,    -1,   235,   236,    -1,    37,   245,   181,   251,
+      -1,    50,   181,   251,    -1,    -1,   238,   179,    -1,   238,
+      -1,   239,    -1,   238,   179,   239,    -1,   257,   207,   245,
+      -1,   257,    -1,    65,   256,   205,   237,   206,    -1,   242,
+      -1,   241,   179,   242,    -1,    -1,   243,    -1,     5,    -1,
+       6,    -1,     7,    -1,    69,    -1,   115,    -1,   158,    -1,
+       8,    -1,     9,    -1,    10,    -1,     3,    -1,   243,   180,
+     243,   181,   243,    -1,   243,    20,   243,    -1,   243,    21,
+     243,    -1,   243,   182,   243,    -1,   243,   183,   243,    -1,
+     243,   184,   243,    -1,   243,    16,   243,    -1,   243,    17,
+     243,    -1,   243,   186,   243,    -1,   243,   185,   243,    -1,
+     243,    18,   243,    -1,   243,    19,   243,    -1,   243,    13,
+     243,    -1,   243,    14,   243,    -1,   243,   188,   243,    -1,
+     243,   187,   243,    -1,   243,   191,   243,    -1,   243,   189,
+     243,    -1,   243,   190,   243,    -1,   192,   243,    -1,   193,
+     243,    -1,   188,   243,    -1,   187,   243,    -1,   184,   243,
+      -1,   189,   243,    -1,   243,    15,     3,    -1,   243,   199,
+       3,    -1,   203,   283,   290,   204,   243,    -1,   145,   203,
+     283,   290,   204,    -1,   243,   200,   243,   201,    -1,   203,
+     243,   204,    -1,   245,    -1,   244,   179,   245,    -1,   243,
+      -1,   243,    -1,    -1,   247,   248,    -1,   228,   283,   299,
+     202,    -1,   228,   306,   202,    -1,   252,   202,    -1,   229,
+     202,    -1,    -1,   250,   249,    -1,   252,   202,    -1,   202,
+      -1,   228,   283,   286,    -1,   254,    -1,   229,   283,   300,
+      -1,   283,   300,    -1,    -1,   257,    -1,    -1,     3,    -1,
+       4,    -1,     3,    -1,     4,    -1,    33,    -1,   172,    -1,
+     260,    -1,   143,   260,    -1,   163,   260,    -1,   163,    -1,
+      72,    -1,    59,    -1,    31,    -1,    66,    -1,    75,    -1,
+      -1,    95,    -1,    95,    -1,   142,   259,    -1,   146,    -1,
+     104,   259,    -1,    82,   259,    -1,    97,    -1,    39,    -1,
+      96,    -1,    40,     3,    -1,    40,     4,    -1,   229,   261,
+      -1,   262,   205,   264,   206,   213,    -1,    -1,   264,   265,
+      -1,   228,   275,    -1,    57,     3,    -1,    57,     4,    -1,
+     229,   266,    -1,   126,   181,    -1,   268,   252,   202,    -1,
+     107,   181,    -1,   269,   253,   202,    -1,   267,   205,   268,
+     269,   206,    -1,   267,   205,   272,   202,   206,    -1,    -1,
+     181,     4,    -1,    98,     3,    -1,    98,     4,    -1,   229,
+     272,    -1,   273,   271,   205,   212,   206,   213,    -1,   273,
+     181,     3,   205,   218,   212,   206,   213,    -1,   270,   213,
+      -1,   272,   202,    -1,   266,   202,    -1,   108,     3,    -1,
+     108,     4,    -1,   229,   276,    -1,   277,   205,   212,   206,
+     213,    -1,    68,    -1,   148,    -1,   136,    -1,    93,    -1,
+      43,    -1,    -1,   282,   281,    -1,   304,   284,    -1,   285,
+     304,   284,    -1,    -1,   285,    -1,   281,   284,    -1,   280,
+     284,    -1,   279,   284,    -1,   189,   282,   286,    -1,   234,
+     286,    -1,   287,    -1,   257,    -1,   203,   286,   204,    -1,
+     287,   227,    -1,   287,   203,   223,   204,    -1,   189,   282,
+     290,    -1,   234,   290,    -1,   291,    -1,   189,   282,   294,
+      -1,   234,   294,    -1,    -1,   288,    -1,   203,   289,   204,
+      -1,   291,   227,    -1,   227,    -1,   203,   223,   204,    -1,
+     291,   203,   223,   204,    -1,   189,   282,   294,    -1,   234,
+     294,    -1,   295,    -1,   189,   282,   294,    -1,   234,   294,
+      -1,    -1,   292,    -1,   257,    -1,   203,   293,   204,    -1,
+     295,   227,    -1,   227,    -1,   203,   223,   204,    -1,   295,
+     203,   223,   204,    -1,   286,    -1,   296,   179,   286,    -1,
+      -1,   181,   246,    -1,   292,   297,    -1,   298,    -1,   299,
+     179,   298,    -1,   286,    -1,   286,   207,   246,    -1,   174,
+      -1,   175,    -1,   176,    -1,   177,    -1,   178,    -1,   135,
+      -1,   162,    -1,   131,    -1,   152,   256,   205,   247,   206,
+      -1,   171,    -1,     4,    -1,   258,    -1,   240,    -1,    65,
+       3,    -1,   303,    -1,   152,     3,    -1,   306,    -1,   161,
+       3,    -1,   141,   203,   304,   204,    -1,   159,   228,   283,
+     296,    -1,   161,   256,   205,   250,   206,    -1,   161,   256,
+     153,   203,   252,   204,   255,   205,   235,   206,    -1,     5,
+      -1,     5,   199,     5,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   325,   325,   338,   339,   340,   341,   344,   347,   348,
-     349,   352,   353,   354,   355,   356,   359,   360,   361,   362,
-     365,   366,   369,   370,   374,   375,   376,   377,   378,   382,
-     383,   384,   385,   386,   387,   390,   392,   400,   406,   410,
-     412,   416,   423,   424,   427,   428,   431,   432,   436,   441,
-     448,   449,   452,   453,   457,   460,   461,   462,   465,   466,
-     469,   470,   471,   472,   473,   474,   475,   476,   477,   478,
-     479,   480,   481,   482,   483,   484,   485,   486,   487,   488,
-     489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
-     499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
-     509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
-     519,   520,   521,   522,   523,   524,   528,   529,   530,   531,
-     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
-     542,   543,   544,   548,   549,   554,   555,   556,   557,   560,
-     561,   564,   568,   574,   575,   576,   579,   583,   592,   596,
-     601,   604,   605,   618,   619,   622,   623,   624,   625,   626,
-     627,   628,   629,   630,   631,   632,   633,   634,   635,   636,
-     637,   638,   639,   640,   641,   642,   643,   644,   645,   646,
-     647,   648,   649,   650,   651,   652,   653,   654,   655,   656,
-     657,   658,   659,   661,   663,   664,   667,   668,   671,   677,
-     683,   684,   687,   692,   699,   700,   703,   704,   708,   709,
-     712,   718,   726,   730,   735,   736,   739,   740,   741,   744,
-     746,   749,   750,   751,   752,   753,   754,   755,   756,   757,
-     758,   759,   762,   763,   766,   767,   768,   769,   770,   771,
-     772,   773,   776,   777,   785,   791,   795,   796,   800,   803,
-     804,   807,   816,   817,   820,   821,   824,   830,   836,   837,
-     840,   841,   844,   854,   861,   867,   871,   872,   875,   876,
-     879,   884,   891,   892,   893,   897,   901,   904,   905,   908,
-     909,   913,   914,   918,   919,   920,   924,   926,   928,   932,
-     933,   934,   935,   943,   945,   947,   952,   954,   959,   960,
-     965,   966,   967,   968,   973,   982,   984,   985,   990,   992,
-     996,   997,  1004,  1005,  1006,  1007,  1008,  1013,  1021,  1022,
-    1025,  1026,  1029,  1036,  1037,  1042,  1043,  1047,  1048,  1049,
-    1052,  1055,  1056,  1057,  1058,  1059,  1060,  1061,  1062,  1063,
-    1064,  1067,  1073,  1075,  1081,  1082
+       0,   328,   328,   342,   343,   344,   345,   348,   351,   352,
+     353,   356,   357,   358,   359,   360,   363,   364,   365,   366,
+     369,   370,   373,   374,   378,   379,   380,   381,   382,   386,
+     387,   388,   389,   390,   391,   394,   396,   404,   410,   414,
+     416,   420,   427,   428,   431,   432,   435,   436,   440,   445,
+     452,   453,   456,   457,   461,   464,   465,   466,   469,   470,
+     473,   474,   475,   476,   477,   478,   479,   480,   481,   482,
+     483,   484,   485,   486,   487,   488,   489,   490,   491,   492,
+     493,   494,   495,   496,   497,   498,   499,   500,   501,   502,
+     503,   504,   505,   506,   507,   508,   509,   510,   511,   512,
+     513,   514,   515,   516,   517,   518,   519,   520,   521,   522,
+     523,   524,   525,   526,   527,   528,   529,   530,   531,   532,
+     533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
+     543,   544,   545,   546,   547,   548,   552,   553,   554,   555,
+     556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
+     566,   567,   568,   569,   570,   571,   572,   573,   574,   578,
+     579,   584,   585,   586,   587,   590,   591,   594,   598,   604,
+     605,   606,   609,   613,   622,   626,   631,   634,   635,   648,
+     649,   652,   653,   654,   655,   656,   657,   658,   659,   660,
+     661,   662,   663,   664,   665,   666,   667,   668,   669,   670,
+     671,   672,   673,   674,   675,   676,   677,   678,   679,   680,
+     681,   682,   683,   684,   685,   686,   687,   688,   689,   691,
+     693,   694,   697,   698,   701,   707,   713,   714,   717,   722,
+     729,   730,   733,   734,   738,   739,   742,   748,   756,   760,
+     765,   766,   769,   770,   771,   774,   776,   779,   780,   781,
+     782,   783,   784,   785,   786,   787,   788,   789,   792,   793,
+     796,   797,   798,   799,   800,   801,   802,   803,   806,   807,
+     815,   821,   825,   826,   830,   833,   834,   837,   846,   847,
+     850,   851,   854,   860,   866,   867,   870,   871,   874,   884,
+     891,   897,   901,   902,   905,   906,   909,   914,   921,   922,
+     923,   927,   931,   934,   935,   938,   939,   943,   944,   948,
+     949,   950,   954,   956,   958,   962,   963,   964,   965,   973,
+     975,   977,   982,   984,   989,   990,   995,   996,   997,   998,
+    1003,  1012,  1014,  1015,  1020,  1022,  1026,  1027,  1034,  1035,
+    1036,  1037,  1038,  1043,  1051,  1052,  1055,  1056,  1059,  1066,
+    1067,  1072,  1073,  1077,  1078,  1079,  1080,  1081,  1085,  1086,
+    1087,  1090,  1093,  1094,  1095,  1096,  1097,  1098,  1099,  1100,
+    1101,  1102,  1105,  1111,  1113,  1119,  1120
 };
 #endif
 
@@ -948,51 +994,56 @@ static const char *const yytname[] =
   "tBYTE", "tBYTECOUNT", "tCALLAS", "tCALLBACK", "tCASE", "tCDECL",
   "tCHAR", "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST", "tCONTEXTHANDLE",
   "tCONTEXTHANDLENOSERIALIZE", "tCONTEXTHANDLESERIALIZE", "tCONTROL",
-  "tCPPQUOTE", "tDEFAULT", "tDEFAULTCOLLELEM", "tDEFAULTVALUE",
-  "tDEFAULTVTABLE", "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME",
-  "tDOUBLE", "tDUAL", "tENDPOINT", "tENTRY", "tENUM", "tERRORSTATUST",
-  "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL", "tFLOAT", "tHANDLE",
-  "tHANDLET", "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING",
-  "tHELPSTRINGCONTEXT", "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID",
-  "tIDEMPOTENT", "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE", "tIMPORT",
-  "tIMPORTLIB", "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC", "tINT",
-  "tINT3264", "tINT64", "tINTERFACE", "tLCID", "tLENGTHIS", "tLIBRARY",
-  "tLOCAL", "tLONG", "tMETHODS", "tMODULE", "tNONBROWSABLE",
-  "tNONCREATABLE", "tNONEXTENSIBLE", "tNULL", "tOBJECT", "tODL",
-  "tOLEAUTOMATION", "tOPTIONAL", "tOUT", "tPASCAL", "tPOINTERDEFAULT",
-  "tPROPERTIES", "tPROPGET", "tPROPPUT", "tPROPPUTREF", "tPTR", "tPUBLIC",
-  "tRANGE", "tREADONLY", "tREF", "tREGISTER", "tREQUESTEDIT",
-  "tRESTRICTED", "tRETVAL", "tSAFEARRAY", "tSHORT", "tSIGNED", "tSIZEIS",
-  "tSIZEOF", "tSMALL", "tSOURCE", "tSTATIC", "tSTDCALL",
-  "tSTRICTCONTEXTHANDLE", "tSTRING", "tSTRUCT", "tSWITCH", "tSWITCHIS",
-  "tSWITCHTYPE", "tTRANSMITAS", "tTRUE", "tTYPEDEF", "tUNION", "tUNIQUE",
-  "tUNSIGNED", "tUUID", "tV1ENUM", "tVARARG", "tVERSION", "tVOID",
-  "tWCHAR", "tWIREMARSHAL", "','", "'?'", "':'", "'|'", "'^'", "'&'",
-  "'<'", "'>'", "'-'", "'+'", "'*'", "'/'", "'%'", "'!'", "'~'",
-  "ADDRESSOF", "NEG", "POS", "PPTR", "CAST", "'.'", "'['", "']'", "';'",
-  "'('", "')'", "'{'", "'}'", "'='", "$accept", "input", "gbl_statements",
-  "imp_statements", "int_statements", "semicolon_opt", "statement",
-  "typedecl", "cppquote", "import_start", "import", "importlib",
-  "libraryhdr", "library_start", "librarydef", "m_args", "arg_list",
-  "args", "arg", "array", "m_attributes", "attributes", "attrib_list",
-  "str_list", "attribute", "uuid_string", "callconv", "cases", "case",
-  "enums", "enum_list", "enum", "enumdef", "m_exprs", "m_expr", "expr",
-  "expr_list_int_const", "expr_int_const", "expr_const", "fields", "field",
-  "ne_union_field", "ne_union_fields", "union_field", "s_field", "funcdef",
-  "declaration", "m_ident", "t_ident", "ident", "base_type", "m_int",
-  "int_std", "coclass", "coclasshdr", "coclassdef", "coclass_ints",
-  "coclass_int", "dispinterface", "dispinterfacehdr", "dispint_props",
-  "dispint_meths", "dispinterfacedef", "inherit", "interface",
-  "interfacehdr", "interfacedef", "interfacedec", "module", "modulehdr",
-  "moduledef", "storage_cls_spec", "function_specifier", "type_qualifier",
-  "m_type_qual_list", "decl_spec", "m_decl_spec_no_type",
+  "tCPPQUOTE", "tDECODE", "tDEFAULT", "tDEFAULTBIND", "tDEFAULTCOLLELEM",
+  "tDEFAULTVALUE", "tDEFAULTVTABLE", "tDISABLECONSISTENCYCHECK",
+  "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME", "tDOUBLE", "tDUAL",
+  "tENABLEALLOCATE", "tENCODE", "tENDPOINT", "tENTRY", "tENUM",
+  "tERRORSTATUST", "tEXPLICITHANDLE", "tEXTERN", "tFALSE", "tFASTCALL",
+  "tFAULTSTATUS", "tFLOAT", "tFORCEALLOCATE", "tHANDLE", "tHANDLET",
+  "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING", "tHELPSTRINGCONTEXT",
+  "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID", "tIDEMPOTENT", "tIGNORE",
+  "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE", "tIMPORT", "tIMPORTLIB",
+  "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC", "tINT", "tINT3264", "tINT64",
+  "tINTERFACE", "tLCID", "tLENGTHIS", "tLIBRARY", "tLICENSED", "tLOCAL",
+  "tLONG", "tMAYBE", "tMESSAGE", "tMETHODS", "tMODULE", "tNOCODE",
+  "tNONBROWSABLE", "tNONCREATABLE", "tNONEXTENSIBLE", "tNOTIFY",
+  "tNOTIFYFLAG", "tNULL", "tOBJECT", "tODL", "tOLEAUTOMATION", "tOPTIMIZE",
+  "tOPTIONAL", "tOUT", "tPARTIALIGNORE", "tPASCAL", "tPOINTERDEFAULT",
+  "tPROGID", "tPROPERTIES", "tPROPGET", "tPROPPUT", "tPROPPUTREF",
+  "tPROXY", "tPTR", "tPUBLIC", "tRANGE", "tREADONLY", "tREF", "tREGISTER",
+  "tREPRESENTAS", "tREQUESTEDIT", "tRESTRICTED", "tRETVAL", "tSAFEARRAY",
+  "tSHORT", "tSIGNED", "tSIZEIS", "tSIZEOF", "tSMALL", "tSOURCE",
+  "tSTATIC", "tSTDCALL", "tSTRICTCONTEXTHANDLE", "tSTRING", "tSTRUCT",
+  "tSWITCH", "tSWITCHIS", "tSWITCHTYPE", "tTHREADING", "tTRANSMITAS",
+  "tTRUE", "tTYPEDEF", "tUIDEFAULT", "tUNION", "tUNIQUE", "tUNSIGNED",
+  "tUSESGETLASTERROR", "tUSERMARSHAL", "tUUID", "tV1ENUM", "tVARARG",
+  "tVERSION", "tVIPROGID", "tVOID", "tWCHAR", "tWIREMARSHAL", "tAPARTMENT",
+  "tNEUTRAL", "tSINGLE", "tFREE", "tBOTH", "','", "'?'", "':'", "'|'",
+  "'^'", "'&'", "'<'", "'>'", "'-'", "'+'", "'*'", "'/'", "'%'", "'!'",
+  "'~'", "ADDRESSOF", "NEG", "POS", "PPTR", "CAST", "'.'", "'['", "']'",
+  "';'", "'('", "')'", "'{'", "'}'", "'='", "$accept", "input",
+  "gbl_statements", "imp_statements", "int_statements", "semicolon_opt",
+  "statement", "typedecl", "cppquote", "import_start", "import",
+  "importlib", "libraryhdr", "library_start", "librarydef", "m_args",
+  "arg_list", "args", "arg", "array", "m_attributes", "attributes",
+  "attrib_list", "str_list", "attribute", "uuid_string", "callconv",
+  "cases", "case", "enums", "enum_list", "enum", "enumdef", "m_exprs",
+  "m_expr", "expr", "expr_list_int_const", "expr_int_const", "expr_const",
+  "fields", "field", "ne_union_field", "ne_union_fields", "union_field",
+  "s_field", "funcdef", "declaration", "m_ident", "t_ident", "ident",
+  "base_type", "m_int", "int_std", "coclass", "coclasshdr", "coclassdef",
+  "coclass_ints", "coclass_int", "dispinterface", "dispinterfacehdr",
+  "dispint_props", "dispint_meths", "dispinterfacedef", "inherit",
+  "interface", "interfacehdr", "interfacedef", "interfacedec", "module",
+  "modulehdr", "moduledef", "storage_cls_spec", "function_specifier",
+  "type_qualifier", "m_type_qual_list", "decl_spec", "m_decl_spec_no_type",
   "decl_spec_no_type", "declarator", "direct_declarator",
   "abstract_declarator", "abstract_declarator_no_direct",
   "m_abstract_declarator", "abstract_direct_declarator", "any_declarator",
   "any_declarator_no_direct", "m_any_declarator", "any_direct_declarator",
   "declarator_list", "m_bitfield", "struct_declarator",
-  "struct_declarator_list", "init_declarator", "pointer_type", "structdef",
-  "type", "typedef", "uniondef", "version", 0
+  "struct_declarator_list", "init_declarator", "threading_type",
+  "pointer_type", "structdef", "type", "typedef", "uniondef", "version", 0
 };
 #endif
 
@@ -1016,50 +1067,56 @@ static const yytype_uint16 yytoknum[] =
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-      44,    63,    58,   124,    94,    38,    60,    62,    45,    43,
-      42,    47,    37,    33,   126,   405,   406,   407,   408,   409,
-      46,    91,    93,    59,    40,    41,   123,   125,    61
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,    44,
+      63,    58,   124,    94,    38,    60,    62,    45,    43,    42,
+      47,    37,    33,   126,   434,   435,   436,   437,   438,    46,
+      91,    93,    59,    40,    41,   123,   125,    61
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   179,   180,   181,   181,   181,   181,   181,   181,   181,
-     181,   182,   182,   182,   182,   182,   182,   182,   182,   182,
-     183,   183,   184,   184,   185,   185,   185,   185,   185,   186,
-     186,   186,   186,   186,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   194,   195,   195,   196,   196,   197,   197,
-     198,   198,   199,   199,   200,   201,   201,   201,   202,   202,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
-     203,   203,   203,   204,   204,   205,   205,   205,   205,   206,
-     206,   207,   207,   208,   208,   208,   209,   209,   210,   210,
-     211,   212,   212,   213,   213,   214,   214,   214,   214,   214,
-     214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
-     214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
-     214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
-     214,   214,   214,   214,   214,   214,   215,   215,   216,   217,
-     218,   218,   219,   219,   220,   220,   221,   221,   222,   222,
-     223,   224,   225,   225,   226,   226,   227,   227,   227,   228,
-     228,   229,   229,   229,   229,   229,   229,   229,   229,   229,
-     229,   229,   230,   230,   231,   231,   231,   231,   231,   231,
-     231,   231,   232,   232,   233,   234,   235,   235,   236,   237,
-     237,   238,   239,   239,   240,   240,   241,   241,   242,   242,
-     243,   243,   244,   245,   245,   245,   246,   246,   247,   247,
-     248,   249,   250,   250,   250,   251,   252,   253,   253,   254,
-     254,   255,   255,   256,   256,   256,   257,   257,   257,   258,
-     258,   258,   258,   259,   259,   259,   260,   260,   261,   261,
-     262,   262,   262,   262,   262,   263,   263,   263,   264,   264,
-     265,   265,   266,   266,   266,   266,   266,   266,   267,   267,
-     268,   268,   269,   270,   270,   271,   271,   272,   272,   272,
-     273,   274,   274,   274,   274,   274,   274,   274,   274,   274,
-     274,   275,   276,   276,   277,   277
+       0,   208,   209,   210,   210,   210,   210,   210,   210,   210,
+     210,   211,   211,   211,   211,   211,   211,   211,   211,   211,
+     212,   212,   213,   213,   214,   214,   214,   214,   214,   215,
+     215,   215,   215,   215,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   223,   224,   224,   225,   225,   226,   226,
+     227,   227,   228,   228,   229,   230,   230,   230,   231,   231,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   232,
+     232,   232,   232,   232,   232,   232,   232,   232,   232,   233,
+     233,   234,   234,   234,   234,   235,   235,   236,   236,   237,
+     237,   237,   238,   238,   239,   239,   240,   241,   241,   242,
+     242,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   244,   244,   245,   246,   247,   247,   248,   248,
+     249,   249,   250,   250,   251,   251,   252,   253,   254,   254,
+     255,   255,   256,   256,   256,   257,   257,   258,   258,   258,
+     258,   258,   258,   258,   258,   258,   258,   258,   259,   259,
+     260,   260,   260,   260,   260,   260,   260,   260,   261,   261,
+     262,   263,   264,   264,   265,   266,   266,   267,   268,   268,
+     269,   269,   270,   270,   271,   271,   272,   272,   273,   274,
+     274,   274,   275,   275,   276,   276,   277,   278,   279,   279,
+     279,   280,   281,   282,   282,   283,   283,   284,   284,   285,
+     285,   285,   286,   286,   286,   287,   287,   287,   287,   288,
+     288,   288,   289,   289,   290,   290,   291,   291,   291,   291,
+     291,   292,   292,   292,   293,   293,   294,   294,   295,   295,
+     295,   295,   295,   295,   296,   296,   297,   297,   298,   299,
+     299,   300,   300,   301,   301,   301,   301,   301,   302,   302,
+     302,   303,   304,   304,   304,   304,   304,   304,   304,   304,
+     304,   304,   305,   306,   306,   307,   307
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1072,34 +1129,37 @@ static const yytype_uint8 yyr2[] =
        3,     4,     0,     1,     1,     3,     1,     3,     3,     2,
        3,     3,     0,     1,     3,     1,     3,     4,     1,     3,
        0,     1,     4,     1,     1,     1,     1,     1,     4,     4,
-       1,     1,     1,     1,     1,     1,     4,     1,     1,     4,
-       1,     4,     4,     1,     1,     4,     4,     4,     4,     4,
-       1,     4,     1,     4,     1,     5,     1,     1,     4,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     1,     1,     1,     6,     1,     1,     1,     1,
-       4,     1,     1,     1,     4,     4,     4,     4,     1,     1,
-       4,     4,     1,     1,     1,     1,     1,     1,     1,     0,
-       2,     4,     3,     0,     2,     1,     1,     3,     3,     1,
-       5,     1,     3,     0,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     5,     3,     3,     3,     3,
+       4,     1,     1,     1,     4,     1,     1,     1,     4,     4,
+       1,     1,     1,     1,     4,     4,     4,     4,     4,     1,
+       4,     1,     1,     4,     1,     5,     1,     1,     4,     4,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     4,     1,     1,     1,     4,     4,
+       1,     1,     1,     1,     1,     6,     1,     4,     1,     1,
+       1,     4,     1,     1,     1,     4,     4,     4,     4,     1,
+       1,     4,     4,     1,     1,     4,     4,     4,     1,     1,
+       1,     1,     1,     1,     1,     0,     2,     4,     3,     0,
+       2,     1,     1,     3,     3,     1,     5,     1,     3,     0,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     5,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     2,     2,     2,     2,     2,     2,
-       3,     3,     5,     5,     4,     3,     1,     3,     1,     1,
-       0,     2,     4,     3,     2,     2,     0,     2,     2,     1,
-       3,     1,     3,     2,     0,     1,     0,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     1,     1,     1,     1,
-       1,     1,     0,     1,     1,     2,     1,     2,     2,     1,
-       1,     1,     2,     2,     2,     5,     0,     2,     2,     2,
-       2,     2,     2,     3,     2,     3,     5,     5,     0,     2,
-       2,     2,     2,     6,     8,     2,     2,     2,     2,     2,
-       2,     5,     1,     1,     1,     1,     1,     0,     2,     2,
-       3,     0,     1,     2,     2,     2,     3,     2,     1,     1,
-       3,     2,     4,     3,     2,     1,     3,     2,     0,     1,
-       3,     2,     1,     3,     4,     3,     2,     1,     3,     2,
-       0,     1,     1,     3,     2,     1,     3,     4,     1,     3,
-       0,     2,     2,     1,     3,     1,     3,     1,     1,     1,
-       5,     1,     1,     1,     1,     2,     1,     2,     1,     2,
-       4,     4,     5,    10,     1,     3
+       2,     2,     2,     2,     2,     2,     3,     3,     5,     5,
+       4,     3,     1,     3,     1,     1,     0,     2,     4,     3,
+       2,     2,     0,     2,     2,     1,     3,     1,     3,     2,
+       0,     1,     0,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     1,     1,     1,     1,     1,     1,     0,     1,
+       1,     2,     1,     2,     2,     1,     1,     1,     2,     2,
+       2,     5,     0,     2,     2,     2,     2,     2,     2,     3,
+       2,     3,     5,     5,     0,     2,     2,     2,     2,     6,
+       8,     2,     2,     2,     2,     2,     2,     5,     1,     1,
+       1,     1,     1,     0,     2,     2,     3,     0,     1,     2,
+       2,     2,     3,     2,     1,     1,     3,     2,     4,     3,
+       2,     1,     3,     2,     0,     1,     3,     2,     1,     3,
+       4,     3,     2,     1,     3,     2,     0,     1,     1,     3,
+       2,     1,     3,     4,     1,     3,     0,     2,     2,     1,
+       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     5,     1,     1,     1,     1,     2,     1,     2,     1,
+       2,     4,     4,     5,    10,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1107,739 +1167,792 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       3,     0,     2,     1,   332,   229,   221,   240,     0,   276,
-       0,     0,   228,   216,   230,   272,   227,   231,   232,     0,
-     275,   234,   241,   239,     0,   232,   274,     0,   232,     0,
-     236,   273,   216,    52,   216,   226,   331,   222,    60,    10,
-       0,    24,    11,    27,    11,     9,     0,   334,     0,   333,
-     223,     0,     0,     7,     0,     0,    22,     0,   258,     5,
-       4,     0,     8,   281,   281,   281,     0,     0,   336,   281,
-       0,   338,   242,   243,     0,   249,   250,   335,   218,     0,
-     233,   238,     0,   260,   261,   237,     0,   235,   224,   337,
-       0,     0,    53,   339,     0,   225,    61,     0,    63,    64,
+       3,     0,     2,     1,   363,   255,   247,   266,     0,   302,
+       0,     0,   254,   242,   256,   298,   253,   257,   258,     0,
+     301,   260,   267,   265,     0,   258,   300,     0,   258,     0,
+     262,   299,   242,    52,   242,   252,   362,   248,    60,    10,
+       0,    24,    11,    27,    11,     9,     0,   365,     0,   364,
+     249,     0,     0,     7,     0,     0,    22,     0,   284,     5,
+       4,     0,     8,   307,   307,   307,     0,     0,   367,   307,
+       0,   369,   268,   269,     0,   275,   276,   366,   244,     0,
+     259,   264,     0,   286,   287,   263,     0,   261,   250,   368,
+       0,     0,    53,   370,     0,   251,    61,     0,    63,    64,
       65,    66,    67,     0,     0,    70,    71,    72,    73,    74,
-      75,     0,    77,    78,     0,    80,     0,     0,    83,    84,
-       0,     0,     0,     0,     0,    90,     0,    92,     0,    94,
-       0,    96,    97,   100,     0,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,     0,   111,   112,   113,   329,   114,
-       0,   116,   327,   117,   118,   119,     0,   121,   122,   123,
-       0,     0,     0,   328,     0,   128,   129,     0,     0,     0,
-      55,   132,    25,     0,     0,     0,     0,     0,   334,   244,
-     251,   262,   270,     0,   336,   338,    26,     6,   246,   267,
-       0,    23,   265,   266,     0,     0,    20,   285,   282,   284,
-     283,   219,   220,   135,   136,   137,   138,   277,     0,     0,
-     289,   325,   288,   213,   334,   336,   281,   338,   279,    28,
-       0,   143,    36,     0,   200,     0,     0,   206,     0,     0,
+      75,    76,    77,    78,    79,     0,    81,    82,    83,     0,
+      85,    86,    87,     0,     0,    90,    91,    92,    93,     0,
+       0,     0,     0,     0,    99,     0,   101,   102,     0,   104,
+       0,   106,   107,   110,     0,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,     0,   125,
+     126,   127,     0,     0,   130,   131,   132,   133,   360,   134,
+       0,   136,   358,     0,   138,   139,   140,     0,   142,   143,
+     144,     0,     0,     0,     0,   149,   359,   150,     0,     0,
+     153,   154,     0,     0,     0,     0,    55,   158,    25,     0,
+       0,     0,     0,     0,   365,   270,   277,   288,   296,     0,
+     367,   369,    26,     6,   272,   293,     0,    23,   291,   292,
+       0,     0,    20,   311,   308,   310,   309,   245,   246,   161,
+     162,   163,   164,   303,     0,     0,   315,   351,   314,   239,
+     365,   367,   307,   369,   305,    28,     0,   169,    36,     0,
+     226,     0,     0,   232,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     179,     0,     0,     0,     0,     0,   179,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    60,    54,    37,     0,
+      17,    18,    19,     0,    15,    13,    12,    16,    22,    39,
+     294,   295,    40,   238,    52,     0,    52,     0,     0,   285,
+      20,     0,     0,     0,   313,     0,   179,    42,   317,   306,
+      35,     0,   171,   172,   175,   371,    52,   344,   372,    52,
+      52,     0,     0,   190,   181,   182,   183,   187,   188,   189,
+     184,   185,     0,   186,     0,     0,     0,     0,     0,     0,
+       0,   224,     0,   222,   225,     0,     0,    58,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   153,     0,     0,   153,     0,     0,
-       0,     0,     0,     0,    60,    54,    37,     0,    17,    18,
-      19,     0,    15,    13,    12,    16,    22,    39,   268,   269,
-      40,   212,    52,     0,    52,     0,     0,   259,    20,     0,
-       0,     0,   287,     0,   153,    42,   291,   280,    35,     0,
-     145,   146,   149,   340,    52,   318,   341,    52,    52,     0,
-       0,   164,   155,   156,   157,   161,   162,   163,   158,   159,
-       0,   160,     0,     0,     0,     0,     0,     0,     0,   198,
-       0,   196,   199,     0,     0,    58,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   151,   154,
-       0,     0,     0,     0,     0,     0,   134,   133,     0,   344,
-       0,     0,    56,    60,     0,    14,    41,    22,     0,   247,
-     252,     0,     0,     0,     0,     0,     0,     0,    22,    21,
-       0,   278,   286,   290,   326,     0,     0,     0,    46,    43,
-      44,     0,   310,   150,   144,     0,   330,     0,   201,     0,
-       0,   342,    53,   207,     0,    62,    68,     0,   188,   187,
-     186,   189,   184,   185,     0,   298,     0,     0,     0,     0,
+     177,   180,     0,     0,     0,     0,     0,     0,     0,     0,
+     353,   354,   355,   356,   357,     0,     0,     0,   160,   159,
+       0,   375,     0,     0,     0,    56,    60,     0,    14,    41,
+      22,     0,   273,   278,     0,     0,     0,     0,     0,     0,
+       0,    22,    21,     0,   304,   312,   316,   352,     0,     0,
+       0,    46,    43,    44,     0,   336,   176,   170,     0,   361,
+       0,   227,     0,     0,   373,    53,   233,     0,    62,    68,
+       0,   214,   213,   212,   215,   210,   211,     0,   324,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
-      76,    79,     0,    81,    82,    85,    86,    87,    88,    89,
-      91,    93,     0,    99,   153,    98,   110,     0,   120,   124,
-     125,   126,   127,     0,   130,   131,    57,     0,   245,   248,
-     254,     0,   253,   256,     0,     0,   211,   257,    20,    22,
-     271,    51,    50,   292,     0,   310,   277,    42,   315,   310,
-     312,   311,    49,   307,   147,   148,     0,   338,   319,   214,
-     205,   204,   298,   195,   277,    42,   302,   298,   299,     0,
-     295,   177,   178,   190,   171,   172,   175,   176,   166,   167,
-       0,   168,   169,   170,   174,   173,   180,   179,   182,   183,
-     181,   191,     0,   197,    59,    95,   152,     0,   345,    22,
-     210,   255,     0,   263,    47,    45,    48,   310,   277,     0,
-     310,     0,   306,    42,   314,   320,   323,     0,   203,     0,
-     215,     0,   298,   277,     0,   310,     0,   294,     0,    42,
-     301,     0,   194,   115,    38,    22,   305,   310,   316,   309,
-     313,     0,     0,   322,     0,   202,   139,   193,   293,   310,
-     303,   297,   300,   192,     0,   165,   264,   308,   317,   321,
-     324,     0,   296,   304,     0,     0,   343,   140,     0,    52,
-      52,   209,   142,     0,   141,   208
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    69,    80,    84,     0,    88,    89,    94,    95,
+      96,    97,    98,   100,   103,     0,   109,   179,   108,   124,
+     128,   129,     0,   137,   141,   145,   146,   148,   147,   151,
+     152,     0,   155,   156,   157,    57,     0,   271,   274,   280,
+       0,   279,   282,     0,     0,   237,   283,    20,    22,   297,
+      51,    50,   318,     0,   336,   303,    42,   341,   336,   338,
+     337,    49,   333,   173,   174,     0,   369,   345,   240,   231,
+     230,   324,   221,   303,    42,   328,   324,   325,     0,   321,
+     203,   204,   216,   197,   198,   201,   202,   192,   193,     0,
+     194,   195,   196,   200,   199,   206,   205,   208,   209,   207,
+     217,     0,   223,    59,   105,   178,     0,   376,    22,   236,
+     281,     0,   289,    47,    45,    48,   336,   303,     0,   336,
+       0,   332,    42,   340,   346,   349,     0,   229,     0,   241,
+       0,   324,   303,     0,   336,     0,   320,     0,    42,   327,
+       0,   220,   135,    38,    22,   331,   336,   342,   335,   339,
+       0,     0,   348,     0,   228,   165,   219,   319,   336,   329,
+     323,   326,   218,     0,   191,   290,   334,   343,   347,   350,
+       0,   322,   330,     0,     0,   374,   166,     0,    52,    52,
+     235,   168,     0,   167,   234
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     2,   173,   279,   192,   369,    40,    41,    42,
-      43,   259,   177,    44,   260,   377,   378,   379,   380,   478,
-     362,    92,   169,   326,   170,   348,   479,   591,   597,   289,
-     290,   291,   214,   337,   338,   319,   320,   321,   323,   294,
-     388,   393,   298,   602,   603,   465,    48,   549,    79,   480,
-      49,    81,    50,   261,    52,   262,   272,   359,    54,    55,
-     274,   364,    56,   195,    57,    58,   263,   264,   182,    61,
-     265,    63,    64,    65,   280,    66,   197,    67,   211,   212,
-     498,   556,   499,   500,   481,   541,   482,   483,   296,   573,
-     546,   547,   213,   171,   215,    69,    70,   217,   350
+      -1,     1,     2,   199,   311,   218,   412,    40,    41,    42,
+      43,   291,   203,    44,   292,   420,   421,   422,   423,   527,
+     405,    92,   195,   358,   196,   390,   528,   640,   646,   321,
+     322,   323,   240,   369,   370,   351,   352,   353,   355,   326,
+     431,   436,   330,   651,   652,   514,    48,   598,    79,   529,
+      49,    81,    50,   293,    52,   294,   304,   402,    54,    55,
+     306,   407,    56,   221,    57,    58,   295,   296,   208,    61,
+     297,    63,    64,    65,   312,    66,   223,    67,   237,   238,
+     547,   605,   548,   549,   530,   590,   531,   532,   328,   622,
+     595,   596,   239,   385,   197,   241,    69,    70,   243,   392
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -460
+#define YYPACT_NINF -511
 static const yytype_int16 yypact[] =
 {
-    -460,    69,  1270,  -460,  -460,  -460,  -460,  -460,   165,  -460,
-     -81,   217,  -460,   260,  -460,  -460,  -460,  -460,    -6,    78,
-    -460,  -460,  -460,  -460,   272,    -6,  -460,   -62,    -6,   356,
-    -460,  -460,   284,   -54,   287,   356,  -460,  -460,  2320,  -460,
-     -49,  -460,  -460,  -460,  -460,  -460,  2063,   -25,   -19,  -460,
-    -460,   -14,   -13,  -460,    12,     1,    19,    22,    49,  -460,
-    -460,    30,  -460,    -8,    -8,    -8,   398,  2211,    35,    -8,
-      37,    40,  -460,  -460,   210,  -460,  -460,    48,  -460,    66,
-    -460,  -460,    43,  -460,  -460,  -460,  2211,  -460,  -460,    48,
-      68,  2141,  -460,   -78,   -69,  -460,  -460,    75,  -460,  -460,
-    -460,  -460,  -460,    85,    91,  -460,  -460,  -460,  -460,  -460,
-    -460,    94,  -460,  -460,    98,  -460,   108,   138,  -460,  -460,
-     144,   149,   151,   155,   157,  -460,   158,  -460,   159,  -460,
-     160,  -460,  -460,   161,   162,  -460,  -460,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,   169,  -460,  -460,  -460,  -460,  -460,
-     170,  -460,  -460,  -460,  -460,  -460,   171,  -460,  -460,  -460,
-     176,   179,   181,  -460,   182,  -460,  -460,   184,   186,   -75,
-    -460,  -460,  -460,  1175,   461,   258,   289,   119,   166,  -460,
-    -460,  -460,  -460,   398,   190,   202,  -460,  -460,  -460,  -460,
-      -3,  -460,  -460,  -460,   295,   204,  -460,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,   398,   398,
-    -460,   200,   -34,  -460,  -460,  -460,    -8,  -460,  -460,  -460,
-     209,   324,  -460,   211,  -460,   398,   215,  -460,   377,   324,
-    1000,  1000,   382,   383,  1000,  1000,   384,   385,  1000,   386,
-    1000,  1000,   329,  1000,  1000,   -45,  1000,  1000,  1000,  2211,
-    2211,   130,   394,  2211,  2320,   236,  -460,   237,  -460,  -460,
-    -460,   241,  -460,  -460,  -460,  -460,    19,  -460,  -460,  -460,
-    -460,  -460,   -98,   263,   -67,   243,   242,  -460,  -460,   556,
-     316,   246,  -460,  1000,  1039,  1633,  -460,  -460,  -460,   248,
-     270,  -460,   244,  -460,   -93,  -460,   283,   -54,   -88,   264,
-     266,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
-     261,  -460,  1000,  1000,  1000,  1000,  1000,  1000,   936,  1882,
-     -84,  -460,  1882,   267,   273,  -460,   -80,   274,   275,   278,
-     279,   281,   282,   285,  1638,   435,   286,   -74,  -460,  1882,
-     291,   297,   -70,  1696,   292,   293,  -460,  -460,   294,   288,
-     296,   302,  -460,  2320,   454,  -460,  -460,    19,     4,  -460,
-    -460,   312,  2141,   301,   841,   303,   397,   651,    19,  -460,
-    2141,  -460,  -460,  -460,  -460,   245,   309,   307,   334,  -460,
-    -460,  2141,   208,  -460,   324,  1000,  -460,  2141,  -460,   398,
-     310,  -460,   313,  -460,   315,  -460,  -460,  2141,    11,    11,
-      11,    11,    11,    11,  1719,   140,  1000,  1000,   486,  1000,
-    1000,  1000,  1000,  1000,  1000,  1000,  1000,  1000,  1000,  1000,
-    1000,  1000,  1000,  1000,  1000,  1000,   488,  1000,  1000,  -460,
-    -460,  -460,   487,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
-    -460,  -460,   321,  -460,  1000,  -460,  -460,  1000,  -460,  -460,
-    -460,  -460,  -460,   492,  -460,  -460,  -460,   323,  -460,  -460,
-    -460,   398,  -460,  -460,  2141,   326,  -460,  -460,  -460,    19,
-    -460,  -460,  -460,  -460,  1555,   208,  -460,  1382,  -460,   208,
-    -460,  -460,  -460,   -32,  -460,  -460,   208,   333,  -460,   324,
-    -460,  -460,   140,  -460,  -460,  1460,  -460,   140,  -460,   327,
-     -24,   146,   146,  -460,   958,   958,    28,    28,  1769,  1846,
-    1823,  1900,  1919,  1951,    28,    28,    96,    96,    11,    11,
-      11,  -460,  1801,  -460,  -460,  -460,  -460,   332,  -460,    19,
-    -460,  -460,   746,  -460,  -460,  -460,  -460,   299,  -460,   335,
-     208,   336,  -460,  1633,  -460,   360,  -460,   -83,  -460,   337,
-    -460,   339,    -4,  -460,   341,   208,   343,  -460,  1000,  1633,
-    -460,  1000,  -460,  -460,  -460,    19,  -460,   299,  -460,  -460,
-    -460,   345,  1000,  -460,   208,  -460,  -460,  -460,  -460,   299,
-    -460,  -460,  -460,    11,   348,  1882,  -460,  -460,  -460,  -460,
-    -460,   -12,  -460,  -460,  1000,   373,  -460,  -460,   374,   -48,
-     -48,  -460,  -460,   358,  -460,  -460
+    -511,    65,  1251,  -511,  -511,  -511,  -511,  -511,    54,  -511,
+    -131,   131,  -511,   176,  -511,  -511,  -511,  -511,    21,   167,
+    -511,  -511,  -511,  -511,   223,    21,  -511,   -37,    21,    36,
+    -511,  -511,   228,   -62,   238,    36,  -511,  -511,  2477,  -511,
+     -41,  -511,  -511,  -511,  -511,  -511,  2161,   -25,   -21,  -511,
+    -511,   -19,   -18,  -511,   -17,   -15,    -9,    -7,    29,  -511,
+    -511,    15,  -511,    -6,    -6,    -6,   428,  2327,    13,    -6,
+      22,    26,  -511,  -511,   229,  -511,  -511,    41,  -511,    50,
+    -511,  -511,    71,  -511,  -511,  -511,  2327,  -511,  -511,    41,
+      70,  2233,  -511,  -115,  -109,  -511,  -511,    82,  -511,  -511,
+    -511,  -511,  -511,    85,    87,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,    91,  -511,  -511,  -511,    93,
+    -511,  -511,  -511,    95,    96,  -511,  -511,  -511,  -511,    97,
+      98,   104,   109,   113,  -511,   115,  -511,  -511,   117,  -511,
+     118,  -511,  -511,   121,   123,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,   133,  -511,
+    -511,  -511,   134,   136,  -511,  -511,  -511,  -511,  -511,  -511,
+     137,  -511,  -511,   138,  -511,  -511,  -511,   141,  -511,  -511,
+    -511,   151,   152,   156,   159,  -511,  -511,  -511,   160,   163,
+    -511,  -511,   165,   168,   169,  -124,  -511,  -511,  -511,  1124,
+     466,   378,   240,   177,   183,  -511,  -511,  -511,  -511,   428,
+     184,   185,  -511,  -511,  -511,  -511,   -44,  -511,  -511,  -511,
+     247,   186,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,   428,   428,  -511,   181,  -130,  -511,
+    -511,  -511,    -6,  -511,  -511,  -511,   188,   276,  -511,   190,
+    -511,   428,   192,  -511,   388,   276,   324,   324,   389,   390,
+     324,   324,   391,   393,   324,   394,   324,   324,   328,   324,
+     324,   398,   -86,   399,   324,  2327,   324,   324,  2327,   202,
+    2327,  2327,    84,   404,   409,  2327,  2477,   218,  -511,   217,
+    -511,  -511,  -511,   219,  -511,  -511,  -511,  -511,    -9,  -511,
+    -511,  -511,  -511,  -511,   -77,   241,   -79,   222,   221,  -511,
+    -511,   580,   300,   224,  -511,   324,   906,  1670,  -511,  -511,
+    -511,   227,   248,  -511,   230,  -511,   -59,  -511,   250,   -62,
+     -42,   231,   232,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,   235,  -511,   324,   324,   324,   324,   324,   324,
+     981,  1957,  -126,  -511,  1957,   236,   237,  -511,  -120,   239,
+     242,   244,   246,   249,   251,   252,  1668,   431,   253,  -111,
+    -511,  1957,   254,   255,   256,   263,   258,   -94,  1740,   259,
+    -511,  -511,  -511,  -511,  -511,   260,   261,   264,  -511,  -511,
+     267,   245,   268,   270,   273,  -511,  2477,   443,  -511,  -511,
+      -9,     9,  -511,  -511,   271,  2233,   265,   867,   272,   365,
+     681,    -9,  -511,  2233,  -511,  -511,  -511,  -511,    94,   279,
+     280,   306,  -511,  -511,  2233,   595,  -511,   276,   324,  -511,
+    2233,  -511,   428,   283,  -511,   286,  -511,   288,  -511,  -511,
+    2233,     8,     8,     8,     8,     8,     8,  1765,   566,   324,
+     324,   488,   324,   324,   324,   324,   324,   324,   324,   324,
+     324,   324,   324,   324,   324,   324,   324,   324,   324,   489,
+     324,   324,  -511,  -511,  -511,   485,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,   290,  -511,   324,  -511,  -511,
+    -511,  -511,   324,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,   490,  -511,  -511,  -511,  -511,   292,  -511,  -511,  -511,
+     428,  -511,  -511,  2233,   298,  -511,  -511,  -511,    -9,  -511,
+    -511,  -511,  -511,  1576,   595,  -511,  1378,  -511,   595,  -511,
+    -511,  -511,   -95,  -511,  -511,   595,   299,  -511,   276,  -511,
+    -511,   566,  -511,  -511,  1504,  -511,   566,  -511,   303,   -64,
+     158,   158,  -511,  1047,  1047,   505,   505,  1811,  1919,  1882,
+    1900,  1990,  1973,   505,   505,   161,   161,     8,     8,     8,
+    -511,  1860,  -511,  -511,  -511,  -511,   311,  -511,    -9,  -511,
+    -511,   795,  -511,  -511,  -511,  -511,   153,  -511,   318,   595,
+     322,  -511,  1670,  -511,   321,  -511,  -123,  -511,   305,  -511,
+     325,    45,  -511,   326,   595,   329,  -511,   324,  1670,  -511,
+     324,  -511,  -511,  -511,    -9,  -511,   153,  -511,  -511,  -511,
+     331,   324,  -511,   595,  -511,  -511,  -511,  -511,   153,  -511,
+    -511,  -511,     8,   333,  1957,  -511,  -511,  -511,  -511,  -511,
+      10,  -511,  -511,   324,   347,  -511,  -511,   358,   -76,   -76,
+    -511,  -511,   338,  -511,  -511
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -460,  -460,  -460,   464,  -259,  -255,    20,  -460,  -460,  -460,
-     167,  -460,  -460,  -460,   533,  -424,  -460,  -460,    63,  -203,
-     -10,    -2,  -460,  -460,  -226,  -460,   -65,  -460,  -460,  -460,
-    -460,   156,     2,   298,  -260,  -184,  -460,  -228,  -221,  -460,
-    -460,  -460,  -460,   -61,  -189,  -460,   180,  -460,   121,   -63,
-    -460,   124,    87,    36,  -460,   545,  -460,  -460,   506,  -460,
-    -460,  -460,  -460,  -460,   -26,  -460,   551,     3,  -460,  -460,
-     552,  -460,  -460,  -266,  -402,   -40,   -20,   -33,  -192,  -460,
-    -460,  -460,  -438,  -460,  -459,  -460,  -127,  -460,  -460,  -460,
-     -15,  -460,   372,   317,     6,   -46,  -460,     0,  -460
+    -511,  -511,  -511,   499,  -292,  -289,    19,  -511,  -511,  -511,
+     135,  -511,  -511,  -511,   543,  -494,  -511,  -511,    23,  -227,
+     -20,    -2,  -511,  -511,  -259,  -511,   -65,  -511,  -511,  -511,
+    -511,   120,     2,   274,  -276,  -196,  -511,  -254,  -246,  -511,
+    -511,  -511,  -511,  -100,  -217,  -511,   146,  -511,   128,   -63,
+    -511,    81,   130,    40,  -511,   552,  -511,  -511,   511,  -511,
+    -511,  -511,  -511,  -511,    -3,  -511,   556,     3,  -511,  -511,
+     558,  -511,  -511,  -293,  -398,   -40,   -30,   -39,  -218,  -511,
+    -511,  -511,  -510,  -511,  -506,  -511,  -461,  -511,  -511,  -511,
+     -58,  -511,   357,  -511,   295,     6,   -45,  -511,     0,  -511
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -218
+#define YYTABLE_NINF -244
 static const yytype_int16 yytable[] =
 {
-      46,   209,    71,   210,    47,    60,   183,   328,    68,   286,
-     331,   356,   333,   327,   371,   336,   281,   282,   341,   367,
-     181,   216,    39,    91,   376,   594,   408,   545,   352,   361,
-     198,   198,   198,   295,   203,     9,   198,   595,    51,     9,
-     223,   406,   407,   408,   199,   200,   185,   322,   178,   218,
-     322,   225,   184,   539,   551,    15,  -217,   334,    11,   557,
-     339,   204,   374,   339,   343,   226,   428,   574,   148,     3,
-     432,   554,   152,    38,   537,   254,   444,    20,    38,   357,
-     444,    80,   179,    38,   386,   363,    82,    24,   372,   391,
-     575,   429,   552,    74,    24,   433,   163,   255,  -217,   322,
-     339,   445,   458,   205,    38,   448,   273,   227,   390,   394,
-      26,   408,    86,   470,   578,   545,    88,    38,   209,   571,
-     210,    31,    95,    38,   172,   601,   206,   456,   398,   399,
-     400,   401,   402,   403,   404,   584,   567,   284,   346,   284,
-     285,   347,   543,   209,   209,   210,   210,   284,   -29,    85,
-     559,   579,    87,    90,   186,    94,   494,   485,   292,   187,
-     209,   408,   210,   188,   275,   596,   300,   284,    72,    73,
-     495,    46,    46,    71,    71,    47,    47,   190,   203,    68,
-      68,   426,   427,   198,   526,   189,   421,   422,   423,   424,
-     425,   401,   191,   258,   258,   193,   287,   488,   426,   427,
-     523,   194,   496,   344,   345,   204,   196,   351,   -30,   532,
-     219,   201,   202,   -31,   533,   209,   222,   210,   220,   527,
-      75,    76,   501,   502,  -217,   504,   505,   506,   507,   508,
-     509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
-     519,   520,   221,   522,   224,   382,   203,   205,   301,   228,
-     302,   303,   304,   305,   306,   307,   423,   424,   425,   229,
-     339,   267,   358,    77,    78,   230,   426,   427,   231,   530,
-     206,   371,   232,   204,   564,    83,    84,   370,   405,    71,
-     544,    47,   233,   381,   387,    68,   371,    89,    78,   496,
-      93,    78,   268,   269,   496,   270,   392,   560,   276,   277,
-     494,   371,   201,   202,   421,   422,   423,   424,   425,   308,
-     586,   284,   234,   371,   495,   205,   426,   427,   235,   201,
-     202,   292,   461,   236,   209,   237,   210,   201,   202,   238,
-     183,   239,   240,   241,   242,   243,   244,   203,   206,   -32,
-     497,   475,     9,   245,   246,   247,   309,   486,   536,   496,
-     248,   589,   542,   249,   203,   250,   251,   492,   252,     9,
-     253,   459,   464,   -33,   204,   370,   598,    71,   476,    47,
-     185,   310,   178,    68,   583,   -34,   184,   585,   283,   284,
-     278,   204,   477,   311,   288,   299,   293,   487,   322,   297,
-     324,   325,   329,   330,   332,     7,   209,   335,   210,   349,
-     312,   201,   202,   313,   314,   315,   205,   353,   316,   317,
-     566,   354,   540,   569,   355,   360,   365,   471,   366,   318,
-     384,   373,   385,   205,   183,   383,   550,   497,   581,   206,
-     555,    18,   497,   389,   382,   397,   203,   382,   442,   395,
-     587,   396,   430,    21,    22,    23,   206,   447,   431,   434,
-     435,    25,   592,   436,   437,   382,   438,   439,   453,   476,
-     440,   443,   457,   204,   460,     4,   446,   450,   451,   452,
-     284,   454,   381,   477,   462,   381,   207,   455,    19,    28,
-     467,   472,   473,    30,   474,   489,   490,   497,   491,   503,
-     208,   521,     5,   381,     6,   524,   525,   528,   529,   531,
-       7,     8,   558,   382,     9,   205,   548,   563,   174,    10,
-     568,   570,   572,   576,   577,    11,   580,    12,   582,   382,
-     588,    13,    14,   593,    15,   599,   600,    16,   206,    17,
-     370,   605,    71,   468,    47,    45,    18,   535,    68,   604,
-     484,   381,    19,   257,   466,   342,    20,    53,    21,    22,
-      23,    24,   180,    59,    62,   271,    25,   381,   207,   590,
-       4,     0,   340,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   208,     0,     0,     0,     0,     0,     0,    26,
-       0,     0,     0,    27,    28,    29,     0,     5,    30,     6,
-      31,     0,     0,     0,    32,     7,     0,     0,     0,     9,
-      33,    34,     0,    35,    10,     0,     0,     0,    36,    37,
-       0,     0,    12,     0,     0,     0,    13,    14,     0,    15,
-       0,     0,    16,     0,    17,     0,     0,     0,     0,     0,
-       0,    18,    38,     0,     0,     0,     0,    19,   266,     0,
-       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
-       0,    25,     0,     0,     0,     4,     0,     0,     0,     0,
+      46,   235,    71,   236,    47,    60,   209,   360,    68,   399,
+     363,   318,   365,    91,   359,   368,   313,   314,   410,   414,
+     375,    39,   242,   451,   224,   224,   224,   395,   404,   594,
+     224,   600,   588,   327,   225,   226,   606,     9,  -243,   244,
+     419,   249,    51,   207,   252,   168,   211,   643,   204,   172,
+     603,   251,   210,   471,    24,   286,   623,    72,    73,   475,
+     644,   354,    15,   585,   354,     3,    11,   591,   487,   417,
+     316,   366,    74,   317,   371,     7,   186,   287,   472,   624,
+     371,   378,   305,   229,   476,   487,   205,    20,     9,   406,
+    -243,   627,   388,   488,   415,   389,   253,   333,   620,   334,
+     335,   336,   337,   338,   339,   316,    85,    24,   592,    87,
+     494,   507,   433,   437,   633,   230,    80,   594,    18,   354,
+     371,    38,   519,    38,    38,   615,   650,   586,   618,   400,
+      26,    21,    22,    23,    75,    76,   316,   505,    38,   608,
+      25,    38,    31,   630,   235,   601,   236,   429,   441,   442,
+     443,   444,   445,   446,   447,   636,   227,   228,    38,    88,
+      90,   198,    94,   340,   434,    95,    86,   641,   231,   235,
+     235,   236,   236,   451,   534,    82,   451,   -29,    28,    77,
+      78,   212,    30,   213,   324,   215,   235,   214,   236,   616,
+     216,   229,   332,   217,   232,   219,     9,    46,    46,    71,
+      71,    47,    47,   224,   628,    68,    68,   469,   470,   341,
+     220,   575,   319,   307,   537,   -30,   645,   572,   290,   290,
+     222,   545,   444,   230,   245,   581,    83,    84,   -31,   582,
+     376,    89,    78,   379,   543,   386,   387,   246,   576,   342,
+     394,    93,    78,   300,   301,   316,  -243,   235,   544,   236,
+     308,   309,   343,   550,   551,   247,   553,   554,   555,   556,
+     557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+     567,   568,   569,   248,   571,   250,   231,   425,   344,   227,
+     228,   345,   346,   347,   401,   254,   348,   349,   255,   613,
+     256,   371,   579,   414,   257,   520,   258,   350,   259,   260,
+     261,   262,   232,   227,   228,   593,   430,   263,   414,   413,
+     448,    71,   264,    47,   545,   424,   265,    68,   266,   545,
+     267,   268,   609,   414,   269,   635,   270,   333,   435,   334,
+     335,   336,   337,   338,   339,   414,   271,   272,   229,   273,
+     274,   275,   525,     9,   276,   464,   465,   466,   467,   468,
+     466,   467,   468,   316,   277,   278,   526,   469,   470,   279,
+     469,   470,   280,   281,   324,   510,   282,   235,   283,   236,
+     230,   284,   285,   209,   545,   638,   380,   381,   382,   383,
+     384,   299,   302,   546,   524,   -32,   -33,   -34,   315,   647,
+     535,   310,   320,   340,   325,   329,   331,   356,   357,   361,
+     541,   362,   364,   367,   508,   513,   372,   374,   413,   391,
+      71,   632,    47,   211,   634,   204,    68,   393,   396,   210,
+     397,   398,   403,   231,   408,   354,   409,   427,   416,   432,
+     536,   227,   228,   426,   485,   438,   439,   428,   440,   341,
+     473,   474,   492,   477,   501,   235,   478,   236,   479,   232,
+     480,   506,   509,   481,    19,   482,   483,   486,   489,   490,
+     491,   589,   493,   496,   497,   498,   229,   511,   499,   342,
+       4,   500,   502,   209,   503,   599,   546,   504,   516,   604,
+     521,   546,   343,   425,   522,   523,   425,   538,   539,   233,
+     540,   552,   570,   573,   574,   577,   578,     5,   230,     6,
+     580,   597,   621,   234,   425,     7,     8,   607,   344,     9,
+     625,   345,   346,   347,    10,   612,   348,   349,   449,   450,
+     451,   424,   617,    11,   424,    12,   619,   350,   648,   626,
+     629,    13,    14,   631,    15,   637,   546,   642,    16,   649,
+     654,    17,   424,   200,   517,    45,   584,   533,    18,   653,
+     377,   231,   425,   515,    53,    19,   289,   206,    59,    20,
+      62,    21,    22,    23,    24,   639,   303,   373,   425,     0,
+      25,     0,     0,     0,     0,     0,     0,   232,     0,   413,
+       0,    71,     0,    47,     4,     0,     0,    68,     0,     0,
+     424,     0,     0,     0,     0,     0,     0,     0,   227,   228,
+       0,     0,    26,     0,   229,     0,   424,    27,    28,    29,
+       0,     5,    30,     6,    31,     0,     0,   233,    32,     7,
+       0,     0,     0,     9,     0,    33,     0,    34,    10,    35,
+       0,   234,     0,   229,     0,     0,   230,    36,    37,    12,
+       0,     0,     0,     0,     0,    13,    14,     0,    15,     0,
+       0,     0,    16,     0,     0,    17,     0,     0,     0,     0,
+       0,     0,    18,     0,     0,   230,    38,     0,     0,    19,
+       0,     0,   298,    20,     0,    21,    22,    23,     0,     0,
+       0,     0,     0,     0,    25,     4,     0,     0,     0,   231,
+       0,     0,   464,   465,   466,   467,   468,     0,     0,     0,
+       0,     0,     0,     0,   469,   470,     0,     0,     0,     0,
+       0,     0,     5,     0,     6,   232,    26,     0,   231,     0,
+       7,    27,    28,    29,     9,     0,    30,     0,    31,    10,
+       0,     0,    32,     0,     0,     0,     0,     0,     0,    33,
+      12,    34,     0,    35,   232,     0,    13,    14,     0,    15,
+       0,    36,    37,    16,     0,   543,    17,     0,     0,     0,
+       0,     0,     0,    18,     0,     0,   316,     0,     0,   544,
+      19,     0,     0,     0,    20,     0,    21,    22,    23,     0,
+      38,     0,     0,     0,   525,    25,   411,     0,     0,     0,
+       0,     0,     0,     0,     0,   316,     0,     0,   526,     4,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    26,     0,     0,     0,    27,    28,
-      29,     0,     5,    30,     6,    31,     0,     0,     0,    32,
-       7,     0,     0,     0,     9,    33,    34,     0,    35,    10,
-       0,     0,     0,    36,    37,     0,     0,    12,     0,     0,
-       0,    13,    14,     0,    15,     0,     0,    16,     0,    17,
-       0,     0,     0,     0,     0,     0,    18,    38,     0,     0,
-       0,     0,    19,   368,     0,     0,    20,     0,    21,    22,
-      23,     0,     0,     0,     0,     0,    25,     0,     0,     0,
-       4,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-       0,     0,     0,    27,    28,    29,     0,     5,    30,     6,
-      31,     0,     0,     0,    32,     7,     0,     0,     0,     9,
-      33,    34,     0,    35,    10,     0,     0,     0,    36,    37,
-       0,     0,    12,     0,     0,     0,    13,    14,     0,    15,
-       0,     0,    16,     0,    17,     0,     0,     0,     0,     0,
-       0,    18,    38,     0,     0,     0,     0,    19,   469,     0,
-       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
-       0,    25,     0,     0,     0,     4,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    26,     0,     0,     0,    27,    28,
+       0,     0,     0,     0,     0,     0,     0,    26,     0,     0,
+       0,     0,    27,    28,    29,     0,     5,    30,     6,    31,
+       0,     0,     0,    32,     7,     0,     0,     0,     9,     0,
+      33,     0,    34,    10,    35,     0,     0,     0,     0,     0,
+       0,     0,    36,    37,    12,     0,     0,     0,     0,     0,
+      13,    14,     0,    15,     0,     0,     0,    16,     0,     0,
+      17,     4,     0,     0,     0,     0,     0,    18,     0,     0,
+       0,    38,     0,     0,    19,     0,     0,   518,    20,     0,
+      21,    22,    23,     0,     0,     0,     0,     0,     5,    25,
+       6,     0,     0,     0,     0,     0,     7,     0,     0,   333,
+       9,   334,   335,   336,   337,   338,   339,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    12,     0,     0,     0,
+       0,    26,    13,    14,     0,    15,    27,    28,    29,    16,
+       0,    30,    17,    31,     0,     0,     0,    32,     0,    18,
+       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
+      20,     0,    21,    22,    23,     0,    36,    37,     0,     0,
+       0,    25,     0,     0,     0,   340,     0,     0,     0,     0,
+       0,     0,     0,     0,   333,     4,   334,   335,   336,   337,
+     338,   339,     0,     0,     0,    38,     0,     0,     0,     0,
+       0,   614,     0,    26,     0,     0,     0,     0,    27,    28,
       29,     0,     5,    30,     6,    31,     0,     0,     0,    32,
-       7,     0,     0,     0,     9,    33,    34,     0,    35,     0,
-       0,     0,     0,    36,    37,     0,     0,    12,     0,     0,
-       0,    13,    14,     0,    15,     0,     0,    16,     0,    17,
-       0,     0,     0,     0,     0,     0,    18,    38,     0,     0,
-       0,     0,     0,   565,     0,     0,    20,     0,    21,    22,
-      23,     0,     0,     0,     0,     0,    25,     0,     0,   301,
-       4,   302,   303,   304,   305,   306,   307,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-       0,     0,     0,    27,    28,    29,     0,     5,    30,     6,
-      31,   406,   407,   408,    32,     7,   411,   412,     0,     9,
-       0,    34,     0,    35,     0,     0,     0,     0,    36,    37,
-       0,     0,    12,     0,     0,     0,    13,    14,     0,    15,
-     308,     0,    16,   301,    17,   302,   303,   304,   305,   306,
-     307,    18,    38,     0,     0,     0,     0,     0,   463,     0,
-       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
-       0,    25,     0,     0,     0,     0,     0,   309,     0,     0,
-       0,     0,   301,     0,   302,   303,   304,   305,   306,   307,
-       0,     0,     0,     0,    26,     0,     0,     0,    27,    28,
-      29,     0,   310,    30,   308,    31,     0,     0,     0,    32,
-       0,     0,     0,     0,   311,     0,    34,     0,    35,     0,
-       0,     0,     0,    36,    37,     0,     0,     0,     0,     0,
-       0,   312,     0,     0,   313,   314,   315,     0,     0,   316,
-     317,   309,     0,   308,     0,     0,     0,     0,     0,     0,
-     318,     0,     0,     0,   419,   420,   421,   422,   423,   424,
-     425,     0,     0,     0,     0,     0,   310,     0,   426,   427,
-       0,     0,     0,     0,     0,     0,     0,     0,   311,     0,
-     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   312,     0,     0,   313,   314,
-     315,     0,     0,   316,   317,   310,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     0,     0,   311,     0,     4,
-       0,     0,     0,     0,     0,     0,     0,   256,     0,     0,
-       0,     0,     0,     0,   312,     0,     0,   313,   314,   375,
-       0,     0,   316,   317,     0,     0,     5,     0,     6,     0,
-       0,     0,     0,   318,     7,     8,     0,     0,     9,     0,
-       0,     0,     0,    10,     0,     0,     0,     0,     0,    11,
-       0,    12,     0,     0,     0,    13,    14,     0,    15,     0,
-       0,    16,     0,    17,     0,     0,     0,     0,     0,     0,
-      18,     0,     0,     0,     0,     0,    19,   257,     0,     0,
-      20,     0,    21,    22,    23,    24,     0,     0,     0,     0,
-      25,     0,     0,     0,     4,     0,     0,     0,     0,     0,
+       7,   341,     0,     0,     9,     0,     0,     0,    34,     0,
+      35,     0,     0,     0,     0,     0,     0,     0,    36,    37,
+      12,     0,     0,     0,     0,     0,    13,    14,     0,    15,
+     340,   342,     0,    16,     0,     0,    17,     0,     0,     0,
+     449,   450,   451,    18,   343,   454,   455,    38,     0,     0,
+       0,     0,     0,   512,    20,     0,    21,    22,    23,     0,
+       0,     0,     0,     0,     0,    25,     0,     0,     0,     0,
+     344,     0,     0,   345,   346,   418,   341,     0,   348,   349,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   350,
+       0,     0,     0,     0,     0,     0,     0,    26,     0,     0,
+       0,     0,    27,    28,    29,     0,   342,    30,     4,    31,
+       0,     0,     0,    32,     0,     0,   288,     0,     0,   343,
+       0,     0,    34,     0,    35,     0,     0,     0,     0,     0,
+       0,     0,    36,    37,     0,     5,     0,     6,     0,     0,
+       0,     0,     0,     7,     8,   344,     0,     9,   345,   346,
+     347,     0,    10,   348,   349,     0,     0,     0,     0,     0,
+       0,    11,     0,    12,   350,     0,     0,     0,     0,    13,
+      14,     0,    15,     0,     0,     0,    16,     0,     0,    17,
+       0,     0,     0,     0,     0,     0,    18,     0,     0,     0,
+       0,     0,     0,    19,   289,     0,     0,    20,     0,    21,
+      22,    23,    24,     0,     0,     0,     0,     0,    25,     0,
+       0,     0,   462,   463,   464,   465,   466,   467,   468,     0,
+       0,     0,     0,     0,     0,     0,   469,   470,     0,     0,
+       0,     0,     0,     0,     0,     4,     0,     0,     0,     0,
+      26,     0,     0,     0,     0,    27,    28,    29,     0,     0,
+      30,     0,    31,     0,     0,     0,    32,     0,     0,     0,
+       0,     0,     5,    33,     6,    34,     0,    35,     0,     0,
+       7,     8,     0,     0,     9,    36,    37,     0,     0,    10,
+       0,     0,     0,     0,     0,     0,     0,     0,    11,     0,
+      12,     0,     0,     0,     0,     0,    13,    14,     0,    15,
+       0,     0,     0,    16,    38,     0,    17,     0,     0,     0,
+       0,     0,     0,    18,     0,     0,     0,     0,     0,     0,
+      19,     0,     0,     0,    20,     0,    21,    22,    23,    24,
+       0,     0,     0,     0,     0,    25,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    26,     0,     0,     0,    27,    28,    29,
-       0,     5,    30,     6,    31,     0,     0,     0,    32,     7,
-       8,     0,     0,     9,    33,    34,     0,    35,    10,     0,
-       0,     0,    36,    37,    11,     0,    12,     0,     0,     0,
-      13,    14,     0,    15,     0,     0,    16,     0,    17,     0,
-       0,     0,     0,     0,     0,    18,    38,     0,     0,     0,
-       0,    19,     0,     0,     0,    20,     0,    21,    22,    23,
-      24,     0,     0,     0,     0,    25,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     4,     0,    26,     0,
+       0,     0,     4,     0,     0,     0,     0,    26,     0,     0,
        0,     0,    27,    28,    29,     0,     0,    30,     0,    31,
-       0,     0,     0,    32,     0,     0,     0,     0,     0,    33,
-      34,     0,    35,     5,     0,     6,     0,    36,    37,     0,
-     203,     7,     0,     0,     0,     9,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,     0,
-       0,    38,    13,    14,     0,    15,     0,   204,    16,     0,
-      17,     0,     0,     0,     0,     0,     0,    18,     0,     0,
-       0,     0,     0,     0,     4,     0,     0,    20,     0,    21,
-      22,    23,     0,     0,     0,     0,     0,    25,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   205,
-       0,     5,     0,     6,     0,     0,     0,     0,   203,     7,
-      26,     0,     0,     9,    27,    28,    29,     0,     0,    30,
-       0,    31,   206,     0,     0,    32,    12,     0,     0,     0,
-      13,    14,    34,    15,    35,   204,    16,     0,    17,    36,
-      37,     0,     0,     0,     0,    18,     0,     0,     0,     0,
-       0,     0,   538,     0,     0,    20,     0,    21,    22,    23,
-       0,     0,     0,    38,     0,    25,     0,     0,     0,     4,
-       0,     0,     0,     0,     0,     0,     0,   205,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   534,    26,     0,
-       0,     0,    27,    28,    29,     0,     5,    30,     6,    31,
-     206,     0,     0,    32,     7,     0,     0,     0,     9,     0,
-      34,     0,    35,     0,     0,     0,     0,    36,    37,     0,
-       0,    12,     0,     0,     0,    13,    14,     0,    15,     0,
-     553,    16,     0,    17,     0,     0,     0,     0,     0,     0,
-      18,    38,     0,     0,     0,     0,     0,     4,     0,     0,
-      20,     0,    21,    22,    23,     0,     0,     0,     0,     0,
-      25,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-       0,     0,     0,     0,     5,     0,     6,     0,     0,     0,
-       0,     0,     7,    26,     0,     0,     9,    27,    28,    29,
+       0,     0,     0,    32,     0,     0,     0,     0,     0,     5,
+      33,     6,    34,     0,    35,     0,   229,     7,     0,     0,
+       0,     9,    36,    37,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,     0,     0,
+       0,     0,     0,    13,    14,     0,    15,     0,   230,     0,
+      16,    38,     0,    17,     0,     0,     0,     0,     0,     0,
+      18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    20,     0,    21,    22,    23,     0,     0,     0,     0,
+       0,     0,    25,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   231,     0,     0,     0,     0,     0,     0,     4,     0,
+       0,     0,     0,     0,    26,     0,     0,     0,     0,    27,
+      28,    29,     0,     0,    30,     0,    31,   232,     0,     0,
+      32,     0,     0,     0,     0,     5,     0,     6,     0,    34,
+       0,    35,   229,     7,     0,     0,     0,     9,     0,    36,
+      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,     0,     0,     0,   587,     0,    13,
+      14,     0,    15,     0,   230,     0,    16,     0,    38,    17,
+       4,     0,     0,     0,     0,     0,    18,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    20,   583,    21,
+      22,    23,     0,     0,     0,     0,     0,     5,    25,     6,
+       0,     0,     0,     0,     0,     7,     0,     0,     0,     9,
+       0,     0,     0,     0,     0,     0,     0,   231,     0,     0,
+       0,     0,     0,     0,     0,    12,     0,     0,     0,     0,
+      26,    13,    14,     0,    15,    27,    28,    29,    16,     0,
+      30,    17,    31,   232,     0,     0,    32,     0,    18,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    20,
+       0,    21,    22,    23,     4,    36,    37,     0,     0,     0,
+      25,   449,   450,   451,   452,   453,   454,   455,   456,   457,
+       0,     0,     0,   602,     0,     0,     0,     0,     0,     0,
+       0,     5,     0,     6,    38,     0,     0,     0,     0,     7,
+       0,     0,    26,     9,     0,     0,     0,    27,    28,    29,
        0,     0,    30,     0,    31,     0,     0,     0,    32,    12,
-       0,     0,     0,    13,    14,    34,    15,    35,     0,    16,
-       0,    17,    36,    37,     0,     0,     0,     0,    18,   406,
-     407,   408,   409,   410,   411,   412,   413,   414,    20,     0,
-      21,    22,    23,     0,     0,     0,    38,     0,    25,     0,
-       0,     0,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    26,     0,     0,     0,    27,    28,    29,     0,     0,
-      30,     0,    31,     0,     0,     0,    32,     0,     0,     0,
-       0,     0,     0,    34,     0,    35,     0,     0,     0,     0,
-      36,    37,   406,   407,   408,   409,   410,   411,   412,   415,
-     414,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,     0,     0,     0,    38,     0,     0,     0,   426,   427,
-       0,     0,     0,   441,   406,   407,   408,   409,   410,   411,
-     412,   413,   414,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,     0,     0,   415,     0,   416,
-     417,   418,   419,   420,   421,   422,   423,   424,   425,   406,
-     407,   408,   409,   410,   411,   412,   426,   427,     0,     0,
-     415,   449,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,     0,     0,     0,     0,     0,     0,     0,   426,
-     427,     0,     0,     0,   493,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   406,   407,   408,   409,   410,   411,   412,
-       0,     0,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   406,   407,   408,   409,   410,   411,   412,   426,
-     427,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   415,     0,   416,   417,   418,   419,   420,   421,
-     422,   423,   424,   425,   406,   407,   408,   409,   410,   411,
-     412,   426,   427,   562,   415,   561,   416,   417,   418,   419,
-     420,   421,   422,   423,   424,   425,     0,     0,     0,     0,
-       0,     0,     0,   426,   427,     0,     0,     0,     0,   416,
-     417,   418,   419,   420,   421,   422,   423,   424,   425,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,     0,     0,
+       0,     0,     0,     0,     0,    13,    14,    34,    15,    35,
+       0,     0,    16,     0,     0,    17,     0,    36,    37,     0,
+       0,     0,    18,   449,   450,   451,   452,   453,   454,   455,
+     456,   457,     0,    20,     0,    21,    22,    23,     0,     0,
+       0,     0,     0,     0,    25,     0,    38,     0,   449,   450,
+     451,   452,   453,   454,   455,   456,   457,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    26,     0,     0,     0,
+       0,    27,    28,    29,     0,     0,    30,     0,    31,     0,
+       0,     0,    32,     0,   449,   450,   451,   452,   453,   454,
+     455,    34,   457,    35,     0,     0,     0,     0,     0,     0,
+       0,    36,    37,     0,     0,     0,     0,     0,   458,     0,
+     459,   460,   461,   462,   463,   464,   465,   466,   467,   468,
+       0,     0,     0,     0,     0,     0,     0,   469,   470,     0,
+      38,     0,   484,   449,   450,   451,   452,   453,   454,   455,
+     456,   457,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   449,   450,   451,   452,   453,
+     454,   455,   456,   457,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   449,   450,   451,   452,   453,   454,   455,
+     458,     0,   459,   460,   461,   462,   463,   464,   465,   466,
+     467,   468,   449,   450,   451,   452,   453,   454,   455,   469,
+     470,     0,     0,     0,   495,   458,     0,   459,   460,   461,
+     462,   463,   464,   465,   466,   467,   468,     0,     0,     0,
+       0,     0,     0,     0,   469,   470,     0,     0,     0,   542,
+     449,   450,   451,   452,   453,   454,   455,   456,   457,     0,
+       0,     0,     0,     0,     0,     0,   449,   450,   451,   452,
+     453,   454,   455,   459,   460,   461,   462,   463,   464,   465,
+     466,   467,   468,   449,   450,   451,   452,   453,   454,   455,
+     469,   470,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   415,     0,   416,   417,   418,   419,   420,
-     421,   422,   423,   424,   425,     0,     0,     0,     0,     0,
-       0,     0,   426,   427,   417,   418,   419,   420,   421,   422,
-     423,   424,   425,     0,     0,     0,     0,     4,     0,     0,
-     426,   427,     0,     0,   418,   419,   420,   421,   422,   423,
-     424,   425,     0,     0,     0,     0,     0,     0,     0,   426,
-     427,     0,     0,     0,     5,     0,     6,     0,     0,     0,
-       0,     0,     7,     8,     0,     0,     9,   419,   420,   421,
-     422,   423,   424,   425,     0,     0,     0,    11,     0,    12,
-       0,   426,   427,    13,    14,     0,    15,     0,     0,    16,
-       0,    17,     0,     0,     0,     0,     0,     0,    18,     0,
-       0,     0,     0,     0,     0,     4,     0,     0,    20,     0,
-      21,    22,    23,    24,     0,     0,   175,     0,    25,     0,
-     176,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     5,     0,     6,     0,     0,     0,     0,     0,
-       7,    26,     0,     0,     9,    27,    28,    29,     0,     0,
-      30,     0,    31,     0,     0,     0,    32,    12,     0,     0,
-       0,    13,    14,    34,    15,    35,     0,    16,     0,    17,
-      36,    37,     0,     0,     0,     4,    18,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    20,     0,    21,    22,
-      23,     0,     0,     0,     0,     0,    25,     0,     0,     0,
-       0,     0,     5,     0,     6,     0,     0,     0,     0,     0,
-       7,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-       0,     0,     0,    27,    28,    29,     0,    12,    30,     0,
-      31,    13,    14,     0,    32,     0,     0,    16,     0,    17,
-       0,    34,     0,    35,     0,     0,    18,     0,    36,    37,
-       0,     0,     0,     0,     0,     0,     0,     0,    21,    22,
-      23,     0,     0,     0,     0,     0,    25,     0,     0,     0,
+     458,     0,   459,   460,   461,   462,   463,   464,   465,   466,
+     467,   468,     0,     0,     0,     0,     0,     0,     0,   469,
+     470,   611,   458,   610,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,   468,     0,     0,     0,     0,     0,     0,
+       0,   469,   470,   460,   461,   462,   463,   464,   465,   466,
+     467,   468,     0,     0,     0,     0,     0,     0,     0,   469,
+     470,   459,   460,   461,   462,   463,   464,   465,   466,   467,
+     468,     0,     0,     0,     0,     0,     0,     0,   469,   470,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   458,     0,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,   468,     0,
+       0,     0,     0,     0,     0,     0,   469,   470,   462,   463,
+     464,   465,   466,   467,   468,     4,     0,     0,     0,     0,
+       0,     0,   469,   470,   461,   462,   463,   464,   465,   466,
+     467,   468,     0,     0,     0,     0,     0,     0,     0,   469,
+     470,     0,     5,     0,     6,     0,     0,     0,     0,     0,
+       7,     8,     0,     0,     9,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    11,     0,
+      12,     0,     0,     0,     0,     0,    13,    14,     0,    15,
+       0,     0,     0,    16,     0,     0,    17,     4,     0,     0,
+       0,     0,     0,    18,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    20,     0,    21,    22,    23,    24,
+       0,     0,   201,     0,     5,    25,     6,     0,     0,   202,
+       0,     0,     7,     0,     0,     0,     9,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    27,    28,    29,     0,     0,    30,     0,
-       0,     0,     0,    96,    32,    97,    98,    99,     0,   100,
-     101,    34,   102,    35,     0,   103,     0,   104,    36,    37,
-       0,     0,     0,     0,   105,   106,   107,   108,     0,   109,
-     110,   111,   112,   113,     0,   114,     0,   115,   116,   117,
-       0,     0,   118,     0,     0,     0,     0,   119,     0,   120,
-     121,   122,   123,   124,   125,     0,   126,   127,   128,   129,
-     130,     0,     0,   131,     0,     0,   132,     0,     0,     0,
-       0,   133,   134,     0,   135,     0,     0,     0,   136,   137,
-     138,     0,   139,   140,   141,   142,   143,     0,   144,     0,
-     145,   146,   147,   148,   149,   150,   151,   152,     0,   153,
-     154,   155,     0,     0,     0,   156,     0,     0,   157,     0,
-       0,   158,   159,     0,     0,   160,   161,   162,     0,     0,
-       0,   163,     0,   164,   165,   166,   167,     0,     0,   168
+       0,     0,    12,     0,     0,     0,     0,    26,    13,    14,
+       0,    15,    27,    28,    29,    16,     0,    30,    17,    31,
+       0,     0,     0,    32,     0,    18,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    20,     0,    21,    22,
+      23,     4,    36,    37,     0,     0,     0,    25,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     5,     0,
+       6,     0,     0,     0,     0,     0,     7,     0,     0,    26,
+       0,     0,     0,     0,    27,    28,    29,     0,     0,    30,
+       0,    31,     0,     0,     0,    32,    12,     0,     0,     0,
+       0,     0,    13,    14,    34,     0,    35,     0,     0,    16,
+       0,     0,    17,     0,    36,    37,     0,     0,     0,    18,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    21,    22,    23,     0,     0,     0,     0,     0,
+       0,    25,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    27,    28,
+      29,     0,     0,    30,     0,     0,     0,     0,     0,    32,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+      35,     0,     0,     0,     0,     0,     0,     0,    36,    37,
+      96,     0,    97,    98,    99,     0,   100,   101,     0,   102,
+       0,     0,   103,     0,   104,     0,     0,     0,   105,   106,
+       0,   107,   108,   109,   110,     0,   111,   112,   113,   114,
+     115,   116,   117,   118,     0,   119,     0,   120,   121,   122,
+     123,   124,     0,     0,   125,     0,     0,     0,   126,     0,
+     127,   128,     0,   129,   130,   131,   132,   133,   134,     0,
+     135,   136,   137,   138,   139,   140,     0,     0,   141,     0,
+       0,   142,     0,     0,     0,     0,   143,   144,     0,   145,
+     146,     0,   147,   148,     0,     0,   149,   150,   151,   152,
+     153,   154,     0,   155,   156,   157,   158,   159,   160,   161,
+       0,   162,   163,     0,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,     0,   173,   174,   175,   176,     0,     0,
+       0,   177,     0,     0,   178,     0,     0,   179,   180,     0,
+       0,   181,   182,   183,   184,     0,     0,   185,     0,   186,
+       0,   187,   188,   189,   190,   191,   192,   193,     0,     0,
+     194
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,    66,     2,    66,     2,     2,    46,   235,     2,   212,
-     238,   266,   240,   234,   280,   243,   208,   209,   246,   278,
-      46,    67,     2,    33,   284,    37,    15,   486,   254,    96,
-      63,    64,    65,   225,    38,    43,    69,    49,     2,    43,
-      86,    13,    14,    15,    64,    65,    46,   231,    46,    69,
-     234,    91,    46,   477,   492,    63,   134,   241,    54,   497,
-     244,    65,   283,   247,   248,   134,   150,   150,   113,     0,
-     150,   495,   117,   171,   476,   150,   150,    85,   171,   177,
-     150,    87,    46,   171,   177,   274,     8,    90,   280,   177,
-     173,   175,   494,   174,    90,   175,   141,   172,   176,   283,
-     284,   175,   357,   107,   171,   175,   109,   176,   297,   298,
-     118,    15,   174,   368,   552,   574,    29,   171,   183,   543,
-     183,   129,    35,   171,   173,   173,   130,   353,   312,   313,
-     314,   315,   316,   317,   318,   559,   538,   171,     8,   171,
-     174,    11,   174,   208,   209,   208,   209,   171,   173,    25,
-     174,   553,    28,    32,   173,    34,   160,   385,   221,   173,
-     225,    15,   225,   176,   190,   177,   229,   171,     3,     4,
-     174,   173,   174,   173,   174,   173,   174,   176,    38,   173,
-     174,   170,   171,   216,   444,   173,   158,   159,   160,   161,
-     162,   375,   173,   173,   174,   173,   216,   389,   170,   171,
-     428,   152,   405,   249,   250,    65,   176,   253,   173,   468,
-     173,     3,     4,   173,   469,   280,   173,   280,     8,   447,
-       3,     4,   406,   407,   176,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   176,   427,   176,   285,    38,   107,     3,   174,
-       5,     6,     7,     8,     9,    10,   160,   161,   162,   174,
-     444,     3,   272,     3,     4,   174,   170,   171,   174,   461,
-     130,   537,   174,    65,   529,     3,     4,   279,   318,   279,
-     483,   279,   174,   285,   294,   279,   552,     3,     4,   492,
-       3,     4,     3,     4,   497,   176,   298,   500,     3,     4,
-     160,   567,     3,     4,   158,   159,   160,   161,   162,    64,
-     565,   171,   174,   579,   174,   107,   170,   171,   174,     3,
-       4,   384,   362,   174,   389,   174,   389,     3,     4,   174,
-     370,   174,   174,   174,   174,   174,   174,    38,   130,   173,
-     405,   381,    43,   174,   174,   174,   101,   387,   475,   552,
-     174,   572,   479,   174,    38,   174,   174,   397,   174,    43,
-     174,   358,   364,   173,    65,   367,   594,   367,   160,   367,
-     370,   126,   370,   367,   558,   173,   370,   561,   178,   171,
-     176,    65,   174,   138,   175,     8,   175,   387,   572,   174,
-       8,     8,     8,     8,     8,    39,   461,    68,   461,     5,
-     155,     3,     4,   158,   159,   160,   107,   171,   163,   164,
-     537,   174,   477,   540,   173,   152,   173,   172,   176,   174,
-     150,   175,   178,   107,   464,   177,   489,   492,   555,   130,
-     495,    75,   497,   150,   474,   174,    38,   477,     3,   175,
-     567,   175,   175,    87,    88,    89,   130,   150,   175,   175,
-     175,    95,   579,   175,   175,   495,   175,   175,   170,   160,
-     175,   175,     8,    65,   152,     4,   175,   175,   175,   175,
-     171,   175,   474,   174,   173,   477,   160,   175,    81,   123,
-     177,   172,   175,   127,   150,   175,   173,   552,   173,     3,
-     174,     3,    31,   495,    33,     8,   175,     5,   175,   173,
-      39,    40,   175,   543,    43,   107,   173,   175,    44,    48,
-     175,   175,   152,   176,   175,    54,   175,    56,   175,   559,
-     175,    60,    61,   175,    63,   152,   152,    66,   130,    68,
-     532,   173,   532,   366,   532,     2,    75,   474,   532,   600,
-     384,   543,    81,    82,   364,   247,    85,     2,    87,    88,
-      89,    90,    46,     2,     2,   183,    95,   559,   160,   574,
-       4,    -1,   245,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   174,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-      -1,    -1,    -1,   122,   123,   124,    -1,    31,   127,    33,
-     129,    -1,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,
-     139,   140,    -1,   142,    48,    -1,    -1,    -1,   147,   148,
-      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,
-      -1,    -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,   171,    -1,    -1,    -1,    -1,    81,   177,    -1,
-      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,
+       2,    66,     2,    66,     2,     2,    46,   261,     2,   298,
+     264,   238,   266,    33,   260,   269,   234,   235,   310,   312,
+     274,     2,    67,    15,    63,    64,    65,   286,   107,   535,
+      69,   541,   526,   251,    64,    65,   546,    43,   153,    69,
+     316,    86,     2,    46,   153,   131,    46,    37,    46,   135,
+     544,    91,    46,   179,    98,   179,   179,     3,     4,   179,
+      50,   257,    68,   524,   260,     0,    57,   528,   179,   315,
+     200,   267,   203,   203,   270,    39,   162,   201,   204,   202,
+     276,   277,   126,    38,   204,   179,    46,    93,    43,   306,
+     205,   601,     8,   204,   312,    11,   205,     3,   592,     5,
+       6,     7,     8,     9,    10,   200,    25,    98,   203,    28,
+     204,   400,   329,   330,   608,    70,    95,   623,    82,   315,
+     316,   200,   411,   200,   200,   586,   202,   525,   589,   206,
+     136,    95,    96,    97,     3,     4,   200,   396,   200,   203,
+     104,   200,   148,   604,   209,   543,   209,   206,   344,   345,
+     346,   347,   348,   349,   350,   616,     3,     4,   200,    29,
+      32,   202,    34,    69,   206,    35,   203,   628,   123,   234,
+     235,   234,   235,    15,   428,     8,    15,   202,   142,     3,
+       4,   202,   146,   202,   247,   202,   251,   205,   251,   587,
+     205,    38,   255,   202,   149,   202,    43,   199,   200,   199,
+     200,   199,   200,   242,   602,   199,   200,   199,   200,   115,
+     181,   487,   242,   216,   432,   202,   206,   471,   199,   200,
+     205,   448,   418,    70,   202,   517,     3,     4,   202,   518,
+     275,     3,     4,   278,   189,   280,   281,     8,   492,   145,
+     285,     3,     4,     3,     4,   200,   205,   312,   203,   312,
+       3,     4,   158,   449,   450,   205,   452,   453,   454,   455,
+     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
+     466,   467,   468,   202,   470,   205,   123,   317,   184,     3,
+       4,   187,   188,   189,   304,   203,   192,   193,   203,   578,
+     203,   487,   510,   586,   203,   201,   203,   203,   203,   203,
+     203,   203,   149,     3,     4,   532,   326,   203,   601,   311,
+     350,   311,   203,   311,   541,   317,   203,   311,   203,   546,
+     203,   203,   549,   616,   203,   614,   203,     3,   330,     5,
+       6,     7,     8,     9,    10,   628,   203,   203,    38,   203,
+     203,   203,   189,    43,   203,   187,   188,   189,   190,   191,
+     189,   190,   191,   200,   203,   203,   203,   199,   200,   203,
+     199,   200,   203,   203,   427,   405,   203,   432,   203,   432,
+      70,   203,   203,   413,   601,   621,   174,   175,   176,   177,
+     178,     3,   205,   448,   424,   202,   202,   202,   207,   643,
+     430,   205,   204,    69,   204,   203,     8,     8,     8,     8,
+     440,     8,     8,    75,   401,   407,     8,     8,   410,     5,
+     410,   607,   410,   413,   610,   413,   410,     8,   200,   413,
+     203,   202,   181,   123,   202,   621,   205,   179,   204,   179,
+     430,     3,     4,   206,     3,   204,   204,   207,   203,   115,
+     204,   204,   179,   204,   199,   510,   204,   510,   204,   149,
+     204,     8,   181,   204,    89,   204,   204,   204,   204,   204,
+     204,   526,   204,   204,   204,   204,    38,   202,   204,   145,
+       4,   204,   204,   513,   204,   538,   541,   204,   206,   544,
+     201,   546,   158,   523,   204,   179,   526,   204,   202,   189,
+     202,     3,     3,     8,   204,     5,   204,    31,    70,    33,
+     202,   202,   181,   203,   544,    39,    40,   204,   184,    43,
+     205,   187,   188,   189,    48,   204,   192,   193,    13,    14,
+      15,   523,   204,    57,   526,    59,   204,   203,   181,   204,
+     204,    65,    66,   204,    68,   204,   601,   204,    72,   181,
+     202,    75,   544,    44,   409,     2,   523,   427,    82,   649,
+     276,   123,   592,   407,     2,    89,    90,    46,     2,    93,
+       2,    95,    96,    97,    98,   623,   209,   272,   608,    -1,
+     104,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,   581,
+      -1,   581,    -1,   581,     4,    -1,    -1,   581,    -1,    -1,
+     592,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+      -1,    -1,   136,    -1,    38,    -1,   608,   141,   142,   143,
+      -1,    31,   146,    33,   148,    -1,    -1,   189,   152,    39,
+      -1,    -1,    -1,    43,    -1,   159,    -1,   161,    48,   163,
+      -1,   203,    -1,    38,    -1,    -1,    70,   171,   172,    59,
+      -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    -1,
+      -1,    -1,    72,    -1,    -1,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    -1,    -1,    70,   200,    -1,    -1,    89,
+      -1,    -1,   206,    93,    -1,    95,    96,    97,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,     4,    -1,    -1,    -1,   123,
+      -1,    -1,   187,   188,   189,   190,   191,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   199,   200,    -1,    -1,    -1,    -1,
+      -1,    -1,    31,    -1,    33,   149,   136,    -1,   123,    -1,
+      39,   141,   142,   143,    43,    -1,   146,    -1,   148,    48,
+      -1,    -1,   152,    -1,    -1,    -1,    -1,    -1,    -1,   159,
+      59,   161,    -1,   163,   149,    -1,    65,    66,    -1,    68,
+      -1,   171,   172,    72,    -1,   189,    75,    -1,    -1,    -1,
+      -1,    -1,    -1,    82,    -1,    -1,   200,    -1,    -1,   203,
+      89,    -1,    -1,    -1,    93,    -1,    95,    96,    97,    -1,
+     200,    -1,    -1,    -1,   189,   104,   206,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   200,    -1,    -1,   203,     4,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,
-     124,    -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,
-      39,    -1,    -1,    -1,    43,   139,   140,    -1,   142,    48,
-      -1,    -1,    -1,   147,   148,    -1,    -1,    56,    -1,    -1,
-      -1,    60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,   171,    -1,    -1,
-      -1,    -1,    81,   177,    -1,    -1,    85,    -1,    87,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
-       4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-      -1,    -1,    -1,   122,   123,   124,    -1,    31,   127,    33,
-     129,    -1,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,
-     139,   140,    -1,   142,    48,    -1,    -1,    -1,   147,   148,
-      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,
-      -1,    -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,   171,    -1,    -1,    -1,    -1,    81,   177,    -1,
-      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,
+      -1,    -1,   141,   142,   143,    -1,    31,   146,    33,   148,
+      -1,    -1,    -1,   152,    39,    -1,    -1,    -1,    43,    -1,
+     159,    -1,   161,    48,   163,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   171,   172,    59,    -1,    -1,    -1,    -1,    -1,
+      65,    66,    -1,    68,    -1,    -1,    -1,    72,    -1,    -1,
+      75,     4,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+      -1,   200,    -1,    -1,    89,    -1,    -1,   206,    93,    -1,
+      95,    96,    97,    -1,    -1,    -1,    -1,    -1,    31,   104,
+      33,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,     3,
+      43,     5,     6,     7,     8,     9,    10,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+      -1,   136,    65,    66,    -1,    68,   141,   142,   143,    72,
+      -1,   146,    75,   148,    -1,    -1,    -1,   152,    -1,    82,
+      -1,    -1,    -1,    -1,   159,    -1,   161,    -1,   163,    -1,
+      93,    -1,    95,    96,    97,    -1,   171,   172,    -1,    -1,
+      -1,   104,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
+       9,    10,    -1,    -1,    -1,   200,    -1,    -1,    -1,    -1,
+      -1,   206,    -1,   136,    -1,    -1,    -1,    -1,   141,   142,
+     143,    -1,    31,   146,    33,   148,    -1,    -1,    -1,   152,
+      39,   115,    -1,    -1,    43,    -1,    -1,    -1,   161,    -1,
+     163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   171,   172,
+      59,    -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,
+      69,   145,    -1,    72,    -1,    -1,    75,    -1,    -1,    -1,
+      13,    14,    15,    82,   158,    18,    19,   200,    -1,    -1,
+      -1,    -1,    -1,   206,    93,    -1,    95,    96,    97,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,
+     184,    -1,    -1,   187,   188,   189,   115,    -1,   192,   193,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   203,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,
+      -1,    -1,   141,   142,   143,    -1,   145,   146,     4,   148,
+      -1,    -1,    -1,   152,    -1,    -1,    12,    -1,    -1,   158,
+      -1,    -1,   161,    -1,   163,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   171,   172,    -1,    31,    -1,    33,    -1,    -1,
+      -1,    -1,    -1,    39,    40,   184,    -1,    43,   187,   188,
+     189,    -1,    48,   192,   193,    -1,    -1,    -1,    -1,    -1,
+      -1,    57,    -1,    59,   203,    -1,    -1,    -1,    -1,    65,
+      66,    -1,    68,    -1,    -1,    -1,    72,    -1,    -1,    75,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
+      -1,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    95,
+      96,    97,    98,    -1,    -1,    -1,    -1,    -1,   104,    -1,
+      -1,    -1,   185,   186,   187,   188,   189,   190,   191,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   199,   200,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,
+     136,    -1,    -1,    -1,    -1,   141,   142,   143,    -1,    -1,
+     146,    -1,   148,    -1,    -1,    -1,   152,    -1,    -1,    -1,
+      -1,    -1,    31,   159,    33,   161,    -1,   163,    -1,    -1,
+      39,    40,    -1,    -1,    43,   171,   172,    -1,    -1,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
+      59,    -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,
+      -1,    -1,    -1,    72,   200,    -1,    75,    -1,    -1,    -1,
+      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,
+      89,    -1,    -1,    -1,    93,    -1,    95,    96,    97,    98,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,
-     124,    -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,
-      39,    -1,    -1,    -1,    43,   139,   140,    -1,   142,    -1,
-      -1,    -1,    -1,   147,   148,    -1,    -1,    56,    -1,    -1,
-      -1,    60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,   171,    -1,    -1,
-      -1,    -1,    -1,   177,    -1,    -1,    85,    -1,    87,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,     3,
-       4,     5,     6,     7,     8,     9,    10,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-      -1,    -1,    -1,   122,   123,   124,    -1,    31,   127,    33,
-     129,    13,    14,    15,   133,    39,    18,    19,    -1,    43,
-      -1,   140,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,
-      -1,    -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,
-      64,    -1,    66,     3,    68,     5,     6,     7,     8,     9,
-      10,    75,   171,    -1,    -1,    -1,    -1,    -1,   177,    -1,
-      -1,    85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,
-      -1,    95,    -1,    -1,    -1,    -1,    -1,   101,    -1,    -1,
-      -1,    -1,     3,    -1,     5,     6,     7,     8,     9,    10,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,
-     124,    -1,   126,   127,    64,   129,    -1,    -1,    -1,   133,
-      -1,    -1,    -1,    -1,   138,    -1,   140,    -1,   142,    -1,
-      -1,    -1,    -1,   147,   148,    -1,    -1,    -1,    -1,    -1,
-      -1,   155,    -1,    -1,   158,   159,   160,    -1,    -1,   163,
-     164,   101,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,
-     174,    -1,    -1,    -1,   156,   157,   158,   159,   160,   161,
-     162,    -1,    -1,    -1,    -1,    -1,   126,    -1,   170,   171,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,
-     101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   155,    -1,    -1,   158,   159,
-     160,    -1,    -1,   163,   164,   126,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   174,    -1,    -1,   138,    -1,     4,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,    -1,    -1,
-      -1,    -1,    -1,    -1,   155,    -1,    -1,   158,   159,   160,
-      -1,    -1,   163,   164,    -1,    -1,    31,    -1,    33,    -1,
-      -1,    -1,    -1,   174,    39,    40,    -1,    -1,    43,    -1,
-      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
-      -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
-      -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    -1,    -1,    81,    82,    -1,    -1,
-      85,    -1,    87,    88,    89,    90,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,   122,   123,   124,
-      -1,    31,   127,    33,   129,    -1,    -1,    -1,   133,    39,
-      40,    -1,    -1,    43,   139,   140,    -1,   142,    48,    -1,
-      -1,    -1,   147,   148,    54,    -1,    56,    -1,    -1,    -1,
-      60,    61,    -1,    63,    -1,    -1,    66,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,   171,    -1,    -1,    -1,
-      -1,    81,    -1,    -1,    -1,    85,    -1,    87,    88,    89,
-      90,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
+      -1,    -1,     4,    -1,    -1,    -1,    -1,   136,    -1,    -1,
+      -1,    -1,   141,   142,   143,    -1,    -1,   146,    -1,   148,
+      -1,    -1,    -1,   152,    -1,    -1,    -1,    -1,    -1,    31,
+     159,    33,   161,    -1,   163,    -1,    38,    39,    -1,    -1,
+      -1,    43,   171,   172,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,
+      -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,    -1,
+      72,   200,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    93,    -1,    95,    96,    97,    -1,    -1,    -1,    -1,
+      -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     4,    -1,   118,    -1,
-      -1,    -1,   122,   123,   124,    -1,    -1,   127,    -1,   129,
-      -1,    -1,    -1,   133,    -1,    -1,    -1,    -1,    -1,   139,
-     140,    -1,   142,    31,    -1,    33,    -1,   147,   148,    -1,
-      38,    39,    -1,    -1,    -1,    43,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    -1,
-      -1,   171,    60,    61,    -1,    63,    -1,    65,    66,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,     4,    -1,    -1,    85,    -1,    87,
-      88,    89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,
-      -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    38,    39,
-     118,    -1,    -1,    43,   122,   123,   124,    -1,    -1,   127,
-      -1,   129,   130,    -1,    -1,   133,    56,    -1,    -1,    -1,
-      60,    61,   140,    63,   142,    65,    66,    -1,    68,   147,
-     148,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,   160,    -1,    -1,    85,    -1,    87,    88,    89,
-      -1,    -1,    -1,   171,    -1,    95,    -1,    -1,    -1,     4,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,   118,    -1,
-      -1,    -1,   122,   123,   124,    -1,    31,   127,    33,   129,
-     130,    -1,    -1,   133,    39,    -1,    -1,    -1,    43,    -1,
-     140,    -1,   142,    -1,    -1,    -1,    -1,   147,   148,    -1,
-      -1,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
-     160,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,   171,    -1,    -1,    -1,    -1,    -1,     4,    -1,    -1,
-      85,    -1,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
-      95,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      -1,    -1,    -1,    -1,    31,    -1,    33,    -1,    -1,    -1,
-      -1,    -1,    39,   118,    -1,    -1,    43,   122,   123,   124,
-      -1,    -1,   127,    -1,   129,    -1,    -1,    -1,   133,    56,
-      -1,    -1,    -1,    60,    61,   140,    63,   142,    -1,    66,
-      -1,    68,   147,   148,    -1,    -1,    -1,    -1,    75,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    85,    -1,
-      87,    88,    89,    -1,    -1,    -1,   171,    -1,    95,    -1,
-      -1,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
-     127,    -1,   129,    -1,    -1,    -1,   133,    -1,    -1,    -1,
-      -1,    -1,    -1,   140,    -1,   142,    -1,    -1,    -1,    -1,
-     147,   148,    13,    14,    15,    16,    17,    18,    19,   151,
-      21,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,    -1,    -1,    -1,   171,    -1,    -1,    -1,   170,   171,
-      -1,    -1,    -1,   175,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,   151,    -1,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,    13,
-      14,    15,    16,    17,    18,    19,   170,   171,    -1,    -1,
-     151,   175,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   170,
-     171,    -1,    -1,    -1,   175,    13,    14,    15,    16,    17,
+      -1,   123,    -1,    -1,    -1,    -1,    -1,    -1,     4,    -1,
+      -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,    -1,   141,
+     142,   143,    -1,    -1,   146,    -1,   148,   149,    -1,    -1,
+     152,    -1,    -1,    -1,    -1,    31,    -1,    33,    -1,   161,
+      -1,   163,    38,    39,    -1,    -1,    -1,    43,    -1,   171,
+     172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    59,    -1,    -1,    -1,   189,    -1,    65,
+      66,    -1,    68,    -1,    70,    -1,    72,    -1,   200,    75,
+       4,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    22,    95,
+      96,    97,    -1,    -1,    -1,    -1,    -1,    31,   104,    33,
+      -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    43,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   123,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
+     136,    65,    66,    -1,    68,   141,   142,   143,    72,    -1,
+     146,    75,   148,   149,    -1,    -1,   152,    -1,    82,    -1,
+      -1,    -1,    -1,    -1,    -1,   161,    -1,   163,    -1,    93,
+      -1,    95,    96,    97,     4,   171,   172,    -1,    -1,    -1,
+     104,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,   189,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    31,    -1,    33,   200,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,   136,    43,    -1,    -1,    -1,   141,   142,   143,
+      -1,    -1,   146,    -1,   148,    -1,    -1,    -1,   152,    59,
+      -1,    -1,    -1,    -1,    -1,    65,    66,   161,    68,   163,
+      -1,    -1,    72,    -1,    -1,    75,    -1,   171,   172,    -1,
+      -1,    -1,    82,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    93,    -1,    95,    96,    97,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,    -1,   200,    -1,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,    -1,
+      -1,   141,   142,   143,    -1,    -1,   146,    -1,   148,    -1,
+      -1,    -1,   152,    -1,    13,    14,    15,    16,    17,    18,
+      19,   161,    21,   163,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   171,   172,    -1,    -1,    -1,    -1,    -1,   180,    -1,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   199,   200,    -1,
+     200,    -1,   204,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    13,    14,    15,    16,    17,    18,    19,
-      -1,    -1,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,    13,    14,    15,    16,    17,    18,    19,   170,
-     171,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   151,    -1,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,    13,    14,    15,    16,    17,    18,
-      19,   170,   171,   172,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   170,   171,    -1,    -1,    -1,    -1,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   170,   171,    -1,    -1,
+     180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,    13,    14,    15,    16,    17,    18,    19,   199,
+     200,    -1,    -1,    -1,   204,   180,    -1,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   199,   200,    -1,    -1,    -1,   204,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    13,    14,    15,    16,
+      17,    18,    19,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,    13,    14,    15,    16,    17,    18,    19,
+     199,   200,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   151,    -1,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   170,   171,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,    -1,    -1,    -1,    -1,     4,    -1,    -1,
-     170,   171,    -1,    -1,   155,   156,   157,   158,   159,   160,
-     161,   162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   170,
-     171,    -1,    -1,    -1,    31,    -1,    33,    -1,    -1,    -1,
-      -1,    -1,    39,    40,    -1,    -1,    43,   156,   157,   158,
-     159,   160,   161,   162,    -1,    -1,    -1,    54,    -1,    56,
-      -1,   170,   171,    60,    61,    -1,    63,    -1,    -1,    66,
-      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,     4,    -1,    -1,    85,    -1,
-      87,    88,    89,    90,    -1,    -1,    93,    -1,    95,    -1,
-      97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,
-      39,   118,    -1,    -1,    43,   122,   123,   124,    -1,    -1,
-     127,    -1,   129,    -1,    -1,    -1,   133,    56,    -1,    -1,
-      -1,    60,    61,   140,    63,   142,    -1,    66,    -1,    68,
-     147,   148,    -1,    -1,    -1,     4,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,    87,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
-      -1,    -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-      -1,    -1,    -1,   122,   123,   124,    -1,    56,   127,    -1,
-     129,    60,    61,    -1,   133,    -1,    -1,    66,    -1,    68,
-      -1,   140,    -1,   142,    -1,    -1,    75,    -1,   147,   148,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
+     180,    -1,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   199,
+     200,   201,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   199,   200,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   199,
+     200,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   199,   200,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   180,    -1,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   199,   200,   185,   186,
+     187,   188,   189,   190,   191,     4,    -1,    -1,    -1,    -1,
+      -1,    -1,   199,   200,   184,   185,   186,   187,   188,   189,
+     190,   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   199,
+     200,    -1,    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,
+      39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
+      59,    -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,
+      -1,    -1,    -1,    72,    -1,    -1,    75,     4,    -1,    -1,
+      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    93,    -1,    95,    96,    97,    98,
+      -1,    -1,   101,    -1,    31,   104,    33,    -1,    -1,   108,
+      -1,    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   122,   123,   124,    -1,    -1,   127,    -1,
-      -1,    -1,    -1,    23,   133,    25,    26,    27,    -1,    29,
-      30,   140,    32,   142,    -1,    35,    -1,    37,   147,   148,
-      -1,    -1,    -1,    -1,    44,    45,    46,    47,    -1,    49,
-      50,    51,    52,    53,    -1,    55,    -1,    57,    58,    59,
-      -1,    -1,    62,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      70,    71,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    -1,    -1,    83,    -1,    -1,    86,    -1,    -1,    -1,
-      -1,    91,    92,    -1,    94,    -1,    -1,    -1,    98,    99,
-     100,    -1,   102,   103,   104,   105,   106,    -1,   108,    -1,
-     110,   111,   112,   113,   114,   115,   116,   117,    -1,   119,
-     120,   121,    -1,    -1,    -1,   125,    -1,    -1,   128,    -1,
-      -1,   131,   132,    -1,    -1,   135,   136,   137,    -1,    -1,
-      -1,   141,    -1,   143,   144,   145,   146,    -1,    -1,   149
+      -1,    -1,    59,    -1,    -1,    -1,    -1,   136,    65,    66,
+      -1,    68,   141,   142,   143,    72,    -1,   146,    75,   148,
+      -1,    -1,    -1,   152,    -1,    82,    -1,    -1,    -1,    -1,
+      -1,    -1,   161,    -1,   163,    -1,    93,    -1,    95,    96,
+      97,     4,   171,   172,    -1,    -1,    -1,   104,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,
+      33,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,   136,
+      -1,    -1,    -1,    -1,   141,   142,   143,    -1,    -1,   146,
+      -1,   148,    -1,    -1,    -1,   152,    59,    -1,    -1,    -1,
+      -1,    -1,    65,    66,   161,    -1,   163,    -1,    -1,    72,
+      -1,    -1,    75,    -1,   171,   172,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    95,    96,    97,    -1,    -1,    -1,    -1,    -1,
+      -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
+     143,    -1,    -1,   146,    -1,    -1,    -1,    -1,    -1,   152,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,    -1,
+     163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   171,   172,
+      23,    -1,    25,    26,    27,    -1,    29,    30,    -1,    32,
+      -1,    -1,    35,    -1,    37,    -1,    -1,    -1,    41,    42,
+      -1,    44,    45,    46,    47,    -1,    49,    50,    51,    52,
+      53,    54,    55,    56,    -1,    58,    -1,    60,    61,    62,
+      63,    64,    -1,    -1,    67,    -1,    -1,    -1,    71,    -1,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    -1,
+      83,    84,    85,    86,    87,    88,    -1,    -1,    91,    -1,
+      -1,    94,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,
+     103,    -1,   105,   106,    -1,    -1,   109,   110,   111,   112,
+     113,   114,    -1,   116,   117,   118,   119,   120,   121,   122,
+      -1,   124,   125,    -1,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,    -1,   137,   138,   139,   140,    -1,    -1,
+      -1,   144,    -1,    -1,   147,    -1,    -1,   150,   151,    -1,
+      -1,   154,   155,   156,   157,    -1,    -1,   160,    -1,   162,
+      -1,   164,   165,   166,   167,   168,   169,   170,    -1,    -1,
+     173
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   180,   181,     0,     4,    31,    33,    39,    40,    43,
-      48,    54,    56,    60,    61,    63,    66,    68,    75,    81,
-      85,    87,    88,    89,    90,    95,   118,   122,   123,   124,
-     127,   129,   133,   139,   140,   142,   147,   148,   171,   185,
-     186,   187,   188,   189,   192,   193,   200,   211,   225,   229,
-     231,   232,   233,   234,   237,   238,   241,   243,   244,   245,
-     246,   248,   249,   250,   251,   252,   254,   256,   273,   274,
-     275,   276,     3,     4,   174,     3,     4,     3,     4,   227,
-      87,   230,     8,     3,     4,   230,   174,   230,   231,     3,
-     227,   199,   200,     3,   227,   231,    23,    25,    26,    27,
-      29,    30,    32,    35,    37,    44,    45,    46,    47,    49,
-      50,    51,    52,    53,    55,    57,    58,    59,    62,    67,
-      69,    70,    71,    72,    73,    74,    76,    77,    78,    79,
-      80,    83,    86,    91,    92,    94,    98,    99,   100,   102,
-     103,   104,   105,   106,   108,   110,   111,   112,   113,   114,
-     115,   116,   117,   119,   120,   121,   125,   128,   131,   132,
-     135,   136,   137,   141,   143,   144,   145,   146,   149,   201,
-     203,   272,   173,   182,   182,    93,    97,   191,   211,   232,
-     237,   243,   247,   254,   273,   276,   173,   173,   176,   173,
-     176,   173,   184,   173,   152,   242,   176,   255,   256,   255,
-     255,     3,     4,    38,    65,   107,   130,   160,   174,   205,
-     228,   257,   258,   271,   211,   273,   274,   276,   255,   173,
-       8,   176,   173,   274,   176,   254,   134,   176,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-     174,   174,   174,   174,   150,   172,    12,    82,   185,   190,
-     193,   232,   234,   245,   246,   249,   177,     3,     3,     4,
-     176,   271,   235,   109,   239,   243,     3,     4,   176,   183,
-     253,   257,   257,   178,   171,   174,   198,   255,   175,   208,
-     209,   210,   228,   175,   218,   257,   267,   174,   221,     8,
-     228,     3,     5,     6,     7,     8,     9,    10,    64,   101,
-     126,   138,   155,   158,   159,   160,   163,   164,   174,   214,
-     215,   216,   214,   217,     8,     8,   202,   217,   216,     8,
-       8,   216,     8,   216,   214,    68,   216,   212,   213,   214,
-     272,   216,   212,   214,   274,   274,     8,    11,   204,     5,
-     277,   274,   203,   171,   174,   173,   184,   177,   199,   236,
-     152,    96,   199,   223,   240,   173,   176,   183,   177,   185,
-     200,   252,   257,   175,   217,   160,   213,   194,   195,   196,
-     197,   200,   254,   177,   150,   178,   177,   199,   219,   150,
-     223,   177,   200,   220,   223,   175,   175,   174,   214,   214,
-     214,   214,   214,   214,   214,   254,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,   151,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   170,   171,   150,   175,
-     175,   175,   150,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,     3,   175,   150,   175,   175,   150,   175,   175,
-     175,   175,   175,   170,   175,   175,   203,     8,   184,   246,
-     152,   254,   173,   177,   200,   224,   225,   177,   189,   177,
-     184,   172,   172,   175,   150,   254,   160,   174,   198,   205,
-     228,   263,   265,   266,   210,   216,   254,   276,   257,   175,
-     173,   173,   254,   175,   160,   174,   198,   205,   259,   261,
-     262,   214,   214,     3,   214,   214,   214,   214,   214,   214,
-     214,   214,   214,   214,   214,   214,   214,   214,   214,   214,
-     214,     3,   214,   216,     8,   175,   213,   216,     5,   175,
-     257,   173,   183,   184,    22,   197,   265,   253,   160,   194,
-     205,   264,   265,   174,   198,   263,   269,   270,   173,   226,
-     228,   261,   253,   160,   194,   205,   260,   261,   175,   174,
-     198,   152,   172,   175,   184,   177,   265,   253,   175,   265,
-     175,   194,   152,   268,   150,   173,   176,   175,   261,   253,
-     175,   265,   175,   214,   194,   214,   184,   265,   175,   217,
-     269,   206,   265,   175,    37,    49,   177,   207,   216,   152,
-     152,   173,   222,   223,   222,   173
+       0,   209,   210,     0,     4,    31,    33,    39,    40,    43,
+      48,    57,    59,    65,    66,    68,    72,    75,    82,    89,
+      93,    95,    96,    97,    98,   104,   136,   141,   142,   143,
+     146,   148,   152,   159,   161,   163,   171,   172,   200,   214,
+     215,   216,   217,   218,   221,   222,   229,   240,   254,   258,
+     260,   261,   262,   263,   266,   267,   270,   272,   273,   274,
+     275,   277,   278,   279,   280,   281,   283,   285,   303,   304,
+     305,   306,     3,     4,   203,     3,     4,     3,     4,   256,
+      95,   259,     8,     3,     4,   259,   203,   259,   260,     3,
+     256,   228,   229,     3,   256,   260,    23,    25,    26,    27,
+      29,    30,    32,    35,    37,    41,    42,    44,    45,    46,
+      47,    49,    50,    51,    52,    53,    54,    55,    56,    58,
+      60,    61,    62,    63,    64,    67,    71,    73,    74,    76,
+      77,    78,    79,    80,    81,    83,    84,    85,    86,    87,
+      88,    91,    94,    99,   100,   102,   103,   105,   106,   109,
+     110,   111,   112,   113,   114,   116,   117,   118,   119,   120,
+     121,   122,   124,   125,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   137,   138,   139,   140,   144,   147,   150,
+     151,   154,   155,   156,   157,   160,   162,   164,   165,   166,
+     167,   168,   169,   170,   173,   230,   232,   302,   202,   211,
+     211,   101,   108,   220,   240,   261,   266,   272,   276,   283,
+     303,   306,   202,   202,   205,   202,   205,   202,   213,   202,
+     181,   271,   205,   284,   285,   284,   284,     3,     4,    38,
+      70,   123,   149,   189,   203,   234,   257,   286,   287,   300,
+     240,   303,   304,   306,   284,   202,     8,   205,   202,   304,
+     205,   283,   153,   205,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   179,   201,    12,    90,
+     214,   219,   222,   261,   263,   274,   275,   278,   206,     3,
+       3,     4,   205,   300,   264,   126,   268,   272,     3,     4,
+     205,   212,   282,   286,   286,   207,   200,   203,   227,   284,
+     204,   237,   238,   239,   257,   204,   247,   286,   296,   203,
+     250,     8,   257,     3,     5,     6,     7,     8,     9,    10,
+      69,   115,   145,   158,   184,   187,   188,   189,   192,   193,
+     203,   243,   244,   245,   243,   246,     8,     8,   231,   246,
+     245,     8,     8,   245,     8,   245,   243,    75,   245,   241,
+     242,   243,     8,   302,     8,   245,   304,   241,   243,   304,
+     174,   175,   176,   177,   178,   301,   304,   304,     8,    11,
+     233,     5,   307,     8,   304,   232,   200,   203,   202,   213,
+     206,   228,   265,   181,   107,   228,   252,   269,   202,   205,
+     212,   206,   214,   229,   281,   286,   204,   246,   189,   242,
+     223,   224,   225,   226,   229,   283,   206,   179,   207,   206,
+     228,   248,   179,   252,   206,   229,   249,   252,   204,   204,
+     203,   243,   243,   243,   243,   243,   243,   243,   283,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,   180,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   199,
+     200,   179,   204,   204,   204,   179,   204,   204,   204,   204,
+     204,   204,   204,   204,   204,     3,   204,   179,   204,   204,
+     204,   204,   179,   204,   204,   204,   204,   204,   204,   204,
+     204,   199,   204,   204,   204,   232,     8,   213,   275,   181,
+     283,   202,   206,   229,   253,   254,   206,   218,   206,   213,
+     201,   201,   204,   179,   283,   189,   203,   227,   234,   257,
+     292,   294,   295,   239,   245,   283,   306,   286,   204,   202,
+     202,   283,   204,   189,   203,   227,   234,   288,   290,   291,
+     243,   243,     3,   243,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   243,
+       3,   243,   245,     8,   204,   242,   245,     5,   204,   286,
+     202,   212,   213,    22,   226,   294,   282,   189,   223,   234,
+     293,   294,   203,   227,   292,   298,   299,   202,   255,   257,
+     290,   282,   189,   223,   234,   289,   290,   204,   203,   227,
+     181,   201,   204,   213,   206,   294,   282,   204,   294,   204,
+     223,   181,   297,   179,   202,   205,   204,   290,   282,   204,
+     294,   204,   243,   223,   243,   213,   294,   204,   246,   298,
+     235,   294,   204,    37,    50,   206,   236,   245,   181,   181,
+     202,   251,   252,   251,   202
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2653,7 +2766,7 @@ yyreduce:
         case 2:
 
 /* Line 1455 of yacc.c  */
-#line 325 "parser.y"
+#line 328 "parser.y"
     { fix_incomplete();
                                                  check_statements((yyvsp[(1) - (1)].stmt_list), FALSE);
                                                  check_all_user_types((yyvsp[(1) - (1)].stmt_list));
@@ -2662,6 +2775,7 @@ yyreduce:
                                                  write_proxies((yyvsp[(1) - (1)].stmt_list));
                                                  write_client((yyvsp[(1) - (1)].stmt_list));
                                                  write_server((yyvsp[(1) - (1)].stmt_list));
+                                                 write_regscript((yyvsp[(1) - (1)].stmt_list));
                                                  write_dlldata((yyvsp[(1) - (1)].stmt_list));
                                                  write_local_stubs((yyvsp[(1) - (1)].stmt_list));
                                                ;}
@@ -2670,28 +2784,28 @@ yyreduce:
   case 3:
 
 /* Line 1455 of yacc.c  */
-#line 338 "parser.y"
+#line 342 "parser.y"
     { (yyval.stmt_list) = NULL; ;}
     break;
 
   case 4:
 
 /* Line 1455 of yacc.c  */
-#line 339 "parser.y"
+#line 343 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_reference((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 5:
 
 /* Line 1455 of yacc.c  */
-#line 340 "parser.y"
+#line 344 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 6:
 
 /* Line 1455 of yacc.c  */
-#line 341 "parser.y"
+#line 345 "parser.y"
     { (yyval.stmt_list) = (yyvsp[(1) - (3)].stmt_list);
                                                  reg_type((yyvsp[(2) - (3)].type), (yyvsp[(2) - (3)].type)->name, 0);
                                                ;}
@@ -2700,7 +2814,7 @@ yyreduce:
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 344 "parser.y"
+#line 348 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type)));
                                                  reg_type((yyvsp[(2) - (2)].type), (yyvsp[(2) - (2)].type)->name, 0);
                                                ;}
@@ -2709,56 +2823,56 @@ yyreduce:
   case 8:
 
 /* Line 1455 of yacc.c  */
-#line 347 "parser.y"
+#line 351 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_module((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 9:
 
 /* Line 1455 of yacc.c  */
-#line 348 "parser.y"
+#line 352 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_library((yyvsp[(2) - (2)].typelib))); ;}
     break;
 
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 349 "parser.y"
+#line 353 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), (yyvsp[(2) - (2)].statement)); ;}
     break;
 
   case 11:
 
 /* Line 1455 of yacc.c  */
-#line 352 "parser.y"
+#line 356 "parser.y"
     { (yyval.stmt_list) = NULL; ;}
     break;
 
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 353 "parser.y"
+#line 357 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_reference((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 354 "parser.y"
+#line 358 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 14:
 
 /* Line 1455 of yacc.c  */
-#line 355 "parser.y"
+#line 359 "parser.y"
     { (yyval.stmt_list) = (yyvsp[(1) - (3)].stmt_list); reg_type((yyvsp[(2) - (3)].type), (yyvsp[(2) - (3)].type)->name, 0); ;}
     break;
 
   case 15:
 
 /* Line 1455 of yacc.c  */
-#line 356 "parser.y"
+#line 360 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_type_decl((yyvsp[(2) - (2)].type)));
                                                  reg_type((yyvsp[(2) - (2)].type), (yyvsp[(2) - (2)].type)->name, 0);
                                                ;}
@@ -2767,112 +2881,112 @@ yyreduce:
   case 16:
 
 /* Line 1455 of yacc.c  */
-#line 359 "parser.y"
+#line 363 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_module((yyvsp[(2) - (2)].type))); ;}
     break;
 
   case 17:
 
 /* Line 1455 of yacc.c  */
-#line 360 "parser.y"
+#line 364 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), (yyvsp[(2) - (2)].statement)); ;}
     break;
 
   case 18:
 
 /* Line 1455 of yacc.c  */
-#line 361 "parser.y"
+#line 365 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_importlib((yyvsp[(2) - (2)].str))); ;}
     break;
 
   case 19:
 
 /* Line 1455 of yacc.c  */
-#line 362 "parser.y"
+#line 366 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), make_statement_library((yyvsp[(2) - (2)].typelib))); ;}
     break;
 
   case 20:
 
 /* Line 1455 of yacc.c  */
-#line 365 "parser.y"
+#line 369 "parser.y"
     { (yyval.stmt_list) = NULL; ;}
     break;
 
   case 21:
 
 /* Line 1455 of yacc.c  */
-#line 366 "parser.y"
+#line 370 "parser.y"
     { (yyval.stmt_list) = append_statement((yyvsp[(1) - (2)].stmt_list), (yyvsp[(2) - (2)].statement)); ;}
     break;
 
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 374 "parser.y"
+#line 378 "parser.y"
     { (yyval.statement) = make_statement_cppquote((yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 25:
 
 /* Line 1455 of yacc.c  */
-#line 375 "parser.y"
+#line 379 "parser.y"
     { (yyval.statement) = make_statement_type_decl((yyvsp[(1) - (2)].type)); ;}
     break;
 
   case 26:
 
 /* Line 1455 of yacc.c  */
-#line 376 "parser.y"
+#line 380 "parser.y"
     { (yyval.statement) = make_statement_declaration((yyvsp[(1) - (2)].var)); ;}
     break;
 
   case 27:
 
 /* Line 1455 of yacc.c  */
-#line 377 "parser.y"
+#line 381 "parser.y"
     { (yyval.statement) = make_statement_import((yyvsp[(1) - (1)].str)); ;}
     break;
 
   case 28:
 
 /* Line 1455 of yacc.c  */
-#line 378 "parser.y"
+#line 382 "parser.y"
     { (yyval.statement) = (yyvsp[(1) - (2)].statement); ;}
     break;
 
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 385 "parser.y"
+#line 389 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[(1) - (2)].attr_list)); ;}
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 386 "parser.y"
+#line 390 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[(1) - (2)].attr_list)); ;}
     break;
 
   case 34:
 
 /* Line 1455 of yacc.c  */
-#line 387 "parser.y"
+#line 391 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type); (yyval.type)->attrs = check_union_attrs((yyvsp[(1) - (2)].attr_list)); ;}
     break;
 
   case 35:
 
 /* Line 1455 of yacc.c  */
-#line 390 "parser.y"
+#line 394 "parser.y"
     { (yyval.str) = (yyvsp[(3) - (4)].str); ;}
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 392 "parser.y"
+#line 396 "parser.y"
     { assert(yychar == YYEMPTY);
                                                  (yyval.import) = xmalloc(sizeof(struct _import_t));
                                                  (yyval.import)->name = (yyvsp[(2) - (3)].str);
@@ -2884,7 +2998,7 @@ yyreduce:
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 400 "parser.y"
+#line 404 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (3)].import)->name;
                                                  if ((yyvsp[(1) - (3)].import)->import_performed) pop_import();
                                                  free((yyvsp[(1) - (3)].import));
@@ -2894,21 +3008,21 @@ yyreduce:
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 407 "parser.y"
+#line 411 "parser.y"
     { (yyval.str) = (yyvsp[(3) - (5)].str); if(!parse_only) add_importlib((yyvsp[(3) - (5)].str)); ;}
     break;
 
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 410 "parser.y"
+#line 414 "parser.y"
     { (yyval.str) = (yyvsp[(2) - (2)].str); ;}
     break;
 
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 412 "parser.y"
+#line 416 "parser.y"
     { (yyval.typelib) = make_library((yyvsp[(2) - (3)].str), check_library_attrs((yyvsp[(2) - (3)].str), (yyvsp[(1) - (3)].attr_list)));
                                                  if (!parse_only) start_typelib((yyval.typelib));
                                                ;}
@@ -2917,7 +3031,7 @@ yyreduce:
   case 41:
 
 /* Line 1455 of yacc.c  */
-#line 417 "parser.y"
+#line 421 "parser.y"
     { (yyval.typelib) = (yyvsp[(1) - (4)].typelib);
                                                  (yyval.typelib)->stmts = (yyvsp[(2) - (4)].stmt_list);
                                                  if (!parse_only) end_typelib();
@@ -2927,35 +3041,35 @@ yyreduce:
   case 42:
 
 /* Line 1455 of yacc.c  */
-#line 423 "parser.y"
+#line 427 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 427 "parser.y"
+#line 431 "parser.y"
     { check_arg_attrs((yyvsp[(1) - (1)].var)); (yyval.var_list) = append_var( NULL, (yyvsp[(1) - (1)].var) ); ;}
     break;
 
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 428 "parser.y"
+#line 432 "parser.y"
     { check_arg_attrs((yyvsp[(3) - (3)].var)); (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), (yyvsp[(3) - (3)].var) ); ;}
     break;
 
   case 47:
 
 /* Line 1455 of yacc.c  */
-#line 432 "parser.y"
+#line 436 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), make_var(strdup("...")) ); ;}
     break;
 
   case 48:
 
 /* Line 1455 of yacc.c  */
-#line 436 "parser.y"
+#line 440 "parser.y"
     { if ((yyvsp[(2) - (3)].declspec)->stgclass != STG_NONE && (yyvsp[(2) - (3)].declspec)->stgclass != STG_REGISTER)
                                                    error_loc("invalid storage class for function parameter\n");
                                                  (yyval.var) = declare_var((yyvsp[(1) - (3)].attr_list), (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), TRUE);
@@ -2966,7 +3080,7 @@ yyreduce:
   case 49:
 
 /* Line 1455 of yacc.c  */
-#line 441 "parser.y"
+#line 445 "parser.y"
     { if ((yyvsp[(1) - (2)].declspec)->stgclass != STG_NONE && (yyvsp[(1) - (2)].declspec)->stgclass != STG_REGISTER)
                                                    error_loc("invalid storage class for function parameter\n");
                                                  (yyval.var) = declare_var(NULL, (yyvsp[(1) - (2)].declspec), (yyvsp[(2) - (2)].declarator), TRUE);
@@ -2977,678 +3091,860 @@ yyreduce:
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 448 "parser.y"
+#line 452 "parser.y"
     { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
     break;
 
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 449 "parser.y"
+#line 453 "parser.y"
     { (yyval.expr) = make_expr(EXPR_VOID); ;}
     break;
 
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 452 "parser.y"
+#line 456 "parser.y"
     { (yyval.attr_list) = NULL; ;}
     break;
 
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 457 "parser.y"
+#line 461 "parser.y"
     { (yyval.attr_list) = (yyvsp[(2) - (3)].attr_list); ;}
     break;
 
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 460 "parser.y"
+#line 464 "parser.y"
     { (yyval.attr_list) = append_attr( NULL, (yyvsp[(1) - (1)].attr) ); ;}
     break;
 
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 461 "parser.y"
+#line 465 "parser.y"
     { (yyval.attr_list) = append_attr( (yyvsp[(1) - (3)].attr_list), (yyvsp[(3) - (3)].attr) ); ;}
     break;
 
   case 57:
 
 /* Line 1455 of yacc.c  */
-#line 462 "parser.y"
+#line 466 "parser.y"
     { (yyval.attr_list) = append_attr( (yyvsp[(1) - (4)].attr_list), (yyvsp[(4) - (4)].attr) ); ;}
     break;
 
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 465 "parser.y"
+#line 469 "parser.y"
     { (yyval.str_list) = append_str( NULL, (yyvsp[(1) - (1)].str) ); ;}
     break;
 
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 466 "parser.y"
+#line 470 "parser.y"
     { (yyval.str_list) = append_str( (yyvsp[(1) - (3)].str_list), (yyvsp[(3) - (3)].str) ); ;}
     break;
 
   case 60:
 
 /* Line 1455 of yacc.c  */
-#line 469 "parser.y"
+#line 473 "parser.y"
     { (yyval.attr) = NULL; ;}
     break;
 
   case 61:
 
 /* Line 1455 of yacc.c  */
-#line 470 "parser.y"
+#line 474 "parser.y"
     { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); ;}
     break;
 
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 471 "parser.y"
+#line 475 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 63:
 
 /* Line 1455 of yacc.c  */
-#line 472 "parser.y"
+#line 476 "parser.y"
     { (yyval.attr) = make_attr(ATTR_APPOBJECT); ;}
     break;
 
   case 64:
 
 /* Line 1455 of yacc.c  */
-#line 473 "parser.y"
+#line 477 "parser.y"
     { (yyval.attr) = make_attr(ATTR_ASYNC); ;}
     break;
 
   case 65:
 
 /* Line 1455 of yacc.c  */
-#line 474 "parser.y"
+#line 478 "parser.y"
     { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); ;}
     break;
 
   case 66:
 
 /* Line 1455 of yacc.c  */
-#line 475 "parser.y"
+#line 479 "parser.y"
     { (yyval.attr) = make_attr(ATTR_BINDABLE); ;}
     break;
 
   case 67:
 
 /* Line 1455 of yacc.c  */
-#line 476 "parser.y"
+#line 480 "parser.y"
     { (yyval.attr) = make_attr(ATTR_BROADCAST); ;}
     break;
 
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 477 "parser.y"
+#line 481 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[(3) - (4)].var)); ;}
     break;
 
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 478 "parser.y"
+#line 482 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[(3) - (4)].expr_list)); ;}
     break;
 
   case 70:
 
 /* Line 1455 of yacc.c  */
-#line 479 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
+#line 483 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_CODE); ;}
     break;
 
   case 71:
 
 /* Line 1455 of yacc.c  */
-#line 480 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
+#line 484 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_COMMSTATUS); ;}
     break;
 
   case 72:
 
 /* Line 1455 of yacc.c  */
-#line 481 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
+#line 485 "parser.y"
+    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); ;}
     break;
 
   case 73:
 
 /* Line 1455 of yacc.c  */
-#line 482 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
+#line 486 "parser.y"
+    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ ;}
     break;
 
   case 74:
 
 /* Line 1455 of yacc.c  */
-#line 483 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
+#line 487 "parser.y"
+    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ ;}
     break;
 
   case 75:
 
 /* Line 1455 of yacc.c  */
-#line 484 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
+#line 488 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_CONTROL); ;}
     break;
 
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 485 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[(3) - (4)].expr)); ;}
+#line 489 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DECODE); ;}
     break;
 
   case 77:
 
 /* Line 1455 of yacc.c  */
-#line 486 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
+#line 490 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DEFAULT); ;}
     break;
 
   case 78:
 
 /* Line 1455 of yacc.c  */
-#line 487 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
+#line 491 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); ;}
     break;
 
   case 79:
 
 /* Line 1455 of yacc.c  */
-#line 488 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[(3) - (4)].str)); ;}
+#line 492 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); ;}
     break;
 
   case 80:
 
 /* Line 1455 of yacc.c  */
-#line 489 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_DUAL); ;}
+#line 493 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 81:
 
 /* Line 1455 of yacc.c  */
-#line 490 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[(3) - (4)].str_list)); ;}
+#line 494 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); ;}
     break;
 
   case 82:
 
 /* Line 1455 of yacc.c  */
-#line 491 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[(3) - (4)].expr)); ;}
+#line 495 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); ;}
     break;
 
   case 83:
 
 /* Line 1455 of yacc.c  */
-#line 492 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
+#line 496 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); ;}
     break;
 
   case 84:
 
 /* Line 1455 of yacc.c  */
-#line 493 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
+#line 497 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 85:
 
 /* Line 1455 of yacc.c  */
-#line 494 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[(3) - (4)].expr)); ;}
+#line 498 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_DUAL); ;}
     break;
 
   case 86:
 
 /* Line 1455 of yacc.c  */
-#line 495 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[(3) - (4)].str)); ;}
+#line 499 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); ;}
     break;
 
   case 87:
 
 /* Line 1455 of yacc.c  */
-#line 496 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[(3) - (4)].str)); ;}
+#line 500 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_ENCODE); ;}
     break;
 
   case 88:
 
 /* Line 1455 of yacc.c  */
-#line 497 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[(3) - (4)].expr)); ;}
+#line 501 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[(3) - (4)].str_list)); ;}
     break;
 
   case 89:
 
 /* Line 1455 of yacc.c  */
-#line 498 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[(3) - (4)].str)); ;}
+#line 502 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 90:
 
 /* Line 1455 of yacc.c  */
-#line 499 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
+#line 503 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); ;}
     break;
 
   case 91:
 
 /* Line 1455 of yacc.c  */
-#line 500 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[(3) - (4)].expr)); ;}
+#line 504 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); ;}
     break;
 
   case 92:
 
 /* Line 1455 of yacc.c  */
-#line 501 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
+#line 505 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); ;}
     break;
 
   case 93:
 
 /* Line 1455 of yacc.c  */
-#line 502 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[(3) - (4)].expr)); ;}
+#line 506 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_HANDLE); ;}
     break;
 
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 503 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
+#line 507 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 95:
 
 /* Line 1455 of yacc.c  */
-#line 504 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[(4) - (5)].str)); ;}
+#line 508 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 96:
 
 /* Line 1455 of yacc.c  */
-#line 505 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_IN); ;}
+#line 509 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 97:
 
 /* Line 1455 of yacc.c  */
-#line 506 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
+#line 510 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 98:
 
 /* Line 1455 of yacc.c  */
-#line 507 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[(3) - (4)].expr_list)); ;}
+#line 511 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[(3) - (4)].str)); ;}
     break;
 
   case 99:
 
 /* Line 1455 of yacc.c  */
-#line 508 "parser.y"
-    { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[(3) - (4)].expr)); ;}
+#line 512 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_HIDDEN); ;}
     break;
 
   case 100:
 
 /* Line 1455 of yacc.c  */
-#line 509 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PARAMLCID); ;}
+#line 513 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 101:
 
 /* Line 1455 of yacc.c  */
-#line 510 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
+#line 514 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); ;}
     break;
 
   case 102:
 
 /* Line 1455 of yacc.c  */
-#line 511 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
+#line 515 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_IGNORE); ;}
     break;
 
   case 103:
 
 /* Line 1455 of yacc.c  */
-#line 512 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
+#line 516 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 104:
 
 /* Line 1455 of yacc.c  */
-#line 513 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
+#line 517 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); ;}
     break;
 
   case 105:
 
 /* Line 1455 of yacc.c  */
-#line 514 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
+#line 518 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[(4) - (5)].str)); ;}
     break;
 
   case 106:
 
 /* Line 1455 of yacc.c  */
-#line 515 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_ODL); ;}
+#line 519 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_IN); ;}
     break;
 
   case 107:
 
 /* Line 1455 of yacc.c  */
-#line 516 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
+#line 520 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_INPUTSYNC); ;}
     break;
 
   case 108:
 
 /* Line 1455 of yacc.c  */
-#line 517 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
+#line 521 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[(3) - (4)].expr_list)); ;}
     break;
 
   case 109:
 
 /* Line 1455 of yacc.c  */
-#line 518 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_OUT); ;}
+#line 522 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
   case 110:
 
 /* Line 1455 of yacc.c  */
-#line 519 "parser.y"
-    { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[(3) - (4)].num)); ;}
+#line 523 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PARAMLCID); ;}
     break;
 
   case 111:
 
 /* Line 1455 of yacc.c  */
-#line 520 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
+#line 524 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_LICENSED); ;}
     break;
 
   case 112:
 
 /* Line 1455 of yacc.c  */
-#line 521 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
+#line 525 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_LOCAL); ;}
     break;
 
   case 113:
 
 /* Line 1455 of yacc.c  */
-#line 522 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
+#line 526 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_MAYBE); ;}
     break;
 
   case 114:
 
 /* Line 1455 of yacc.c  */
-#line 523 "parser.y"
-    { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
+#line 527 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_MESSAGE); ;}
     break;
 
   case 115:
 
 /* Line 1455 of yacc.c  */
-#line 525 "parser.y"
+#line 528 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_NOCODE); ;}
+    break;
+
+  case 116:
+
+/* Line 1455 of yacc.c  */
+#line 529 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); ;}
+    break;
+
+  case 117:
+
+/* Line 1455 of yacc.c  */
+#line 530 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_NONCREATABLE); ;}
+    break;
+
+  case 118:
+
+/* Line 1455 of yacc.c  */
+#line 531 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); ;}
+    break;
+
+  case 119:
+
+/* Line 1455 of yacc.c  */
+#line 532 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_NOTIFY); ;}
+    break;
+
+  case 120:
+
+/* Line 1455 of yacc.c  */
+#line 533 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); ;}
+    break;
+
+  case 121:
+
+/* Line 1455 of yacc.c  */
+#line 534 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_OBJECT); ;}
+    break;
+
+  case 122:
+
+/* Line 1455 of yacc.c  */
+#line 535 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_ODL); ;}
+    break;
+
+  case 123:
+
+/* Line 1455 of yacc.c  */
+#line 536 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); ;}
+    break;
+
+  case 124:
+
+/* Line 1455 of yacc.c  */
+#line 537 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[(3) - (4)].str)); ;}
+    break;
+
+  case 125:
+
+/* Line 1455 of yacc.c  */
+#line 538 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_OPTIONAL); ;}
+    break;
+
+  case 126:
+
+/* Line 1455 of yacc.c  */
+#line 539 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_OUT); ;}
+    break;
+
+  case 127:
+
+/* Line 1455 of yacc.c  */
+#line 540 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); ;}
+    break;
+
+  case 128:
+
+/* Line 1455 of yacc.c  */
+#line 541 "parser.y"
+    { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[(3) - (4)].num)); ;}
+    break;
+
+  case 129:
+
+/* Line 1455 of yacc.c  */
+#line 542 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[(3) - (4)].str)); ;}
+    break;
+
+  case 130:
+
+/* Line 1455 of yacc.c  */
+#line 543 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PROPGET); ;}
+    break;
+
+  case 131:
+
+/* Line 1455 of yacc.c  */
+#line 544 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PROPPUT); ;}
+    break;
+
+  case 132:
+
+/* Line 1455 of yacc.c  */
+#line 545 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PROPPUTREF); ;}
+    break;
+
+  case 133:
+
+/* Line 1455 of yacc.c  */
+#line 546 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PROXY); ;}
+    break;
+
+  case 134:
+
+/* Line 1455 of yacc.c  */
+#line 547 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_PUBLIC); ;}
+    break;
+
+  case 135:
+
+/* Line 1455 of yacc.c  */
+#line 549 "parser.y"
     { expr_list_t *list = append_expr( NULL, (yyvsp[(3) - (6)].expr) );
                                                  list = append_expr( list, (yyvsp[(5) - (6)].expr) );
                                                  (yyval.attr) = make_attrp(ATTR_RANGE, list); ;}
     break;
 
-  case 116:
+  case 136:
 
 /* Line 1455 of yacc.c  */
-#line 528 "parser.y"
+#line 552 "parser.y"
     { (yyval.attr) = make_attr(ATTR_READONLY); ;}
     break;
 
-  case 117:
+  case 137:
 
 /* Line 1455 of yacc.c  */
-#line 529 "parser.y"
+#line 553 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[(3) - (4)].type)); ;}
+    break;
+
+  case 138:
+
+/* Line 1455 of yacc.c  */
+#line 554 "parser.y"
     { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); ;}
     break;
 
-  case 118:
+  case 139:
 
 /* Line 1455 of yacc.c  */
-#line 530 "parser.y"
+#line 555 "parser.y"
     { (yyval.attr) = make_attr(ATTR_RESTRICTED); ;}
     break;
 
-  case 119:
+  case 140:
 
 /* Line 1455 of yacc.c  */
-#line 531 "parser.y"
+#line 556 "parser.y"
     { (yyval.attr) = make_attr(ATTR_RETVAL); ;}
     break;
 
-  case 120:
+  case 141:
 
 /* Line 1455 of yacc.c  */
-#line 532 "parser.y"
+#line 557 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[(3) - (4)].expr_list)); ;}
     break;
 
-  case 121:
+  case 142:
 
 /* Line 1455 of yacc.c  */
-#line 533 "parser.y"
+#line 558 "parser.y"
     { (yyval.attr) = make_attr(ATTR_SOURCE); ;}
     break;
 
-  case 122:
+  case 143:
 
 /* Line 1455 of yacc.c  */
-#line 534 "parser.y"
+#line 559 "parser.y"
     { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); ;}
     break;
 
-  case 123:
+  case 144:
 
 /* Line 1455 of yacc.c  */
-#line 535 "parser.y"
+#line 560 "parser.y"
     { (yyval.attr) = make_attr(ATTR_STRING); ;}
     break;
 
-  case 124:
+  case 145:
 
 /* Line 1455 of yacc.c  */
-#line 536 "parser.y"
+#line 561 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[(3) - (4)].expr)); ;}
     break;
 
-  case 125:
+  case 146:
 
 /* Line 1455 of yacc.c  */
-#line 537 "parser.y"
+#line 562 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[(3) - (4)].type)); ;}
     break;
 
-  case 126:
+  case 147:
 
 /* Line 1455 of yacc.c  */
-#line 538 "parser.y"
+#line 563 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[(3) - (4)].type)); ;}
     break;
 
-  case 127:
+  case 148:
 
 /* Line 1455 of yacc.c  */
-#line 539 "parser.y"
+#line 564 "parser.y"
+    { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[(3) - (4)].num)); ;}
+    break;
+
+  case 149:
+
+/* Line 1455 of yacc.c  */
+#line 565 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_UIDEFAULT); ;}
+    break;
+
+  case 150:
+
+/* Line 1455 of yacc.c  */
+#line 566 "parser.y"
+    { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); ;}
+    break;
+
+  case 151:
+
+/* Line 1455 of yacc.c  */
+#line 567 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[(3) - (4)].type)); ;}
+    break;
+
+  case 152:
+
+/* Line 1455 of yacc.c  */
+#line 568 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[(3) - (4)].uuid)); ;}
     break;
 
-  case 128:
+  case 153:
 
 /* Line 1455 of yacc.c  */
-#line 540 "parser.y"
+#line 569 "parser.y"
     { (yyval.attr) = make_attr(ATTR_V1ENUM); ;}
     break;
 
-  case 129:
+  case 154:
 
 /* Line 1455 of yacc.c  */
-#line 541 "parser.y"
+#line 570 "parser.y"
     { (yyval.attr) = make_attr(ATTR_VARARG); ;}
     break;
 
-  case 130:
+  case 155:
 
 /* Line 1455 of yacc.c  */
-#line 542 "parser.y"
+#line 571 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[(3) - (4)].num)); ;}
     break;
 
-  case 131:
+  case 156:
 
 /* Line 1455 of yacc.c  */
-#line 543 "parser.y"
+#line 572 "parser.y"
+    { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[(3) - (4)].str)); ;}
+    break;
+
+  case 157:
+
+/* Line 1455 of yacc.c  */
+#line 573 "parser.y"
     { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[(3) - (4)].type)); ;}
     break;
 
-  case 132:
+  case 158:
 
 /* Line 1455 of yacc.c  */
-#line 544 "parser.y"
+#line 574 "parser.y"
     { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[(1) - (1)].num)); ;}
     break;
 
-  case 134:
+  case 160:
 
 /* Line 1455 of yacc.c  */
-#line 549 "parser.y"
+#line 579 "parser.y"
     { if (!is_valid_uuid((yyvsp[(1) - (1)].str)))
                                                    error_loc("invalid UUID: %s\n", (yyvsp[(1) - (1)].str));
                                                  (yyval.uuid) = parse_uuid((yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 135:
+  case 161:
 
 /* Line 1455 of yacc.c  */
-#line 554 "parser.y"
+#line 584 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 136:
+  case 162:
 
 /* Line 1455 of yacc.c  */
-#line 555 "parser.y"
+#line 585 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 137:
+  case 163:
 
 /* Line 1455 of yacc.c  */
-#line 556 "parser.y"
+#line 586 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 138:
+  case 164:
 
 /* Line 1455 of yacc.c  */
-#line 557 "parser.y"
+#line 587 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 139:
+  case 165:
 
 /* Line 1455 of yacc.c  */
-#line 560 "parser.y"
+#line 590 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 140:
+  case 166:
 
 /* Line 1455 of yacc.c  */
-#line 561 "parser.y"
+#line 591 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (2)].var_list), (yyvsp[(2) - (2)].var) ); ;}
     break;
 
-  case 141:
+  case 167:
 
 /* Line 1455 of yacc.c  */
-#line 564 "parser.y"
+#line 594 "parser.y"
     { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[(2) - (4)].expr) ));
                                                  (yyval.var) = (yyvsp[(4) - (4)].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
                                                  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
                                                ;}
     break;
 
-  case 142:
+  case 168:
 
 /* Line 1455 of yacc.c  */
-#line 568 "parser.y"
+#line 598 "parser.y"
     { attr_t *a = make_attr(ATTR_DEFAULT);
                                                  (yyval.var) = (yyvsp[(3) - (3)].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
                                                  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
                                                ;}
     break;
 
-  case 143:
+  case 169:
 
 /* Line 1455 of yacc.c  */
-#line 574 "parser.y"
+#line 604 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 144:
+  case 170:
 
 /* Line 1455 of yacc.c  */
-#line 575 "parser.y"
+#line 605 "parser.y"
     { (yyval.var_list) = (yyvsp[(1) - (2)].var_list); ;}
     break;
 
-  case 146:
+  case 172:
 
 /* Line 1455 of yacc.c  */
-#line 579 "parser.y"
+#line 609 "parser.y"
     { if (!(yyvsp[(1) - (1)].var)->eval)
                                                    (yyvsp[(1) - (1)].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                   (yyval.var_list) = append_var( NULL, (yyvsp[(1) - (1)].var) );
                                                ;}
     break;
 
-  case 147:
+  case 173:
 
 /* Line 1455 of yacc.c  */
-#line 583 "parser.y"
+#line 613 "parser.y"
     { if (!(yyvsp[(3) - (3)].var)->eval)
                                                   {
                                                     var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
@@ -3658,464 +3954,464 @@ yyreduce:
                                                ;}
     break;
 
-  case 148:
+  case 174:
 
 /* Line 1455 of yacc.c  */
-#line 592 "parser.y"
+#line 622 "parser.y"
     { (yyval.var) = reg_const((yyvsp[(1) - (3)].var));
                                                  (yyval.var)->eval = (yyvsp[(3) - (3)].expr);
                                                   (yyval.var)->type = type_new_int(TYPE_BASIC_INT, 0);
                                                ;}
     break;
 
-  case 149:
+  case 175:
 
 /* Line 1455 of yacc.c  */
-#line 596 "parser.y"
+#line 626 "parser.y"
     { (yyval.var) = reg_const((yyvsp[(1) - (1)].var));
                                                   (yyval.var)->type = type_new_int(TYPE_BASIC_INT, 0);
                                                ;}
     break;
 
-  case 150:
+  case 176:
 
 /* Line 1455 of yacc.c  */
-#line 601 "parser.y"
+#line 631 "parser.y"
     { (yyval.type) = type_new_enum((yyvsp[(2) - (5)].str), TRUE, (yyvsp[(4) - (5)].var_list)); ;}
     break;
 
-  case 151:
+  case 177:
 
 /* Line 1455 of yacc.c  */
-#line 604 "parser.y"
+#line 634 "parser.y"
     { (yyval.expr_list) = append_expr( NULL, (yyvsp[(1) - (1)].expr) ); ;}
     break;
 
-  case 152:
+  case 178:
 
 /* Line 1455 of yacc.c  */
-#line 605 "parser.y"
+#line 635 "parser.y"
     { (yyval.expr_list) = append_expr( (yyvsp[(1) - (3)].expr_list), (yyvsp[(3) - (3)].expr) ); ;}
     break;
 
-  case 153:
+  case 179:
 
 /* Line 1455 of yacc.c  */
-#line 618 "parser.y"
+#line 648 "parser.y"
     { (yyval.expr) = make_expr(EXPR_VOID); ;}
     break;
 
-  case 155:
+  case 181:
 
 /* Line 1455 of yacc.c  */
-#line 622 "parser.y"
+#line 652 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[(1) - (1)].num)); ;}
     break;
 
-  case 156:
+  case 182:
 
 /* Line 1455 of yacc.c  */
-#line 623 "parser.y"
+#line 653 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[(1) - (1)].num)); ;}
     break;
 
-  case 157:
+  case 183:
 
 /* Line 1455 of yacc.c  */
-#line 624 "parser.y"
+#line 654 "parser.y"
     { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[(1) - (1)].dbl)); ;}
     break;
 
-  case 158:
+  case 184:
 
 /* Line 1455 of yacc.c  */
-#line 625 "parser.y"
+#line 655 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); ;}
     break;
 
-  case 159:
+  case 185:
 
 /* Line 1455 of yacc.c  */
-#line 626 "parser.y"
+#line 656 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_NUM, 0); ;}
     break;
 
-  case 160:
+  case 186:
 
 /* Line 1455 of yacc.c  */
-#line 627 "parser.y"
+#line 657 "parser.y"
     { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); ;}
     break;
 
-  case 161:
+  case 187:
 
 /* Line 1455 of yacc.c  */
-#line 628 "parser.y"
+#line 658 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 162:
+  case 188:
 
 /* Line 1455 of yacc.c  */
-#line 629 "parser.y"
+#line 659 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 163:
+  case 189:
 
 /* Line 1455 of yacc.c  */
-#line 630 "parser.y"
+#line 660 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 164:
+  case 190:
 
 /* Line 1455 of yacc.c  */
-#line 631 "parser.y"
+#line 661 "parser.y"
     { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 165:
+  case 191:
 
 /* Line 1455 of yacc.c  */
-#line 632 "parser.y"
+#line 662 "parser.y"
     { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[(1) - (5)].expr), (yyvsp[(3) - (5)].expr), (yyvsp[(5) - (5)].expr)); ;}
     break;
 
-  case 166:
+  case 192:
 
 /* Line 1455 of yacc.c  */
-#line 633 "parser.y"
+#line 663 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 167:
+  case 193:
 
 /* Line 1455 of yacc.c  */
-#line 634 "parser.y"
+#line 664 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 168:
+  case 194:
 
 /* Line 1455 of yacc.c  */
-#line 635 "parser.y"
+#line 665 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 169:
+  case 195:
 
 /* Line 1455 of yacc.c  */
-#line 636 "parser.y"
+#line 666 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 170:
+  case 196:
 
 /* Line 1455 of yacc.c  */
-#line 637 "parser.y"
+#line 667 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 171:
+  case 197:
 
 /* Line 1455 of yacc.c  */
-#line 638 "parser.y"
+#line 668 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 172:
+  case 198:
 
 /* Line 1455 of yacc.c  */
-#line 639 "parser.y"
+#line 669 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 173:
+  case 199:
 
 /* Line 1455 of yacc.c  */
-#line 640 "parser.y"
+#line 670 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 174:
+  case 200:
 
 /* Line 1455 of yacc.c  */
-#line 641 "parser.y"
+#line 671 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 175:
+  case 201:
 
 /* Line 1455 of yacc.c  */
-#line 642 "parser.y"
+#line 672 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 176:
+  case 202:
 
 /* Line 1455 of yacc.c  */
-#line 643 "parser.y"
+#line 673 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 177:
+  case 203:
 
 /* Line 1455 of yacc.c  */
-#line 644 "parser.y"
+#line 674 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 178:
+  case 204:
 
 /* Line 1455 of yacc.c  */
-#line 645 "parser.y"
+#line 675 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 179:
+  case 205:
 
 /* Line 1455 of yacc.c  */
-#line 646 "parser.y"
+#line 676 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 180:
+  case 206:
 
 /* Line 1455 of yacc.c  */
-#line 647 "parser.y"
+#line 677 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 181:
+  case 207:
 
 /* Line 1455 of yacc.c  */
-#line 648 "parser.y"
+#line 678 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 182:
+  case 208:
 
 /* Line 1455 of yacc.c  */
-#line 649 "parser.y"
+#line 679 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 183:
+  case 209:
 
 /* Line 1455 of yacc.c  */
-#line 650 "parser.y"
+#line 680 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
     break;
 
-  case 184:
+  case 210:
 
 /* Line 1455 of yacc.c  */
-#line 651 "parser.y"
+#line 681 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 185:
+  case 211:
 
 /* Line 1455 of yacc.c  */
-#line 652 "parser.y"
+#line 682 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 186:
+  case 212:
 
 /* Line 1455 of yacc.c  */
-#line 653 "parser.y"
+#line 683 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 187:
+  case 213:
 
 /* Line 1455 of yacc.c  */
-#line 654 "parser.y"
+#line 684 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 188:
+  case 214:
 
 /* Line 1455 of yacc.c  */
-#line 655 "parser.y"
+#line 685 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 189:
+  case 215:
 
 /* Line 1455 of yacc.c  */
-#line 656 "parser.y"
+#line 686 "parser.y"
     { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 190:
+  case 216:
 
 /* Line 1455 of yacc.c  */
-#line 657 "parser.y"
+#line 687 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[(1) - (3)].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[(3) - (3)].str))); ;}
     break;
 
-  case 191:
+  case 217:
 
 /* Line 1455 of yacc.c  */
-#line 658 "parser.y"
+#line 688 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[(1) - (3)].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[(3) - (3)].str))); ;}
     break;
 
-  case 192:
+  case 218:
 
 /* Line 1455 of yacc.c  */
-#line 660 "parser.y"
+#line 690 "parser.y"
     { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[(2) - (5)].declspec), (yyvsp[(3) - (5)].declarator), 0), (yyvsp[(5) - (5)].expr)); free((yyvsp[(2) - (5)].declspec)); free((yyvsp[(3) - (5)].declarator)); ;}
     break;
 
-  case 193:
+  case 219:
 
 /* Line 1455 of yacc.c  */
-#line 662 "parser.y"
+#line 692 "parser.y"
     { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[(3) - (5)].declspec), (yyvsp[(4) - (5)].declarator), 0), NULL); free((yyvsp[(3) - (5)].declspec)); free((yyvsp[(4) - (5)].declarator)); ;}
     break;
 
-  case 194:
+  case 220:
 
 /* Line 1455 of yacc.c  */
-#line 663 "parser.y"
+#line 693 "parser.y"
     { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[(1) - (4)].expr), (yyvsp[(3) - (4)].expr)); ;}
     break;
 
-  case 195:
+  case 221:
 
 /* Line 1455 of yacc.c  */
-#line 664 "parser.y"
+#line 694 "parser.y"
     { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
     break;
 
-  case 196:
+  case 222:
 
 /* Line 1455 of yacc.c  */
-#line 667 "parser.y"
+#line 697 "parser.y"
     { (yyval.expr_list) = append_expr( NULL, (yyvsp[(1) - (1)].expr) ); ;}
     break;
 
-  case 197:
+  case 223:
 
 /* Line 1455 of yacc.c  */
-#line 668 "parser.y"
+#line 698 "parser.y"
     { (yyval.expr_list) = append_expr( (yyvsp[(1) - (3)].expr_list), (yyvsp[(3) - (3)].expr) ); ;}
     break;
 
-  case 198:
+  case 224:
 
 /* Line 1455 of yacc.c  */
-#line 671 "parser.y"
+#line 701 "parser.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr);
                                                  if (!(yyval.expr)->is_const)
                                                      error_loc("expression is not an integer constant\n");
                                                ;}
     break;
 
-  case 199:
+  case 225:
 
 /* Line 1455 of yacc.c  */
-#line 677 "parser.y"
+#line 707 "parser.y"
     { (yyval.expr) = (yyvsp[(1) - (1)].expr);
                                                  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
                                                      error_loc("expression is not constant\n");
                                                ;}
     break;
 
-  case 200:
+  case 226:
 
 /* Line 1455 of yacc.c  */
-#line 683 "parser.y"
+#line 713 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 201:
+  case 227:
 
 /* Line 1455 of yacc.c  */
-#line 684 "parser.y"
+#line 714 "parser.y"
     { (yyval.var_list) = append_var_list((yyvsp[(1) - (2)].var_list), (yyvsp[(2) - (2)].var_list)); ;}
     break;
 
-  case 202:
+  case 228:
 
 /* Line 1455 of yacc.c  */
-#line 688 "parser.y"
+#line 718 "parser.y"
     { const char *first = LIST_ENTRY(list_head((yyvsp[(3) - (4)].declarator_list)), declarator_t, entry)->var->name;
                                                  check_field_attrs(first, (yyvsp[(1) - (4)].attr_list));
                                                  (yyval.var_list) = set_var_types((yyvsp[(1) - (4)].attr_list), (yyvsp[(2) - (4)].declspec), (yyvsp[(3) - (4)].declarator_list));
                                                ;}
     break;
 
-  case 203:
+  case 229:
 
 /* Line 1455 of yacc.c  */
-#line 692 "parser.y"
+#line 722 "parser.y"
     { var_t *v = make_var(NULL);
                                                  v->type = (yyvsp[(2) - (3)].type); v->attrs = (yyvsp[(1) - (3)].attr_list);
                                                  (yyval.var_list) = append_var(NULL, v);
                                                ;}
     break;
 
-  case 204:
+  case 230:
 
 /* Line 1455 of yacc.c  */
-#line 699 "parser.y"
+#line 729 "parser.y"
     { (yyval.var) = (yyvsp[(1) - (2)].var); ;}
     break;
 
-  case 205:
+  case 231:
 
 /* Line 1455 of yacc.c  */
-#line 700 "parser.y"
+#line 730 "parser.y"
     { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[(1) - (2)].attr_list); ;}
     break;
 
-  case 206:
+  case 232:
 
 /* Line 1455 of yacc.c  */
-#line 703 "parser.y"
+#line 733 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 207:
+  case 233:
 
 /* Line 1455 of yacc.c  */
-#line 704 "parser.y"
+#line 734 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (2)].var_list), (yyvsp[(2) - (2)].var) ); ;}
     break;
 
-  case 208:
+  case 234:
 
 /* Line 1455 of yacc.c  */
-#line 708 "parser.y"
+#line 738 "parser.y"
     { (yyval.var) = (yyvsp[(1) - (2)].var); ;}
     break;
 
-  case 209:
+  case 235:
 
 /* Line 1455 of yacc.c  */
-#line 709 "parser.y"
+#line 739 "parser.y"
     { (yyval.var) = NULL; ;}
     break;
 
-  case 210:
+  case 236:
 
 /* Line 1455 of yacc.c  */
-#line 712 "parser.y"
+#line 742 "parser.y"
     { (yyval.var) = declare_var(check_field_attrs((yyvsp[(3) - (3)].declarator)->var->name, (yyvsp[(1) - (3)].attr_list)),
                                                                (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), FALSE);
                                                  free((yyvsp[(3) - (3)].declarator));
                                                ;}
     break;
 
-  case 211:
+  case 237:
 
 /* Line 1455 of yacc.c  */
-#line 718 "parser.y"
+#line 748 "parser.y"
     { (yyval.var) = (yyvsp[(1) - (1)].var);
                                                  if (type_get_type((yyval.var)->type) != TYPE_FUNCTION)
                                                    error_loc("only methods may be declared inside the methods section of a dispinterface\n");
@@ -4123,203 +4419,203 @@ yyreduce:
                                                ;}
     break;
 
-  case 212:
+  case 238:
 
 /* Line 1455 of yacc.c  */
-#line 727 "parser.y"
+#line 757 "parser.y"
     { (yyval.var) = declare_var((yyvsp[(1) - (3)].attr_list), (yyvsp[(2) - (3)].declspec), (yyvsp[(3) - (3)].declarator), FALSE);
                                                  free((yyvsp[(3) - (3)].declarator));
                                                ;}
     break;
 
-  case 213:
+  case 239:
 
 /* Line 1455 of yacc.c  */
-#line 730 "parser.y"
+#line 760 "parser.y"
     { (yyval.var) = declare_var(NULL, (yyvsp[(1) - (2)].declspec), (yyvsp[(2) - (2)].declarator), FALSE);
                                                  free((yyvsp[(2) - (2)].declarator));
                                                ;}
     break;
 
-  case 214:
+  case 240:
 
 /* Line 1455 of yacc.c  */
-#line 735 "parser.y"
+#line 765 "parser.y"
     { (yyval.var) = NULL; ;}
     break;
 
-  case 216:
+  case 242:
 
 /* Line 1455 of yacc.c  */
-#line 739 "parser.y"
+#line 769 "parser.y"
     { (yyval.str) = NULL; ;}
     break;
 
-  case 217:
+  case 243:
 
 /* Line 1455 of yacc.c  */
-#line 740 "parser.y"
+#line 770 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 218:
+  case 244:
 
 /* Line 1455 of yacc.c  */
-#line 741 "parser.y"
+#line 771 "parser.y"
     { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
     break;
 
-  case 219:
+  case 245:
 
 /* Line 1455 of yacc.c  */
-#line 744 "parser.y"
+#line 774 "parser.y"
     { (yyval.var) = make_var((yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 220:
+  case 246:
 
 /* Line 1455 of yacc.c  */
-#line 746 "parser.y"
+#line 776 "parser.y"
     { (yyval.var) = make_var((yyvsp[(1) - (1)].str)); ;}
     break;
 
-  case 221:
+  case 247:
 
 /* Line 1455 of yacc.c  */
-#line 749 "parser.y"
+#line 779 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 222:
+  case 248:
 
 /* Line 1455 of yacc.c  */
-#line 750 "parser.y"
+#line 780 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 224:
+  case 250:
 
 /* Line 1455 of yacc.c  */
-#line 752 "parser.y"
+#line 782 "parser.y"
     { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[(2) - (2)].type)), -1); ;}
     break;
 
-  case 225:
+  case 251:
 
 /* Line 1455 of yacc.c  */
-#line 753 "parser.y"
+#line 783 "parser.y"
     { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[(2) - (2)].type)), 1); ;}
     break;
 
-  case 226:
+  case 252:
 
 /* Line 1455 of yacc.c  */
-#line 754 "parser.y"
+#line 784 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); ;}
     break;
 
-  case 227:
+  case 253:
 
 /* Line 1455 of yacc.c  */
-#line 755 "parser.y"
+#line 785 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 228:
+  case 254:
 
 /* Line 1455 of yacc.c  */
-#line 756 "parser.y"
+#line 786 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 229:
+  case 255:
 
 /* Line 1455 of yacc.c  */
-#line 757 "parser.y"
+#line 787 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 230:
+  case 256:
 
 /* Line 1455 of yacc.c  */
-#line 758 "parser.y"
+#line 788 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 231:
+  case 257:
 
 /* Line 1455 of yacc.c  */
-#line 759 "parser.y"
+#line 789 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 234:
+  case 260:
 
 /* Line 1455 of yacc.c  */
-#line 766 "parser.y"
+#line 796 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); ;}
     break;
 
-  case 235:
+  case 261:
 
 /* Line 1455 of yacc.c  */
-#line 767 "parser.y"
+#line 797 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); ;}
     break;
 
-  case 236:
+  case 262:
 
 /* Line 1455 of yacc.c  */
-#line 768 "parser.y"
+#line 798 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); ;}
     break;
 
-  case 237:
+  case 263:
 
 /* Line 1455 of yacc.c  */
-#line 769 "parser.y"
+#line 799 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); ;}
     break;
 
-  case 238:
+  case 264:
 
 /* Line 1455 of yacc.c  */
-#line 770 "parser.y"
+#line 800 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); ;}
     break;
 
-  case 239:
+  case 265:
 
 /* Line 1455 of yacc.c  */
-#line 771 "parser.y"
+#line 801 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); ;}
     break;
 
-  case 240:
+  case 266:
 
 /* Line 1455 of yacc.c  */
-#line 772 "parser.y"
+#line 802 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); ;}
     break;
 
-  case 241:
+  case 267:
 
 /* Line 1455 of yacc.c  */
-#line 773 "parser.y"
+#line 803 "parser.y"
     { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); ;}
     break;
 
-  case 242:
+  case 268:
 
 /* Line 1455 of yacc.c  */
-#line 776 "parser.y"
+#line 806 "parser.y"
     { (yyval.type) = type_new_coclass((yyvsp[(2) - (2)].str)); ;}
     break;
 
-  case 243:
+  case 269:
 
 /* Line 1455 of yacc.c  */
-#line 777 "parser.y"
+#line 807 "parser.y"
     { (yyval.type) = find_type((yyvsp[(2) - (2)].str), 0);
                                                  if (type_get_type_detect_alias((yyval.type)) != TYPE_COCLASS)
                                                    error_loc("%s was not declared a coclass at %s:%d\n",
@@ -4328,62 +4624,62 @@ yyreduce:
                                                ;}
     break;
 
-  case 244:
+  case 270:
 
 /* Line 1455 of yacc.c  */
-#line 785 "parser.y"
+#line 815 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type);
                                                  check_def((yyval.type));
                                                  (yyval.type)->attrs = check_coclass_attrs((yyvsp[(2) - (2)].type)->name, (yyvsp[(1) - (2)].attr_list));
                                                ;}
     break;
 
-  case 245:
+  case 271:
 
 /* Line 1455 of yacc.c  */
-#line 792 "parser.y"
+#line 822 "parser.y"
     { (yyval.type) = type_coclass_define((yyvsp[(1) - (5)].type), (yyvsp[(3) - (5)].ifref_list)); ;}
     break;
 
-  case 246:
+  case 272:
 
 /* Line 1455 of yacc.c  */
-#line 795 "parser.y"
+#line 825 "parser.y"
     { (yyval.ifref_list) = NULL; ;}
     break;
 
-  case 247:
+  case 273:
 
 /* Line 1455 of yacc.c  */
-#line 796 "parser.y"
+#line 826 "parser.y"
     { (yyval.ifref_list) = append_ifref( (yyvsp[(1) - (2)].ifref_list), (yyvsp[(2) - (2)].ifref) ); ;}
     break;
 
-  case 248:
+  case 274:
 
 /* Line 1455 of yacc.c  */
-#line 800 "parser.y"
+#line 830 "parser.y"
     { (yyval.ifref) = make_ifref((yyvsp[(2) - (2)].type)); (yyval.ifref)->attrs = (yyvsp[(1) - (2)].attr_list); ;}
     break;
 
-  case 249:
+  case 275:
 
 /* Line 1455 of yacc.c  */
-#line 803 "parser.y"
+#line 833 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
-  case 250:
+  case 276:
 
 /* Line 1455 of yacc.c  */
-#line 804 "parser.y"
+#line 834 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
-  case 251:
+  case 277:
 
 /* Line 1455 of yacc.c  */
-#line 807 "parser.y"
+#line 837 "parser.y"
     { attr_t *attrs;
                                                  (yyval.type) = (yyvsp[(2) - (2)].type);
                                                  check_def((yyval.type));
@@ -4393,84 +4689,84 @@ yyreduce:
                                                ;}
     break;
 
-  case 252:
+  case 278:
 
 /* Line 1455 of yacc.c  */
-#line 816 "parser.y"
+#line 846 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 253:
+  case 279:
 
 /* Line 1455 of yacc.c  */
-#line 817 "parser.y"
+#line 847 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), (yyvsp[(2) - (3)].var) ); ;}
     break;
 
-  case 254:
+  case 280:
 
 /* Line 1455 of yacc.c  */
-#line 820 "parser.y"
+#line 850 "parser.y"
     { (yyval.var_list) = NULL; ;}
     break;
 
-  case 255:
+  case 281:
 
 /* Line 1455 of yacc.c  */
-#line 821 "parser.y"
+#line 851 "parser.y"
     { (yyval.var_list) = append_var( (yyvsp[(1) - (3)].var_list), (yyvsp[(2) - (3)].var) ); ;}
     break;
 
-  case 256:
+  case 282:
 
 /* Line 1455 of yacc.c  */
-#line 827 "parser.y"
+#line 857 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (5)].type);
                                                  type_dispinterface_define((yyval.type), (yyvsp[(3) - (5)].var_list), (yyvsp[(4) - (5)].var_list));
                                                ;}
     break;
 
-  case 257:
+  case 283:
 
 /* Line 1455 of yacc.c  */
-#line 831 "parser.y"
+#line 861 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (5)].type);
                                                  type_dispinterface_define_from_iface((yyval.type), (yyvsp[(3) - (5)].type));
                                                ;}
     break;
 
-  case 258:
+  case 284:
 
 /* Line 1455 of yacc.c  */
-#line 836 "parser.y"
+#line 866 "parser.y"
     { (yyval.type) = NULL; ;}
     break;
 
-  case 259:
+  case 285:
 
 /* Line 1455 of yacc.c  */
-#line 837 "parser.y"
+#line 867 "parser.y"
     { (yyval.type) = find_type_or_error2((yyvsp[(2) - (2)].str), 0); ;}
     break;
 
-  case 260:
+  case 286:
 
 /* Line 1455 of yacc.c  */
-#line 840 "parser.y"
+#line 870 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
-  case 261:
+  case 287:
 
 /* Line 1455 of yacc.c  */
-#line 841 "parser.y"
+#line 871 "parser.y"
     { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[(2) - (2)].str), 0); ;}
     break;
 
-  case 262:
+  case 288:
 
 /* Line 1455 of yacc.c  */
-#line 844 "parser.y"
+#line 874 "parser.y"
     { (yyval.ifinfo).interface = (yyvsp[(2) - (2)].type);
                                                  (yyval.ifinfo).old_pointer_default = pointer_default;
                                                  if (is_attr((yyvsp[(1) - (2)].attr_list), ATTR_POINTERDEFAULT))
@@ -4481,582 +4777,617 @@ yyreduce:
                                                ;}
     break;
 
-  case 263:
+  case 289:
 
 /* Line 1455 of yacc.c  */
-#line 855 "parser.y"
+#line 885 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (6)].ifinfo).interface;
                                                  type_interface_define((yyval.type), (yyvsp[(2) - (6)].type), (yyvsp[(4) - (6)].stmt_list));
                                                  pointer_default = (yyvsp[(1) - (6)].ifinfo).old_pointer_default;
                                                ;}
     break;
 
-  case 264:
+  case 290:
 
 /* Line 1455 of yacc.c  */
-#line 863 "parser.y"
+#line 893 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (8)].ifinfo).interface;
                                                  type_interface_define((yyval.type), find_type_or_error2((yyvsp[(3) - (8)].str), 0), (yyvsp[(6) - (8)].stmt_list));
                                                  pointer_default = (yyvsp[(1) - (8)].ifinfo).old_pointer_default;
                                                ;}
     break;
 
-  case 265:
+  case 291:
 
 /* Line 1455 of yacc.c  */
-#line 867 "parser.y"
+#line 897 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); ;}
     break;
 
-  case 266:
+  case 292:
 
 /* Line 1455 of yacc.c  */
-#line 871 "parser.y"
+#line 901 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); ;}
     break;
 
-  case 267:
+  case 293:
 
 /* Line 1455 of yacc.c  */
-#line 872 "parser.y"
+#line 902 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (2)].type); ;}
     break;
 
-  case 268:
+  case 294:
 
 /* Line 1455 of yacc.c  */
-#line 875 "parser.y"
+#line 905 "parser.y"
     { (yyval.type) = type_new_module((yyvsp[(2) - (2)].str)); ;}
     break;
 
-  case 269:
+  case 295:
 
 /* Line 1455 of yacc.c  */
-#line 876 "parser.y"
+#line 906 "parser.y"
     { (yyval.type) = type_new_module((yyvsp[(2) - (2)].str)); ;}
     break;
 
-  case 270:
+  case 296:
 
 /* Line 1455 of yacc.c  */
-#line 879 "parser.y"
+#line 909 "parser.y"
     { (yyval.type) = (yyvsp[(2) - (2)].type);
                                                  (yyval.type)->attrs = check_module_attrs((yyvsp[(2) - (2)].type)->name, (yyvsp[(1) - (2)].attr_list));
                                                ;}
     break;
 
-  case 271:
+  case 297:
 
 /* Line 1455 of yacc.c  */
-#line 885 "parser.y"
+#line 915 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (5)].type);
                                                   type_module_define((yyval.type), (yyvsp[(3) - (5)].stmt_list));
                                                ;}
     break;
 
-  case 272:
+  case 298:
 
 /* Line 1455 of yacc.c  */
-#line 891 "parser.y"
+#line 921 "parser.y"
     { (yyval.stgclass) = STG_EXTERN; ;}
     break;
 
-  case 273:
+  case 299:
 
 /* Line 1455 of yacc.c  */
-#line 892 "parser.y"
+#line 922 "parser.y"
     { (yyval.stgclass) = STG_STATIC; ;}
     break;
 
-  case 274:
+  case 300:
 
 /* Line 1455 of yacc.c  */
-#line 893 "parser.y"
+#line 923 "parser.y"
     { (yyval.stgclass) = STG_REGISTER; ;}
     break;
 
-  case 275:
+  case 301:
 
 /* Line 1455 of yacc.c  */
-#line 897 "parser.y"
+#line 927 "parser.y"
     { (yyval.attr) = make_attr(ATTR_INLINE); ;}
     break;
 
-  case 276:
+  case 302:
 
 /* Line 1455 of yacc.c  */
-#line 901 "parser.y"
+#line 931 "parser.y"
     { (yyval.attr) = make_attr(ATTR_CONST); ;}
     break;
 
-  case 277:
+  case 303:
 
 /* Line 1455 of yacc.c  */
-#line 904 "parser.y"
+#line 934 "parser.y"
     { (yyval.attr_list) = NULL; ;}
     break;
 
-  case 278:
+  case 304:
 
 /* Line 1455 of yacc.c  */
-#line 905 "parser.y"
+#line 935 "parser.y"
     { (yyval.attr_list) = append_attr((yyvsp[(1) - (2)].attr_list), (yyvsp[(2) - (2)].attr)); ;}
     break;
 
-  case 279:
+  case 305:
 
 /* Line 1455 of yacc.c  */
-#line 908 "parser.y"
+#line 938 "parser.y"
     { (yyval.declspec) = make_decl_spec((yyvsp[(1) - (2)].type), (yyvsp[(2) - (2)].declspec), NULL, NULL, STG_NONE); ;}
     break;
 
-  case 280:
+  case 306:
 
 /* Line 1455 of yacc.c  */
-#line 910 "parser.y"
+#line 940 "parser.y"
     { (yyval.declspec) = make_decl_spec((yyvsp[(2) - (3)].type), (yyvsp[(1) - (3)].declspec), (yyvsp[(3) - (3)].declspec), NULL, STG_NONE); ;}
     break;
 
-  case 281:
+  case 307:
 
 /* Line 1455 of yacc.c  */
-#line 913 "parser.y"
+#line 943 "parser.y"
     { (yyval.declspec) = NULL; ;}
     break;
 
-  case 283:
+  case 309:
 
 /* Line 1455 of yacc.c  */
-#line 918 "parser.y"
+#line 948 "parser.y"
     { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[(2) - (2)].declspec), NULL, (yyvsp[(1) - (2)].attr), STG_NONE); ;}
     break;
 
-  case 284:
+  case 310:
 
 /* Line 1455 of yacc.c  */
-#line 919 "parser.y"
+#line 949 "parser.y"
     { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[(2) - (2)].declspec), NULL, (yyvsp[(1) - (2)].attr), STG_NONE); ;}
     break;
 
-  case 285:
+  case 311:
 
 /* Line 1455 of yacc.c  */
-#line 920 "parser.y"
+#line 950 "parser.y"
     { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[(2) - (2)].declspec), NULL, NULL, (yyvsp[(1) - (2)].stgclass)); ;}
     break;
 
-  case 286:
+  case 312:
 
 /* Line 1455 of yacc.c  */
-#line 925 "parser.y"
+#line 955 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
-  case 287:
+  case 313:
 
 /* Line 1455 of yacc.c  */
-#line 926 "parser.y"
+#line 956 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); if ((yyval.declarator)->func_type) (yyval.declarator)->func_type->attrs = append_attr((yyval.declarator)->func_type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str)));
                                                           else if ((yyval.declarator)->type) (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
-  case 289:
+  case 315:
 
 /* Line 1455 of yacc.c  */
-#line 932 "parser.y"
+#line 962 "parser.y"
     { (yyval.declarator) = make_declarator((yyvsp[(1) - (1)].var)); ;}
     break;
 
-  case 290:
+  case 316:
 
 /* Line 1455 of yacc.c  */
-#line 933 "parser.y"
+#line 963 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (3)].declarator); ;}
     break;
 
-  case 291:
+  case 317:
 
 /* Line 1455 of yacc.c  */
-#line 934 "parser.y"
+#line 964 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 292:
+  case 318:
 
 /* Line 1455 of yacc.c  */
-#line 935 "parser.y"
+#line 965 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (4)].declarator);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(3) - (4)].var_list)));
                                                  (yyval.declarator)->type = NULL;
                                                ;}
     break;
 
-  case 293:
+  case 319:
 
 /* Line 1455 of yacc.c  */
-#line 944 "parser.y"
+#line 974 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
-  case 294:
+  case 320:
 
 /* Line 1455 of yacc.c  */
-#line 945 "parser.y"
+#line 975 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); if ((yyval.declarator)->func_type) (yyval.declarator)->func_type->attrs = append_attr((yyval.declarator)->func_type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str)));
                                                           else if ((yyval.declarator)->type) (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
-  case 296:
+  case 322:
 
 /* Line 1455 of yacc.c  */
-#line 953 "parser.y"
+#line 983 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
-  case 297:
+  case 323:
 
 /* Line 1455 of yacc.c  */
-#line 954 "parser.y"
+#line 984 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); if ((yyval.declarator)->func_type) (yyval.declarator)->func_type->attrs = append_attr((yyval.declarator)->func_type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str)));
                                                           else if ((yyval.declarator)->type) (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
-  case 298:
+  case 324:
 
 /* Line 1455 of yacc.c  */
-#line 959 "parser.y"
+#line 989 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); ;}
     break;
 
-  case 300:
+  case 326:
 
 /* Line 1455 of yacc.c  */
-#line 965 "parser.y"
+#line 995 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (3)].declarator); ;}
     break;
 
-  case 301:
+  case 327:
 
 /* Line 1455 of yacc.c  */
-#line 966 "parser.y"
+#line 996 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 302:
+  case 328:
 
 /* Line 1455 of yacc.c  */
-#line 967 "parser.y"
+#line 997 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
-  case 303:
+  case 329:
 
 /* Line 1455 of yacc.c  */
-#line 969 "parser.y"
+#line 999 "parser.y"
     { (yyval.declarator) = make_declarator(NULL);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(2) - (3)].var_list)));
                                                  (yyval.declarator)->type = NULL;
                                                ;}
     break;
 
-  case 304:
+  case 330:
 
 /* Line 1455 of yacc.c  */
-#line 974 "parser.y"
+#line 1004 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (4)].declarator);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(3) - (4)].var_list)));
                                                  (yyval.declarator)->type = NULL;
                                                ;}
     break;
 
-  case 305:
+  case 331:
 
 /* Line 1455 of yacc.c  */
-#line 983 "parser.y"
+#line 1013 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
-  case 306:
+  case 332:
 
 /* Line 1455 of yacc.c  */
-#line 984 "parser.y"
+#line 1014 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
-  case 308:
+  case 334:
 
 /* Line 1455 of yacc.c  */
-#line 991 "parser.y"
+#line 1021 "parser.y"
     { (yyval.declarator) = (yyvsp[(3) - (3)].declarator); (yyval.declarator)->type = append_ptrchain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[(2) - (3)].attr_list))); ;}
     break;
 
-  case 309:
+  case 335:
 
 /* Line 1455 of yacc.c  */
-#line 992 "parser.y"
+#line 1022 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (2)].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[(1) - (2)].str))); ;}
     break;
 
-  case 310:
+  case 336:
 
 /* Line 1455 of yacc.c  */
-#line 996 "parser.y"
+#line 1026 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); ;}
     break;
 
-  case 312:
+  case 338:
 
 /* Line 1455 of yacc.c  */
-#line 1004 "parser.y"
+#line 1034 "parser.y"
     { (yyval.declarator) = make_declarator((yyvsp[(1) - (1)].var)); ;}
     break;
 
-  case 313:
+  case 339:
 
 /* Line 1455 of yacc.c  */
-#line 1005 "parser.y"
+#line 1035 "parser.y"
     { (yyval.declarator) = (yyvsp[(2) - (3)].declarator); ;}
     break;
 
-  case 314:
+  case 340:
 
 /* Line 1455 of yacc.c  */
-#line 1006 "parser.y"
+#line 1036 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(2) - (2)].expr)); ;}
     break;
 
-  case 315:
+  case 341:
 
 /* Line 1455 of yacc.c  */
-#line 1007 "parser.y"
+#line 1037 "parser.y"
     { (yyval.declarator) = make_declarator(NULL); (yyval.declarator)->array = append_array((yyval.declarator)->array, (yyvsp[(1) - (1)].expr)); ;}
     break;
 
-  case 316:
+  case 342:
 
 /* Line 1455 of yacc.c  */
-#line 1009 "parser.y"
+#line 1039 "parser.y"
     { (yyval.declarator) = make_declarator(NULL);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(2) - (3)].var_list)));
                                                  (yyval.declarator)->type = NULL;
                                                ;}
     break;
 
-  case 317:
+  case 343:
 
 /* Line 1455 of yacc.c  */
-#line 1014 "parser.y"
+#line 1044 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (4)].declarator);
                                                  (yyval.declarator)->func_type = append_ptrchain_type((yyval.declarator)->type, type_new_function((yyvsp[(3) - (4)].var_list)));
                                                  (yyval.declarator)->type = NULL;
                                                ;}
     break;
 
-  case 318:
+  case 344:
 
 /* Line 1455 of yacc.c  */
-#line 1021 "parser.y"
+#line 1051 "parser.y"
     { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[(1) - (1)].declarator) ); ;}
     break;
 
-  case 319:
+  case 345:
 
 /* Line 1455 of yacc.c  */
-#line 1022 "parser.y"
+#line 1052 "parser.y"
     { (yyval.declarator_list) = append_declarator( (yyvsp[(1) - (3)].declarator_list), (yyvsp[(3) - (3)].declarator) ); ;}
     break;
 
-  case 320:
+  case 346:
 
 /* Line 1455 of yacc.c  */
-#line 1025 "parser.y"
+#line 1055 "parser.y"
     { (yyval.expr) = NULL; ;}
     break;
 
-  case 321:
+  case 347:
 
 /* Line 1455 of yacc.c  */
-#line 1026 "parser.y"
+#line 1056 "parser.y"
     { (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
     break;
 
-  case 322:
+  case 348:
 
 /* Line 1455 of yacc.c  */
-#line 1029 "parser.y"
+#line 1059 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (2)].declarator); (yyval.declarator)->bits = (yyvsp[(2) - (2)].expr);
                                                  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
                                                    error_loc("unnamed fields are not allowed\n");
                                                ;}
     break;
 
-  case 323:
+  case 349:
 
 /* Line 1455 of yacc.c  */
-#line 1036 "parser.y"
+#line 1066 "parser.y"
     { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[(1) - (1)].declarator) ); ;}
     break;
 
-  case 324:
+  case 350:
 
 /* Line 1455 of yacc.c  */
-#line 1038 "parser.y"
+#line 1068 "parser.y"
     { (yyval.declarator_list) = append_declarator( (yyvsp[(1) - (3)].declarator_list), (yyvsp[(3) - (3)].declarator) ); ;}
     break;
 
-  case 325:
+  case 351:
 
 /* Line 1455 of yacc.c  */
-#line 1042 "parser.y"
+#line 1072 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (1)].declarator); ;}
     break;
 
-  case 326:
+  case 352:
 
 /* Line 1455 of yacc.c  */
-#line 1043 "parser.y"
+#line 1073 "parser.y"
     { (yyval.declarator) = (yyvsp[(1) - (3)].declarator); (yyvsp[(1) - (3)].declarator)->var->eval = (yyvsp[(3) - (3)].expr); ;}
     break;
 
-  case 327:
+  case 353:
+
+/* Line 1455 of yacc.c  */
+#line 1077 "parser.y"
+    { (yyval.num) = THREADING_APARTMENT; ;}
+    break;
+
+  case 354:
+
+/* Line 1455 of yacc.c  */
+#line 1078 "parser.y"
+    { (yyval.num) = THREADING_NEUTRAL; ;}
+    break;
+
+  case 355:
+
+/* Line 1455 of yacc.c  */
+#line 1079 "parser.y"
+    { (yyval.num) = THREADING_SINGLE; ;}
+    break;
+
+  case 356:
+
+/* Line 1455 of yacc.c  */
+#line 1080 "parser.y"
+    { (yyval.num) = THREADING_FREE; ;}
+    break;
+
+  case 357:
+
+/* Line 1455 of yacc.c  */
+#line 1081 "parser.y"
+    { (yyval.num) = THREADING_BOTH; ;}
+    break;
+
+  case 358:
 
 /* Line 1455 of yacc.c  */
-#line 1047 "parser.y"
+#line 1085 "parser.y"
     { (yyval.num) = RPC_FC_RP; ;}
     break;
 
-  case 328:
+  case 359:
 
 /* Line 1455 of yacc.c  */
-#line 1048 "parser.y"
+#line 1086 "parser.y"
     { (yyval.num) = RPC_FC_UP; ;}
     break;
 
-  case 329:
+  case 360:
 
 /* Line 1455 of yacc.c  */
-#line 1049 "parser.y"
+#line 1087 "parser.y"
     { (yyval.num) = RPC_FC_FP; ;}
     break;
 
-  case 330:
+  case 361:
 
 /* Line 1455 of yacc.c  */
-#line 1052 "parser.y"
+#line 1090 "parser.y"
     { (yyval.type) = type_new_struct((yyvsp[(2) - (5)].str), TRUE, (yyvsp[(4) - (5)].var_list)); ;}
     break;
 
-  case 331:
+  case 362:
 
 /* Line 1455 of yacc.c  */
-#line 1055 "parser.y"
+#line 1093 "parser.y"
     { (yyval.type) = type_new_void(); ;}
     break;
 
-  case 332:
+  case 363:
 
 /* Line 1455 of yacc.c  */
-#line 1056 "parser.y"
+#line 1094 "parser.y"
     { (yyval.type) = find_type_or_error((yyvsp[(1) - (1)].str), 0); ;}
     break;
 
-  case 333:
+  case 364:
 
 /* Line 1455 of yacc.c  */
-#line 1057 "parser.y"
+#line 1095 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
-  case 334:
+  case 365:
 
 /* Line 1455 of yacc.c  */
-#line 1058 "parser.y"
+#line 1096 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
-  case 335:
+  case 366:
 
 /* Line 1455 of yacc.c  */
-#line 1059 "parser.y"
+#line 1097 "parser.y"
     { (yyval.type) = type_new_enum((yyvsp[(2) - (2)].str), FALSE, NULL); ;}
     break;
 
-  case 336:
+  case 367:
 
 /* Line 1455 of yacc.c  */
-#line 1060 "parser.y"
+#line 1098 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
-  case 337:
+  case 368:
 
 /* Line 1455 of yacc.c  */
-#line 1061 "parser.y"
+#line 1099 "parser.y"
     { (yyval.type) = type_new_struct((yyvsp[(2) - (2)].str), FALSE, NULL); ;}
     break;
 
-  case 338:
+  case 369:
 
 /* Line 1455 of yacc.c  */
-#line 1062 "parser.y"
+#line 1100 "parser.y"
     { (yyval.type) = (yyvsp[(1) - (1)].type); ;}
     break;
 
-  case 339:
+  case 370:
 
 /* Line 1455 of yacc.c  */
-#line 1063 "parser.y"
+#line 1101 "parser.y"
     { (yyval.type) = type_new_nonencapsulated_union((yyvsp[(2) - (2)].str), FALSE, NULL); ;}
     break;
 
-  case 340:
+  case 371:
 
 /* Line 1455 of yacc.c  */
-#line 1064 "parser.y"
+#line 1102 "parser.y"
     { (yyval.type) = make_safearray((yyvsp[(3) - (4)].type)); ;}
     break;
 
-  case 341:
+  case 372:
 
 /* Line 1455 of yacc.c  */
-#line 1068 "parser.y"
+#line 1106 "parser.y"
     { reg_typedefs((yyvsp[(3) - (4)].declspec), (yyvsp[(4) - (4)].declarator_list), check_typedef_attrs((yyvsp[(2) - (4)].attr_list)));
                                                  (yyval.statement) = make_statement_typedef((yyvsp[(4) - (4)].declarator_list));
                                                ;}
     break;
 
-  case 342:
+  case 373:
 
 /* Line 1455 of yacc.c  */
-#line 1074 "parser.y"
+#line 1112 "parser.y"
     { (yyval.type) = type_new_nonencapsulated_union((yyvsp[(2) - (5)].str), TRUE, (yyvsp[(4) - (5)].var_list)); ;}
     break;
 
-  case 343:
+  case 374:
 
 /* Line 1455 of yacc.c  */
-#line 1077 "parser.y"
+#line 1115 "parser.y"
     { (yyval.type) = type_new_encapsulated_union((yyvsp[(2) - (10)].str), (yyvsp[(5) - (10)].var), (yyvsp[(7) - (10)].var), (yyvsp[(9) - (10)].var_list)); ;}
     break;
 
-  case 344:
+  case 375:
 
 /* Line 1455 of yacc.c  */
-#line 1081 "parser.y"
+#line 1119 "parser.y"
     { (yyval.num) = MAKEVERSION((yyvsp[(1) - (1)].num), 0); ;}
     break;
 
-  case 345:
+  case 376:
 
 /* Line 1455 of yacc.c  */
-#line 1082 "parser.y"
+#line 1120 "parser.y"
     { (yyval.num) = MAKEVERSION((yyvsp[(1) - (3)].num), (yyvsp[(3) - (3)].num)); ;}
     break;
 
 
 
 /* Line 1455 of yacc.c  */
-#line 5060 "parser.tab.c"
+#line 5391 "parser.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5268,7 +5599,7 @@ yyreturn:
 
 
 /* Line 1675 of yacc.c  */
-#line 1085 "parser.y"
+#line 1123 "parser.y"
 
 
 static void decl_builtin_basic(const char *name, enum type_basic_type type)
@@ -6003,12 +6334,6 @@ static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, at
   else if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))
     attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );
 
-  /* Append the SWITCHTYPE attribute to a union if it does not already have one.  */
-  if (type_get_type_detect_alias(type) == TYPE_UNION &&
-      is_attr(attrs, ATTR_SWITCHTYPE) &&
-      !is_attr(type->attrs, ATTR_SWITCHTYPE))
-    type->attrs = append_attr(type->attrs, make_attrp(ATTR_SWITCHTYPE, get_attrp(attrs, ATTR_SWITCHTYPE)));
-
   LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
   {
 
@@ -6176,20 +6501,29 @@ struct allowed_attr allowed_attr[] =
     /* ATTR_CALLAS */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" },
     /* ATTR_CALLCONV */            { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
     /* ATTR_CASE */                { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "case" },
+    /* ATTR_CODE */                { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" },
+    /* ATTR_COMMSTATUS */          { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
     /* ATTR_CONST */               { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "const" },
     /* ATTR_CONTEXTHANDLE */       { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
     /* ATTR_CONTROL */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" },
+    /* ATTR_DECODE */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
     /* ATTR_DEFAULT */             { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, "default" },
+    /* ATTR_DEFAULTBIND */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
     /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
     /* ATTR_DEFAULTVALUE */        { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" },
     /* ATTR_DEFAULTVTABLE */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "defaultvtable" },
+ /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" },
     /* ATTR_DISPINTERFACE */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
     /* ATTR_DISPLAYBIND */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
     /* ATTR_DLLNAME */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "dllname" },
     /* ATTR_DUAL */                { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
+    /* ATTR_ENABLEALLOCATE */      { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" },
+    /* ATTR_ENCODE */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "encode" },
     /* ATTR_ENDPOINT */            { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
     /* ATTR_ENTRY */               { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" },
     /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
+    /* ATTR_FAULTSTATUS */         { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" },
+    /* ATTR_FORCEALLOCATE */       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" },
     /* ATTR_HANDLE */              { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "handle" },
     /* ATTR_HELPCONTEXT */         { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpcontext" },
     /* ATTR_HELPFILE */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpfile" },
@@ -6199,6 +6533,7 @@ struct allowed_attr allowed_attr[] =
     /* ATTR_HIDDEN */              { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, "hidden" },
     /* ATTR_ID */                  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "id" },
     /* ATTR_IDEMPOTENT */          { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
+    /* ATTR_IGNORE */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "ignore" },
     /* ATTR_IIDIS */               { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "iid_is" },
     /* ATTR_IMMEDIATEBIND */       { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
     /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
@@ -6207,24 +6542,35 @@ struct allowed_attr allowed_attr[] =
     /* ATTR_INPUTSYNC */           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
     /* ATTR_LENGTHIS */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "length_is" },
     /* ATTR_LIBLCID */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "lcid" },
+    /* ATTR_LICENSED */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "licensed" },
     /* ATTR_LOCAL */               { 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
+    /* ATTR_MAYBE */               { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" },
+    /* ATTR_MESSAGE */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" },
+    /* ATTR_NOCODE */              { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
     /* ATTR_NONBROWSABLE */        { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
     /* ATTR_NONCREATABLE */        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "noncreatable" },
     /* ATTR_NONEXTENSIBLE */       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
+    /* ATTR_NOTIFY */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" },
+    /* ATTR_NOTIFYFLAG */          { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" },
     /* ATTR_OBJECT */              { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
     /* ATTR_ODL */                 { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "odl" },
     /* ATTR_OLEAUTOMATION */       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
+    /* ATTR_OPTIMIZE */            { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" },
     /* ATTR_OPTIONAL */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" },
     /* ATTR_OUT */                 { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" },
     /* ATTR_PARAMLCID */           { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" },
+    /* ATTR_PARTIALIGNORE */       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" },
     /* ATTR_POINTERDEFAULT */      { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
     /* ATTR_POINTERTYPE */         { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, "ref, unique or ptr" },
+    /* ATTR_PROGID */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "progid" },
     /* ATTR_PROPGET */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" },
     /* ATTR_PROPPUT */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" },
     /* ATTR_PROPPUTREF */          { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" },
+    /* ATTR_PROXY */               { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" },
     /* ATTR_PUBLIC */              { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "public" },
     /* ATTR_RANGE */               { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, "range" },
     /* ATTR_READONLY */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "readonly" },
+    /* ATTR_REPRESENTAS */         { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" },
     /* ATTR_REQUESTEDIT */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
     /* ATTR_RESTRICTED */          { 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, "restricted" },
     /* ATTR_RETVAL */              { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" },
@@ -6234,11 +6580,16 @@ struct allowed_attr allowed_attr[] =
     /* ATTR_STRING */              { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, "string" },
     /* ATTR_SWITCHIS */            { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "switch_is" },
     /* ATTR_SWITCHTYPE */          { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, "switch_type" },
+    /* ATTR_THREADING */           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "threading" },
     /* ATTR_TRANSMITAS */          { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" },
+    /* ATTR_UIDEFAULT */           { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" },
+    /* ATTR_USESGETLASTERROR */    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" },
+    /* ATTR_USERMARSHAL */         { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" },
     /* ATTR_UUID */                { 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "uuid" },
     /* ATTR_V1ENUM */              { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
     /* ATTR_VARARG */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
     /* ATTR_VERSION */             { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "version" },
+    /* ATTR_VIPROGID */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "vi_progid" },
     /* ATTR_WIREMARSHAL */         { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
 };
 
index 96c57cb..b58ed85 100644 (file)
      tCONTEXTHANDLESERIALIZE = 301,
      tCONTROL = 302,
      tCPPQUOTE = 303,
-     tDEFAULT = 304,
-     tDEFAULTCOLLELEM = 305,
-     tDEFAULTVALUE = 306,
-     tDEFAULTVTABLE = 307,
-     tDISPLAYBIND = 308,
-     tDISPINTERFACE = 309,
-     tDLLNAME = 310,
-     tDOUBLE = 311,
-     tDUAL = 312,
-     tENDPOINT = 313,
-     tENTRY = 314,
-     tENUM = 315,
-     tERRORSTATUST = 316,
-     tEXPLICITHANDLE = 317,
-     tEXTERN = 318,
-     tFALSE = 319,
-     tFASTCALL = 320,
-     tFLOAT = 321,
-     tHANDLE = 322,
-     tHANDLET = 323,
-     tHELPCONTEXT = 324,
-     tHELPFILE = 325,
-     tHELPSTRING = 326,
-     tHELPSTRINGCONTEXT = 327,
-     tHELPSTRINGDLL = 328,
-     tHIDDEN = 329,
-     tHYPER = 330,
-     tID = 331,
-     tIDEMPOTENT = 332,