diff --git a/Makefile.in b/Makefile.in index 362d6a7..a62aaaf 100644 --- a/Makefile.in +++ b/Makefile.in @@ -327,7 +327,7 @@ $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) + $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) unbound-anchor$(EXEEXT): $(UBANCHOR_OBJ_LINK) libunbound.la $(LINK) -o $@ $(UBANCHOR_OBJ_LINK) -L. -L.libs -lunbound -lexpat $(SSLLIB) $(LIBS) @@ -360,7 +360,7 @@ $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) $(LIBS) -L. -L.libs -lunbound + $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) @@ -1463,7 +1463,7 @@ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h + $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \ $(srcdir)/winrc/w_inst.h diff --git a/compat/arc4random.c b/compat/arc4random.c index a09665c..bcef0ec 100644 --- a/compat/arc4random.c +++ b/compat/arc4random.c @@ -71,6 +71,72 @@ static inline void _rs_rekey(u_char *dat, size_t datlen); +/* + * Basic sanity checking; wish we could do better. + */ +static int +fallback_gotdata(char *buf, size_t len) +{ + char any_set = 0; + size_t i; + + for (i = 0; i < len; ++i) + any_set |= buf[i]; + if (any_set == 0) + return -1; + return 0; +} + +/* fallback for getentropy in case libc returns failure */ +static int +fallback_getentropy_urandom(void *buf, size_t len) +{ + size_t i; + int fd, flags; + int save_errno = errno; + +start: + + flags = O_RDONLY; +#ifdef O_NOFOLLOW + flags |= O_NOFOLLOW; +#endif +#ifdef O_CLOEXEC + flags |= O_CLOEXEC; +#endif + fd = open("/dev/urandom", flags, 0); + if (fd == -1) { + if (errno == EINTR) + goto start; + goto nodevrandom; + } +#ifndef O_CLOEXEC +# ifdef HAVE_FCNTL + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); +# endif +#endif + for (i = 0; i < len; ) { + size_t wanted = len - i; + ssize_t ret = read(fd, (char*)buf + i, wanted); + + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) + continue; + close(fd); + goto nodevrandom; + } + i += ret; + } + close(fd); + if (fallback_gotdata(buf, len) == 0) { + errno = save_errno; + return 0; /* satisfied */ + } +nodevrandom: + errno = EIO; + return -1; +} + static inline void _rs_init(u_char *buf, size_t n) { @@ -114,11 +180,14 @@ u_char rnd[KEYSZ + IVSZ]; if (getentropy(rnd, sizeof rnd) == -1) { + if(errno != ENOSYS || + fallback_getentropy_urandom(rnd, sizeof rnd) == -1) { #ifdef SIGKILL - raise(SIGKILL); + raise(SIGKILL); #else - exit(9); /* windows */ -#endif + exit(9); /* windows */ +#endif + } } if (!rs) diff --git a/config.h.in b/config.h.in index 9223894..04356f3 100644 --- a/config.h.in +++ b/config.h.in @@ -29,6 +29,9 @@ it for smaller install size, but the libunbound export table is polluted by internal symbols */ #undef EXPORT_ALL_SYMBOLS + +/* Define to 1 if you have the `accept4' function. */ +#undef HAVE_ACCEPT4 /* Define to 1 if you have the `arc4random' function. */ #undef HAVE_ARC4RANDOM diff --git a/configure b/configure index 6535a5a..3f38929 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.7.1. +# Generated by GNU Autoconf 2.69 for unbound 1.7.2. # # Report bugs to . # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.7.1' -PACKAGE_STRING='unbound 1.7.1' +PACKAGE_VERSION='1.7.2' +PACKAGE_STRING='unbound 1.7.2' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1440,7 +1440,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.7.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.7.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1505,7 +1505,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.7.1:";; + short | recursive ) echo "Configuration of unbound 1.7.2:";; esac cat <<\_ACEOF @@ -1722,7 +1722,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.7.1 +unbound configure 1.7.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2431,7 +2431,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.7.1, which was +It was created by unbound $as_me 1.7.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2783,11 +2783,11 @@ UNBOUND_VERSION_MINOR=7 -UNBOUND_VERSION_MICRO=1 +UNBOUND_VERSION_MICRO=2 LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=9 +LIBUNBOUND_REVISION=10 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2848,6 +2848,7 @@ # 1.6.8 had 7:7:5 # 1.7.0 had 7:8:5 # 1.7.1 had 7:9:5 +# 1.7.2 had 7:10:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -19467,7 +19468,7 @@ WINDRES="$ac_cv_prog_WINDRES" fi - LIBS="$LIBS -liphlpapi" + LIBS="$LIBS -liphlpapi -lcrypt32" WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe" WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c" @@ -19701,7 +19702,7 @@ fi -for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget +for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -20854,6 +20855,8 @@ enableval=$enable_cachedb; fi +# turn on cachedb when hiredis support is enabled. +if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi case "$enable_cachedb" in yes) @@ -21041,7 +21044,7 @@ -version=1.7.1 +version=1.7.2 date=`date +'%b %e, %Y'` @@ -21560,7 +21563,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.7.1, which was +This file was extended by unbound $as_me 1.7.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21626,7 +21629,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.7.1 +unbound config.status 1.7.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 435147e..b4c484e 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[7]) -m4_define([VERSION_MICRO],[1]) +m4_define([VERSION_MICRO],[2]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=9 +LIBUNBOUND_REVISION=10 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -79,6 +79,7 @@ # 1.6.8 had 7:7:5 # 1.7.0 had 7:8:5 # 1.7.1 had 7:9:5 +# 1.7.2 had 7:10:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -1245,7 +1246,7 @@ #include ]) AC_CHECK_TOOL(WINDRES, windres) - LIBS="$LIBS -liphlpapi" + LIBS="$LIBS -liphlpapi -lcrypt32" WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe" AC_SUBST(WINAPPS) WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c" @@ -1318,7 +1319,7 @@ #endif ]) AC_SEARCH_LIBS([setusercontext], [util]) -AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget]) +AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4]) AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) @@ -1488,6 +1489,8 @@ # check for cachedb if requested AC_ARG_ENABLE(cachedb, AC_HELP_STRING([--enable-cachedb], [enable cachedb module that can use external cache storage])) +# turn on cachedb when hiredis support is enabled. +if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi case "$enable_cachedb" in yes) AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support]) diff --git a/contrib/libunbound.pc.in b/contrib/libunbound.pc.in index 130bef5..0cb9f87 100644 --- a/contrib/libunbound.pc.in +++ b/contrib/libunbound.pc.in @@ -7,7 +7,7 @@ Description: Library with validating, recursive, and caching DNS resolver URL: http://www.unbound.net Version: @PACKAGE_VERSION@ -Requires: libcrypto libssl @PC_LIBEVENT_DEPENDENCY@ @PC_PY_DEPENDENCY@ -Libs: -L${libdir} -lunbound +Requires: @PC_LIBEVENT_DEPENDENCY@ @PC_PY_DEPENDENCY@ +Libs: -L${libdir} -lunbound -lssl -lcrypto Libs.private: @SSLLIB@ @LIBS@ Cflags: -I${includedir} diff --git a/daemon/acl_list.c b/daemon/acl_list.c index f7d71b9..c16a920 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -111,6 +111,8 @@ control = acl_refuse_non_local; else if(strcmp(s2, "allow_snoop") == 0) control = acl_allow_snoop; + else if(strcmp(s2, "allow_setrd") == 0) + control = acl_allow_setrd; else { log_err("access control type %s unknown", str); return 0; diff --git a/daemon/acl_list.h b/daemon/acl_list.h index d0d42bf..3a3b94b 100644 --- a/daemon/acl_list.h +++ b/daemon/acl_list.h @@ -63,7 +63,9 @@ /** allow full access for recursion (+RD) queries */ acl_allow, /** allow full access for all queries, recursion and cache snooping */ - acl_allow_snoop + acl_allow_snoop, + /** allow full access for recursion queries and set RD flag regardless of request */ + acl_allow_setrd }; /** diff --git a/daemon/daemon.c b/daemon/daemon.c index 85ae1e0..6820e11 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -704,6 +704,7 @@ free(daemon->workers); daemon->workers = NULL; daemon->num = 0; + alloc_clear_special(&daemon->superalloc); #ifdef USE_DNSTAP dt_delete(daemon->dtenv); daemon->dtenv = NULL; diff --git a/daemon/unbound.c b/daemon/unbound.c index e4caf00..1383110 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -431,7 +431,7 @@ fatal_exit("could not set up listen SSL_CTX"); } if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, - cfg->tls_cert_bundle))) + cfg->tls_cert_bundle, cfg->tls_win_cert))) fatal_exit("could not set up connect SSL_CTX"); #endif diff --git a/daemon/worker.c b/daemon/worker.c index 6121c7d..44a989a 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1348,6 +1348,13 @@ if(ret == 1) goto send_reply; return ret; + } + + /* If this request does not have the recursion bit set, verify + * ACLs allow the recursion bit to be treated as set. */ + if(!(LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) && + acl == acl_allow_setrd ) { + LDNS_RD_SET(sldns_buffer_begin(c->buffer)); } /* If this request does not have the recursion bit set, verify diff --git a/doc/Changelog b/doc/Changelog index b44bdec..6a09942 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,8 +1,80 @@ +4 June 2018: Wouter + - Fix deadlock caused by incoming notify for auth-zone. + - tag for 1.7.2rc1 + +1 June 2018: Wouter + - Rename additional-tls-port to tls-additional-ports. + The older name is accepted for backwards compatibility. + +30 May 2018: Wouter + - Patch from Syzdek: Add ability to ignore RD bit and treat all + requests as if the RD bit is set. + +29 May 2018: Wouter + - in compat/arc4random call getentropy_urandom when getentropy fails + with ENOSYS. + - Fix that fallback for windows port. + +28 May 2018: Wouter + - Fix windows tcp and tls spin on events. + - Add routine from getdns to add windows cert store to the SSL_CTX. + - tls-win-cert option that adds the system certificate store for + authenticating DNS-over-TLS connections. It can be used instead + of the tls-cert-bundle option, or with it to add certificates. + +25 May 2018: Wouter + - For TCP and TLS connections that don't establish, perform address + update in infra cache, so future selections can exclude them. + - Fix that tcp sticky events are removed for closed fd on windows. + - Fix close events for tcp only. + +24 May 2018: Wouter + - Fix that libunbound can do DNS-over-TLS, when configured. + - Fix that windows unbound service can use DNS-over-TLS. + - unbound-host initializes ssl (for potential DNS-over-TLS usage + inside libunbound), when ssl upstream or a cert-bundle is configured. + +23 May 2018: Wouter + - Use accept4 to speed up incoming TCP (and TLS) connections, + available on Linux, FreeBSD and OpenBSD. + +17 May 2018: Ralph + - Qname minimisation default changed to yes. + +15 May 2018: Wouter + - Fix low-rtt-pct to low-rtt-permil, as it is parts in one thousand. + +11 May 2018: Wouter + - Fix contrib/libunbound.pc for libssl libcrypto references, + from https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226914 + +7 May 2018: Wouter + - Fix windows to not have sticky TLS events for TCP. + - Fix read of DNS over TLS length and data in one read call. + - Fix mesh state assertion failure due to callback removal. + +3 May 2018: Wouter + - Fix that configure --with-libhiredis also turns on cachedb. + - Fix gcc 8 buffer warning in testcode. + - Fix function type cast warning in libunbound context callback type. + +2 May 2018: Wouter + - Fix fail to reject dead peers in forward-zone, with ssl-upstream. + +1 May 2018: Wouter + - Fix that unbound-control reload frees the rrset keys and returns + the memory pages to the system. + +30 April 2018: Wouter + - Fix spelling error in man page and note defaults as no instead of + off. + 26 April 2018: Wouter - Fix for crash in daemon_cleanup with dnstap during reload, from Saksham Manchanda. - Also that for dnscrypt. - - tag for 1.7.1rc1 release. + - tag for 1.7.1rc1 release. Became 1.7.1 release on 3 May, trunk + is from here 1.7.2 in development. 25 April 2018: Ralph - Fix memory leak when caching wildcard records for aggressive NSEC use diff --git a/doc/README b/doc/README index c8bfd43..6d3bb86 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.7.1 +README for Unbound 1.7.2 Copyright 2007 NLnet Labs http://unbound.net diff --git a/doc/example.conf.in b/doc/example.conf.in index 2260ba2..072bd8d 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.7.1. +# See unbound.conf(5) man page, version 1.7.2. # # this is a comment. @@ -223,7 +223,8 @@ # to this server. Specify classless netblocks with /size and action. # By default everything is refused, except for localhost. # Choose deny (drop message), refuse (polite error reply), - # allow (recursive ok), allow_snoop (recursive and nonrecursive ok) + # allow (recursive ok), allow_setrd (recursive ok, rd bit is forced on), + # allow_snoop (recursive and nonrecursive ok) # deny_non_local (drop queries unless can be answered from local-data) # refuse_non_local (like deny_non_local but polite error reply). # access-control: 0.0.0.0/0 refuse @@ -372,7 +373,7 @@ # Sent minimum amount of information to upstream servers to enhance # privacy. Only sent minimum required labels of the QNAME and set QTYPE # to A when possible. - # qname-minimisation: no + # qname-minimisation: yes # QNAME minimisation in strict mode. Do not fall-back to sending full # QNAME to potentially broken nameservers. A lot of domains will not be @@ -681,8 +682,11 @@ # Certificates used to authenticate connections made upstream. # tls-cert-bundle: "" + # Add system certs to the cert bundle, from the Windows Cert Store + # tls-win-cert: no + # Also serve tls on these port numbers (eg. 443, ...), by listing - # additional-tls-port: portno for each of the port numbers. + # tls-additional-ports: portno for each of the port numbers. # DNS64 prefix. Must be specified when DNS64 is use. # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4. @@ -725,7 +729,7 @@ # low-rtt: 45 # select low rtt this many times out of 1000. 0 means the fast server # select is disabled. prefetches are not sped up. - # low-rtt-pct: 0 + # low-rtt-permil: 0 # Specific options for ipsecmod. unbound needs to be configured with # --enable-ipsecmod for these to take effect. diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index 24dfb9e..aac9958 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "libunbound" "3" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -43,7 +43,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.7.1 functions. +\- Unbound DNS validating resolver 1.7.2 functions. .SH "SYNOPSIS" .B #include .LP diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index 2c8140d..1b588b8 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "unbound-anchor" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in index a4cddb1..311e48d 100644 --- a/doc/unbound-checkconf.8.in +++ b/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "unbound-checkconf" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 0ff6b8e..566a175 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "unbound-control" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" unbound-control.8 -- unbound remote control manual .\" diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in index ab2f00b..68acc54 100644 --- a/doc/unbound-host.1.in +++ b/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "unbound\-host" "1" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" diff --git a/doc/unbound.8.in b/doc/unbound.8.in index cef25e3..0d27b75 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "unbound" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.7.1. +\- Unbound DNS validating resolver 1.7.2. .SH "SYNOPSIS" .B unbound .RB [ \-h ] diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 94ddf70..9c38922 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "May 3, 2018" "NLnet Labs" "unbound 1.7.1" +.TH "unbound.conf" "5" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -403,6 +403,8 @@ Default is no. Useful in tunneling scenarios. The TLS contains plain DNS in TCP wireformat. The other server must support this (see \fBtls\-service\-key\fR). +If you enable this, also configure a tls\-cert\-bundle or use tls\-win\cert to +load CA certs, otherwise the connections cannot be authenticated. .TP .B ssl\-upstream: \fI Alternate syntax for \fBtls\-upstream\fR. If both are present in the config @@ -444,8 +446,14 @@ .B ssl\-cert\-bundle: \fI Alternate syntax for \fBtls\-cert\-bundle\fR. .TP -.B additional\-tls\-port: \fI -List portnumbers as additional\-tls\-port, and when interfaces are defined, +.B tls\-win\-cert: \fI +Add the system certificates to the cert bundle certificates for authentication. +If no cert bundle, it uses only these certificates. Default is no. +On windows this option uses the certificates from the cert store. Use +the tls\-cert\-bundle option on other systems. +.TP +.B tls\-additional\-ports: \fI +List portnumbers as tls\-additional\-ports, and when interfaces are defined, eg. with the @port suffix, as this port number, they provide dns over TLS service. Can list multiple, each on a new statement. .TP @@ -461,7 +469,8 @@ .B access\-control: \fI The netblock is given as an IP4 or IP6 address with /size appended for a classless network block. The action can be \fIdeny\fR, \fIrefuse\fR, -\fIallow\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or \fIrefuse_non_local\fR. +\fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or +\fIrefuse_non_local\fR. The most specific netblock match is used, if none match \fIdeny\fR is used. .IP The action \fIdeny\fR stops queries from hosts from that netblock. @@ -479,6 +488,15 @@ in the reply. This supports normal operations where nonrecursive queries are made for the authoritative data. For nonrecursive queries any replies from the dynamic cache are refused. +.IP +The \fIallow_setrd\fR action ignores the recursion desired (RD) bit and +treats all requests as if the recursion desired bit is set. Note that this +behavior violates RFC 1034 which states that a name server should never perform +recursive service unless asked via the RD bit since this interferes with +trouble shooting of name servers and their databases. This prohibited behavior +may be useful if another DNS server must forward requests for specific +zones to a resolver DNS server, but only supports stub domains and +sends queries to the resolver DNS server with the RD bit cleared. .IP The action \fIallow_snoop\fR gives nonrecursive access too. This give both recursive and non recursive access. The name \fIallow_snoop\fR refers @@ -691,7 +709,7 @@ and the zones are signed. This enforces DNSSEC validation on nameserver NS sets and the nameserver addresses that are encountered on the referral path to the answer. -Default off, because it burdens the authority servers, and it is +Default no, because it burdens the authority servers, and it is not RFC standard, and could lead to performance problems because of the extra query load that is generated. Experimental option. If you enable it consider adding more numbers after the target\-fetch\-policy @@ -722,7 +740,7 @@ Only sent minimum required labels of the QNAME and set QTYPE to A when possible. Best effort approach; full QNAME and original QTYPE will be sent when upstream replies with a RCODE other than NOERROR, except when receiving -NXDOMAIN from a DNSSEC signed zone. Default is off. +NXDOMAIN from a DNSSEC signed zone. Default is yes. .TP .B qname\-minimisation\-strict: \fI QNAME minimisation in strict mode. Do not fall-back to sending full QNAME to @@ -1315,10 +1333,10 @@ .TP 5 .B low\-rtt: \fI Set the time in millisecond that is considere a low ping time for fast -server selection with the low\-rtt\-pct option, that turns this on or off. +server selection with the low\-rtt\-permil option, that turns this on or off. The default is 45 msec, a number from IPv6 quick response documents. .TP 5 -.B low\-rtt\-pct: \fI +.B low\-rtt\-permil: \fI Specify how many times out of 1000 to pick the fast server from the low rtt band. 0 turns the feature off. A value of 900 would pick the fast server when such fast servers are available 90 percent of the time, and @@ -1328,7 +1346,7 @@ moment to perform server exploration. The low\-rtt option can be used to specify which servers are picked for fast server selection, servers with a ping roundtrip time below that value are considered. -The default for low\-rtt\-pct is 0. +The default for low\-rtt\-permil is 0. .SS "Remote Control Options" In the .B remote\-control: @@ -1429,7 +1447,7 @@ To use a nondefault port for DNS communication append '@' with the port number. .TP .B stub\-prime: \fI -This option is by default off. If enabled it performs NS set priming, +This option is by default no. If enabled it performs NS set priming, which is similar to root hints, where it starts using the list of nameservers currently published by the zone. Thus, if the hint list is slightly outdated, the resolver picks up a correct list online. @@ -1490,6 +1508,8 @@ .B forward\-tls\-upstream: \fI Enabled or disable whether the queries to this forwarder use TLS for transport. Default is no. +If you enable this, also configure a tls\-cert\-bundle or use tls\-win\cert to +load CA certs, otherwise the connections cannot be authenticated. .TP .B forward\-ssl\-upstream: \fI Alternate syntax for \fBforward\-tls\-upstream\fR. @@ -1827,7 +1847,7 @@ on a system that has installed the hiredis C client library of Redis, then the "redis" backend can be used. This backend communicates with the specified Redis server over a TCP -connection to store and retrive cache data. +connection to store and retrieve cache data. It can be used as a persistent and/or shared cache backend. It should be noted that Unbound never removes data stored in the Redis server, even if some data have expired in terms of DNS TTL or the Redis server has diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 752474c..0a8f770 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -329,9 +329,9 @@ return 0 to force the caller to fetch more */ } - if(env->cfg->low_rtt_pct != 0 && prefetch == 0 && + if(env->cfg->low_rtt_permil != 0 && prefetch == 0 && low_rtt < env->cfg->low_rtt && - ub_random_max(env->rnd, 1000) < env->cfg->low_rtt_pct) { + ub_random_max(env->rnd, 1000) < env->cfg->low_rtt_permil) { /* the query is not prefetch, but for a downstream client, * there is a low_rtt (fast) server. We choose that x% of the * time */ diff --git a/libunbound/context.c b/libunbound/context.c index 8bff713..6ac8086 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -130,7 +130,7 @@ struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, - ub_callback_type cb, void* cbarg) + ub_callback_type cb, ub_event_callback_type cb_event, void* cbarg) { struct ctx_query* q = (struct ctx_query*)calloc(1, sizeof(*q)); if(!q) return NULL; @@ -142,8 +142,9 @@ } lock_basic_unlock(&ctx->cfglock); q->node.key = &q->querynum; - q->async = (cb != NULL); + q->async = (cb != NULL || cb_event != NULL); q->cb = cb; + q->cb_event = cb_event; q->cb_arg = cbarg; q->res = (struct ub_result*)calloc(1, sizeof(*q->res)); if(!q->res) { diff --git a/libunbound/context.h b/libunbound/context.h index 684d11e..1114722 100644 --- a/libunbound/context.h +++ b/libunbound/context.h @@ -45,6 +45,7 @@ #include "util/rbtree.h" #include "services/modstack.h" #include "libunbound/unbound.h" +#include "libunbound/unbound-event.h" #include "util/data/packed_rrset.h" struct libworker; struct tube; @@ -148,8 +149,10 @@ /** was this query cancelled (for bg worker) */ int cancelled; - /** for async query, the callback function */ + /** for async query, the callback function of type ub_callback_type */ ub_callback_type cb; + /** for event callbacks the type is ub_event_callback_type */ + ub_event_callback_type cb_event; /** for async query, the callback user arg */ void* cb_arg; @@ -238,11 +241,13 @@ * @param rrtype: type * @param rrclass: class * @param cb: callback for async, or NULL for sync. + * @param cb_event: event callback for async, or NULL for sync. * @param cbarg: user arg for async queries. * @return new ctx_query or NULL for malloc failure. */ struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype, - int rrclass, ub_callback_type cb, void* cbarg); + int rrclass, ub_callback_type cb, ub_event_callback_type cb_event, + void* cbarg); /** * Get a new alloc. Creates a new one or uses a cached one. diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c index b4cd7fa..275e8d2 100644 --- a/libunbound/libunbound.c +++ b/libunbound/libunbound.c @@ -690,7 +690,7 @@ } /* create new ctx_query and attempt to add to the list */ lock_basic_unlock(&ctx->cfglock); - q = context_new(ctx, name, rrtype, rrclass, NULL, NULL); + q = context_new(ctx, name, rrtype, rrclass, NULL, NULL, NULL); if(!q) return UB_NOMEM; /* become a resolver thread for a bit */ @@ -747,8 +747,7 @@ ub_comm_base_now(ctx->event_worker->base); /* create new ctx_query and attempt to add to the list */ - q = context_new(ctx, name, rrtype, rrclass, (ub_callback_type)callback, - mydata); + q = context_new(ctx, name, rrtype, rrclass, NULL, callback, mydata); if(!q) return UB_NOMEM; @@ -793,7 +792,7 @@ } /* create new ctx_query and attempt to add to the list */ - q = context_new(ctx, name, rrtype, rrclass, callback, mydata); + q = context_new(ctx, name, rrtype, rrclass, callback, NULL, mydata); if(!q) return UB_NOMEM; diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 4380d69..3dcaa78 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -158,9 +158,9 @@ hints_delete(w->env->hints); w->env->hints = NULL; } - if(cfg->ssl_upstream) { + if(cfg->ssl_upstream || (cfg->tls_cert_bundle && cfg->tls_cert_bundle[0]) || cfg->tls_win_cert) { w->sslctx = connect_sslctx_create(NULL, NULL, - cfg->tls_cert_bundle); + cfg->tls_cert_bundle, cfg->tls_win_cert); if(!w->sslctx) { /* to make the setup fail after unlock */ hints_delete(w->env->hints); @@ -637,7 +637,7 @@ enum sec_status s, char* why_bogus) { struct ctx_query* q = (struct ctx_query*)arg; - ub_event_callback_type cb = (ub_event_callback_type)q->cb; + ub_event_callback_type cb = q->cb_event; void* cb_arg = q->cb_arg; int cancelled = q->cancelled; diff --git a/services/authzone.c b/services/authzone.c index 1f56ac8..7ec280b 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -3425,14 +3425,17 @@ { /* if the serial of notify is older than we have, don't fetch * a zone, we already have it */ - if(has_serial && !xfr_serial_means_update(xfr, serial)) + if(has_serial && !xfr_serial_means_update(xfr, serial)) { + lock_basic_unlock(&xfr->lock); return; + } /* start new probe with this addr src, or note serial */ if(!xfr_start_probe(xfr, env, fromhost)) { /* not started because already in progress, note the serial */ xfr_note_notify_serial(xfr, has_serial, serial); lock_basic_unlock(&xfr->lock); } + /* successful end of start_probe unlocked xfr->lock */ } int auth_zones_notify(struct auth_zones* az, struct module_env* env, diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 6639fd3..a692288 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1059,7 +1059,7 @@ /** see if interface is ssl, its port number == the ssl port number */ static int if_is_ssl(const char* ifname, const char* port, int ssl_port, - struct config_strlist* additional_tls_port) + struct config_strlist* tls_additional_ports) { struct config_strlist* s; char* p = strchr(ifname, '@'); @@ -1067,7 +1067,7 @@ return 1; if(p && atoi(p+1) == ssl_port) return 1; - for(s = additional_tls_port; s; s = s->next) { + for(s = tls_additional_ports; s; s = s->next) { if(p && atoi(p+1) == atoi(s->str)) return 1; if(!p && atoi(port) == atoi(s->str)) @@ -1089,7 +1089,7 @@ * @param rcv: receive buffer size for UDP * @param snd: send buffer size for UDP * @param ssl_port: ssl service port number - * @param additional_tls_port: list of additional ssl service port numbers. + * @param tls_additional_ports: list of additional ssl service port numbers. * @param reuseport: try to set SO_REUSEPORT if nonNULL and true. * set to false on exit if reuseport failed due to no kernel support. * @param transparent: set IP_TRANSPARENT socket option. @@ -1103,7 +1103,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, size_t rcv, size_t snd, int ssl_port, - struct config_strlist* additional_tls_port, int* reuseport, + struct config_strlist* tls_additional_ports, int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, int dnscrypt_port) { @@ -1170,7 +1170,7 @@ } if(do_tcp) { int is_ssl = if_is_ssl(ifname, port, ssl_port, - additional_tls_port); + tls_additional_ports); if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, freebind, use_systemd)) == -1) { @@ -1356,7 +1356,7 @@ do_auto, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->additional_tls_port, + cfg->ssl_port, cfg->tls_additional_ports, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1370,7 +1370,7 @@ do_auto, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->additional_tls_port, + cfg->ssl_port, cfg->tls_additional_ports, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1386,7 +1386,7 @@ if(!ports_create_if(cfg->ifs[i], 0, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->additional_tls_port, + cfg->ssl_port, cfg->tls_additional_ports, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1400,7 +1400,7 @@ if(!ports_create_if(cfg->ifs[i], 0, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->additional_tls_port, + cfg->ssl_port, cfg->tls_additional_ports, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { diff --git a/services/mesh.c b/services/mesh.c index 3027cef..41aba74 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1173,6 +1173,10 @@ while((c = mstate->cb_list) != NULL) { /* take this cb off the list; so that the list can be * changed, eg. by adds from the callback routine */ + if(!mstate->reply_list && mstate->cb_list && !c->next) { + /* was a reply state, not anymore */ + mstate->s.env->mesh->num_reply_states--; + } mstate->cb_list = c->next; if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) diff --git a/services/outside_network.c b/services/outside_network.c index 63dfe49..5700ef8 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1301,8 +1301,8 @@ w->ssl_upstream = sq->ssl_upstream; w->tls_auth_name = sq->tls_auth_name; #ifndef S_SPLINT_S - tv.tv_sec = timeout; - tv.tv_usec = 0; + tv.tv_sec = timeout/1000; + tv.tv_usec = (timeout%1000)*1000; #endif comm_timer_set(w->timer, &tv); if(pend) { @@ -1812,7 +1812,12 @@ } if(sq->tcp_upstream || sq->ssl_upstream) { struct timeval now = *sq->outnet->now_tv; - if(now.tv_sec > sq->last_sent_time.tv_sec || + if(error!=NETEVENT_NOERROR) { + if(!infra_rtt_update(sq->outnet->infra, &sq->addr, + sq->addrlen, sq->zone, sq->zonelen, sq->qtype, + -1, sq->last_rtt, (time_t)now.tv_sec)) + log_err("out of memory in TCP exponential backoff."); + } else if(now.tv_sec > sq->last_sent_time.tv_sec || (now.tv_sec == sq->last_sent_time.tv_sec && now.tv_usec > sq->last_sent_time.tv_usec)) { /* convert from microseconds to milliseconds */ @@ -1822,7 +1827,7 @@ log_assert(roundtime >= 0); /* only store if less then AUTH_TIMEOUT seconds, it could be * huge due to system-hibernated and we woke up */ - if(roundtime < TCP_AUTH_QUERY_TIMEOUT*1000) { + if(roundtime < 60000) { if(!infra_rtt_update(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, sq->qtype, roundtime, sq->last_rtt, (time_t)now.tv_sec)) @@ -1863,18 +1868,26 @@ static int serviced_tcp_send(struct serviced_query* sq, sldns_buffer* buff) { - int vs, rtt; + int vs, rtt, timeout; uint8_t edns_lame_known; if(!infra_host(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, *sq->outnet->now_secs, &vs, &edns_lame_known, &rtt)) return 0; + sq->last_rtt = rtt; if(vs != -1) sq->status = serviced_query_TCP_EDNS; else sq->status = serviced_query_TCP; serviced_encode(sq, buff, sq->status == serviced_query_TCP_EDNS); sq->last_sent_time = *sq->outnet->now_tv; - sq->pending = pending_tcp_query(sq, buff, TCP_AUTH_QUERY_TIMEOUT, + if(sq->tcp_upstream || sq->ssl_upstream) { + timeout = rtt; + if(rtt >= 376 && rtt < TCP_AUTH_QUERY_TIMEOUT) + timeout = TCP_AUTH_QUERY_TIMEOUT; + } else { + timeout = TCP_AUTH_QUERY_TIMEOUT; + } + sq->pending = pending_tcp_query(sq, buff, timeout, serviced_tcp_callback, sq); return sq->pending != NULL; } diff --git a/services/outside_network.h b/services/outside_network.h index 105f765..01a3074 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -376,7 +376,7 @@ int retry; /** time last UDP was sent */ struct timeval last_sent_time; - /** rtt of last (UDP) message */ + /** rtt of last message */ int last_rtt; /** do we know edns probe status already, for UDP_EDNS queries */ int edns_lame_known; @@ -456,7 +456,7 @@ * checks id. * @param sq: serviced query. * @param packet: wireformat query to send to destination. copied from. - * @param timeout: in seconds from now. + * @param timeout: in milliseconds from now. * Timer starts running now. Timer may expire if all buffers are used, * without any query been sent to the server yet. * @param callback: function to call on error, timeout or reply. diff --git a/smallapp/unbound-host.c b/smallapp/unbound-host.c index 93b5e48..cd1ffe3 100644 --- a/smallapp/unbound-host.c +++ b/smallapp/unbound-host.c @@ -66,6 +66,14 @@ /* nss3 */ #include "nss.h" #endif +#ifdef HAVE_SSL +#ifdef HAVE_OPENSSL_SSL_H +#include +#endif +#ifdef HAVE_OPENSSL_ERR_H +#include +#endif +#endif /* HAVE_SSL */ /** verbosity for unbound-host app */ static int verb = 0; @@ -487,6 +495,26 @@ if(argc != 1) usage(); +#ifdef HAVE_SSL +#ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS + ERR_load_crypto_strings(); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) + ERR_load_SSL_strings(); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) + OpenSSL_add_all_algorithms(); +#else + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS + | OPENSSL_INIT_ADD_ALL_DIGESTS + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) + (void)SSL_library_init(); +#else + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); +#endif +#endif /* HAVE_SSL */ #ifdef HAVE_NSS if(NSS_NoDB_Init(".") != SECSuccess) { fprintf(stderr, "could not init NSS\n"); diff --git a/testcode/asynclook.c b/testcode/asynclook.c index a2bdb62..06bcf5a 100644 --- a/testcode/asynclook.c +++ b/testcode/asynclook.c @@ -56,6 +56,15 @@ #undef free #undef strdup #endif +#ifdef HAVE_SSL +#ifdef HAVE_OPENSSL_SSL_H +#include +#endif +#ifdef HAVE_OPENSSL_ERR_H +#include +#endif +#endif /* HAVE_SSL */ + /** keeping track of the async ids */ struct track_id { @@ -459,6 +468,27 @@ argc -= optind; argv += optind; +#ifdef HAVE_SSL +#ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS + ERR_load_crypto_strings(); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) + ERR_load_SSL_strings(); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) + OpenSSL_add_all_algorithms(); +#else + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS + | OPENSSL_INIT_ADD_ALL_DIGESTS + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); +#endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) + (void)SSL_library_init(); +#else + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); +#endif +#endif /* HAVE_SSL */ + if(ext) return ext_test(ctx, argc, argv); diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 860e2e8..80e3685 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1125,7 +1125,7 @@ pend->addrlen = sq->addrlen; pend->callback = callback; pend->cb_arg = callback_arg; - pend->timeout = timeout; + pend->timeout = timeout/1000; pend->transport = transport_tcp; pend->pkt = NULL; pend->zone = NULL; @@ -1218,7 +1218,7 @@ log_assert(pend->zone); pend->callback = callback; pend->cb_arg = callback_arg; - pend->timeout = UDP_AUTH_QUERY_TIMEOUT; + pend->timeout = UDP_AUTH_QUERY_TIMEOUT/1000; pend->transport = transport_udp; /* pretend UDP */ pend->pkt = NULL; pend->runtime = runtime; @@ -1757,7 +1757,7 @@ } pend->callback = fc->cb; pend->cb_arg = fc->cb_arg; - pend->timeout = UDP_AUTH_QUERY_TIMEOUT; + pend->timeout = UDP_AUTH_QUERY_TIMEOUT/1000; pend->transport = transport_udp; pend->pkt = NULL; pend->runtime = runtime; diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index b494507..0a63639 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -284,7 +284,7 @@ SSL* ssl = NULL; if(!buf) fatal_exit("out of memory"); if(usessl) { - ctx = connect_sslctx_create(NULL, NULL, NULL); + ctx = connect_sslctx_create(NULL, NULL, NULL, 0); if(!ctx) fatal_exit("cannot create ssl ctx"); ssl = outgoing_ssl_fd(ctx, fd); if(!ssl) fatal_exit("cannot create ssl"); diff --git a/testcode/testbound.c b/testcode/testbound.c index 56b89c7..071ac9c 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -177,7 +177,8 @@ while(isspace((unsigned char)*parse)) parse++; if(strncmp(parse, "$INCLUDE_TEMPFILE", 17) == 0) { - char l2[MAX_LINE_LEN]; + char l2[MAX_LINE_LEN-30]; /* -30 makes it fit with + a preceding $INCLUDE in the buf line[] */ char* tid = parse+17; while(isspace((unsigned char)*tid)) tid++; diff --git a/testcode/unitmain.c b/testcode/unitmain.c index 57883d1..fecde80 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -905,6 +905,9 @@ #ifdef CLIENT_SUBNET ecs_test(); #endif /* CLIENT_SUBNET */ + if(log_get_lock()) { + lock_quick_destroy((lock_quick_type*)log_get_lock()); + } checklock_stop(); printf("%d checks ok.\n", testcount); #ifdef HAVE_SSL diff --git a/testdata/02-unittest.tdir/02-unittest.test b/testdata/02-unittest.tdir/02-unittest.test index 898cd3d..7b1105b 100644 --- a/testdata/02-unittest.tdir/02-unittest.test +++ b/testdata/02-unittest.tdir/02-unittest.test @@ -9,11 +9,48 @@ get_make (cd $PRE ; $MAKE unittest; $MAKE lock-verify) -if (cd $PRE; ./unittest); then - echo "unit test worked." +if test -f $PRE/unbound_do_valgrind_in_test; then + do_valgrind=yes else - echo "unit test failed." - exit 1 + do_valgrind=no +fi +VALGRIND_FLAGS="--leak-check=full --show-leak-kinds=all" + +if test $do_valgrind = "yes"; then + echo "valgrind yes" + echo + tmpout=/tmp/tmpout.$$ + if (cd $PRE; valgrind $VALGRIND_FLAGS ./unittest >$tmpout 2>&1); then + echo "unit test worked." + else + echo "unit test failed." + exit 1 + fi + if grep "All heap blocks were freed -- no leaks are possible" $tmpout; then + : # clean + else + cat $tmpout + echo "Memory leaked in unittest" + grep "in use at exit" $tmpout + exit 1 + fi + if grep "ERROR SUMMARY: 0 errors from 0 contexts" $tmpout; then + : # clean + else + cat $tmpout + echo "Errors in unittest" + grep "ERROR SUMMARY" $tmpout + exit 1 + fi + rm -f $tmpout +else + # without valgrind + if (cd $PRE; ./unittest); then + echo "unit test worked." + else + echo "unit test failed." + exit 1 + fi fi if test -f $PRE/ublocktrace.0; then if (cd $PRE; ./lock-verify ublocktrace.*); then diff --git a/testdata/03-testbound.tdir/03-testbound.test b/testdata/03-testbound.tdir/03-testbound.test index aefdc18..00d3622 100644 --- a/testdata/03-testbound.tdir/03-testbound.test +++ b/testdata/03-testbound.tdir/03-testbound.test @@ -26,13 +26,15 @@ # self-test (unit test of testbound) if test $do_valgrind = "yes"; then + echo "valgrind yes" + echo if (valgrind $VALGRIND_FLAGS $PRE/testbound -s >tmpout 2>&1;); then echo "selftest OK " else echo "selftest FAILED" exit 1 fi - if grep "All heap blocks were freed -- no leaks are possible" tmpout >/dev/null 2>&1; then + if grep "All heap blocks were freed -- no leaks are possible" tmpout; then : # clean else cat tmpout @@ -40,7 +42,7 @@ grep "in use at exit" tmpout exit 1 fi - if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout >/dev/null 2>&1; then + if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout; then : # clean else cat tmpout @@ -102,13 +104,14 @@ fi if test $do_valgrind = "yes"; then + echo if (valgrind $VALGRIND_FLAGS $PRE/testbound -p $input >tmpout 2>&1;); then echo " OK $cleaninput: $header" else echo "FAILED $cleaninput: $header" exitval=1 fi - if grep "All heap blocks were freed -- no leaks are possible" tmpout >/dev/null 2>&1; then + if grep "All heap blocks were freed -- no leaks are possible" tmpout; then : # clean else grep "^==" tmpout @@ -116,7 +119,7 @@ grep "in use at exit" tmpout exitval=1 fi - if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout >/dev/null 2>&1; then + if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout; then : # clean else grep "^==" tmpout diff --git a/testdata/auth_xfr_host.rpl b/testdata/auth_xfr_host.rpl index 4b3b187..d052d36 100644 --- a/testdata/auth_xfr_host.rpl +++ b/testdata/auth_xfr_host.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" auth-zone: name: "example.com." diff --git a/testdata/autotrust_init_failsig.rpl b/testdata/autotrust_init_failsig.rpl index 38ecb4c..2bf5014 100644 --- a/testdata/autotrust_init_failsig.rpl +++ b/testdata/autotrust_init_failsig.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/autotrust_revtp_use.rpl b/testdata/autotrust_revtp_use.rpl index e0b8caa..b43eb60 100644 --- a/testdata/autotrust_revtp_use.rpl +++ b/testdata/autotrust_revtp_use.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" log-time-ascii: yes val-override-date: '20091018111500' fake-sha1: yes diff --git a/testdata/black_data.rpl b/testdata/black_data.rpl index 8342978..04304d3 100644 --- a/testdata/black_data.rpl +++ b/testdata/black_data.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/black_dnskey.rpl b/testdata/black_dnskey.rpl index 7a6c1c2..52deef1 100644 --- a/testdata/black_dnskey.rpl +++ b/testdata/black_dnskey.rpl @@ -6,6 +6,7 @@ target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/black_ds.rpl b/testdata/black_ds.rpl index 9ff7905..37caeb4 100644 --- a/testdata/black_ds.rpl +++ b/testdata/black_ds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/black_ent.rpl b/testdata/black_ent.rpl index c37c71b..1a25666 100644 --- a/testdata/black_ent.rpl +++ b/testdata/black_ent.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/black_prime.rpl b/testdata/black_prime.rpl index 1093eee..2cbcc16 100644 --- a/testdata/black_prime.rpl +++ b/testdata/black_prime.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/black_prime_entry.rpl b/testdata/black_prime_entry.rpl index 47105a3..c3f9326 100644 --- a/testdata/black_prime_entry.rpl +++ b/testdata/black_prime_entry.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_anchor.rpl b/testdata/dlv_anchor.rpl index 5f13a80..445da0a 100644 --- a/testdata/dlv_anchor.rpl +++ b/testdata/dlv_anchor.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_ask_higher.rpl b/testdata/dlv_ask_higher.rpl index 75be7f5..9f93310 100644 --- a/testdata/dlv_ask_higher.rpl +++ b/testdata/dlv_ask_higher.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_below_ta.rpl b/testdata/dlv_below_ta.rpl index db62ab0..6f72f26 100644 --- a/testdata/dlv_below_ta.rpl +++ b/testdata/dlv_below_ta.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DS 30899 5 1 14188c885f20623ad1d3bec42798f3f951793e4c ; xehac-mofum-malyd-bomaf-pegit-fuzes-ganin-misiz-nigel-nozog-soxix" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_delegation.rpl b/testdata/dlv_delegation.rpl index 427bcad..1eada40 100644 --- a/testdata/dlv_delegation.rpl +++ b/testdata/dlv_delegation.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_ds_lookup.rpl b/testdata/dlv_ds_lookup.rpl index c019b52..663cd9c 100644 --- a/testdata/dlv_ds_lookup.rpl +++ b/testdata/dlv_ds_lookup.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_insecure.rpl b/testdata/dlv_insecure.rpl index 0f3fef9..94ba865 100644 --- a/testdata/dlv_insecure.rpl +++ b/testdata/dlv_insecure.rpl @@ -5,6 +5,7 @@ val-override-date: "20070916134226" harden-referral-path: no target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_insecure_negcache.rpl b/testdata/dlv_insecure_negcache.rpl index fbfd906..b911051 100644 --- a/testdata/dlv_insecure_negcache.rpl +++ b/testdata/dlv_insecure_negcache.rpl @@ -5,6 +5,7 @@ val-override-date: "20070916134226" harden-referral-path: no target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_keyretry.rpl b/testdata/dlv_keyretry.rpl index 75007bf..8d477b5 100644 --- a/testdata/dlv_keyretry.rpl +++ b/testdata/dlv_keyretry.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_negnx.rpl b/testdata/dlv_negnx.rpl index 7149f5b..03edf1a 100644 --- a/testdata/dlv_negnx.rpl +++ b/testdata/dlv_negnx.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_optout.rpl b/testdata/dlv_optout.rpl index 2e01f30..e5a8fdd 100644 --- a/testdata/dlv_optout.rpl +++ b/testdata/dlv_optout.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DS 30899 5 1 14188c885f20623ad1d3bec42798f3f951793e4c ; xehac-mofum-malyd-bomaf-pegit-fuzes-ganin-misiz-nigel-nozog-soxix" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dlv_remove_pos.rpl b/testdata/dlv_remove_pos.rpl index 0b68689..fe2d7fe 100644 --- a/testdata/dlv_remove_pos.rpl +++ b/testdata/dlv_remove_pos.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/dns64_lookup.rpl b/testdata/dns64_lookup.rpl index 49f26db..e24622c 100644 --- a/testdata/dns64_lookup.rpl +++ b/testdata/dns64_lookup.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" module-config: "dns64 validator iterator" dns64-prefix: 64:ff9b::0/96 diff --git a/testdata/domain_insec_ds.rpl b/testdata/domain_insec_ds.rpl index d99e7ab..2cd6055 100644 --- a/testdata/domain_insec_ds.rpl +++ b/testdata/domain_insec_ds.rpl @@ -5,6 +5,7 @@ domain-insecure: "sub.example.com" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/fetch_glue.rpl b/testdata/fetch_glue.rpl index 9a25d52..3ecc28a 100644 --- a/testdata/fetch_glue.rpl +++ b/testdata/fetch_glue.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/fetch_glue_cname.rpl b/testdata/fetch_glue_cname.rpl index 46e17fe..e8158f9 100644 --- a/testdata/fetch_glue_cname.rpl +++ b/testdata/fetch_glue_cname.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/fwddlv_parse.rpl b/testdata/fwddlv_parse.rpl index 8c05520..8b8a961 100644 --- a/testdata/fwddlv_parse.rpl +++ b/testdata/fwddlv_parse.rpl @@ -4,6 +4,7 @@ trust-anchor: "dlv.isc.org. 5072 IN DNSKEY 256 3 5 BEAAAAOlYGw53D+f01yCL5JsP0SB6EjYrnd0JYRBooAaGPT+Q0kpiN+7GviFh+nIazoB8e2Yv7mupgqkmIjObdcbGstYpUltdECdNpNmBvASKB9SBdtGeRvXXpORi3Qyxb9kHGG7SpzyYbc+KDVKnzYHB94pvqu3ZZpPFPBFtCibp/mkhw==" val-override-date: "20090617133009" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/ipsecmod_bogus_ipseckey.crpl b/testdata/ipsecmod_bogus_ipseckey.crpl index 523da93..094710b 100644 --- a/testdata/ipsecmod_bogus_ipseckey.crpl +++ b/testdata/ipsecmod_bogus_ipseckey.crpl @@ -6,6 +6,7 @@ trust-anchor: "example.com. IN DS 48069 8 2 fce2bcb0d88b828064faad58e935ca2e32ff0bbd8bd8407a8f344d8f8e8c438a" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" # test that default value of harden-dnssec-stripped is still yes. fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/ipsecmod_enabled.crpl b/testdata/ipsecmod_enabled.crpl index 757abb9..501f18b 100644 --- a/testdata/ipsecmod_enabled.crpl +++ b/testdata/ipsecmod_enabled.crpl @@ -9,6 +9,7 @@ ipsecmod-strict: no ipsecmod-max-ttl: 200 ipsecmod-enabled: no + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/ipsecmod_ignore_bogus_ipseckey.crpl b/testdata/ipsecmod_ignore_bogus_ipseckey.crpl index 3d5a8fa..d62dfaf 100644 --- a/testdata/ipsecmod_ignore_bogus_ipseckey.crpl +++ b/testdata/ipsecmod_ignore_bogus_ipseckey.crpl @@ -16,6 +16,7 @@ ipsecmod-strict: no ipsecmod-max-ttl: 200 ipsecmod-ignore-bogus: yes + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/ipsecmod_max_ttl.crpl b/testdata/ipsecmod_max_ttl.crpl index 633dbe5..50d4adf 100644 --- a/testdata/ipsecmod_max_ttl.crpl +++ b/testdata/ipsecmod_max_ttl.crpl @@ -8,6 +8,7 @@ ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: no ipsecmod-max-ttl: 200 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/ipsecmod_strict.crpl b/testdata/ipsecmod_strict.crpl index 1969b3b..13d8e0e 100644 --- a/testdata/ipsecmod_strict.crpl +++ b/testdata/ipsecmod_strict.crpl @@ -8,6 +8,7 @@ ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: yes ipsecmod-max-ttl: 200 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/ipsecmod_whitelist.crpl b/testdata/ipsecmod_whitelist.crpl index a185295..d916b00 100644 --- a/testdata/ipsecmod_whitelist.crpl +++ b/testdata/ipsecmod_whitelist.crpl @@ -9,6 +9,7 @@ ipsecmod-strict: no ipsecmod-max-ttl: 200 ipsecmod-whitelist: white.example.com + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_class_any.rpl b/testdata/iter_class_any.rpl index 396692e..a4ea822 100644 --- a/testdata/iter_class_any.rpl +++ b/testdata/iter_class_any.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_cname_double.rpl b/testdata/iter_cname_double.rpl index 2e640fd..bb9f792 100644 --- a/testdata/iter_cname_double.rpl +++ b/testdata/iter_cname_double.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_cname_nx.rpl b/testdata/iter_cname_nx.rpl index cb80aa5..f826daa 100644 --- a/testdata/iter_cname_nx.rpl +++ b/testdata/iter_cname_nx.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_cname_qnamecopy.rpl b/testdata/iter_cname_qnamecopy.rpl index 1201981..bc672c1 100644 --- a/testdata/iter_cname_qnamecopy.rpl +++ b/testdata/iter_cname_qnamecopy.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_cycle.rpl b/testdata/iter_cycle.rpl index fd1cf23..27adeb5 100644 --- a/testdata/iter_cycle.rpl +++ b/testdata/iter_cycle.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_cycle_noh.rpl b/testdata/iter_cycle_noh.rpl index ce5a867..6c2982a 100644 --- a/testdata/iter_cycle_noh.rpl +++ b/testdata/iter_cycle_noh.rpl @@ -2,6 +2,7 @@ server: harden-glue: "no" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_dname_insec.rpl b/testdata/iter_dname_insec.rpl index 8f4a29c..791e384 100644 --- a/testdata/iter_dname_insec.rpl +++ b/testdata/iter_dname_insec.rpl @@ -2,6 +2,7 @@ server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_bug.rpl b/testdata/iter_dnsseclame_bug.rpl index e96e309..cb17bbf 100644 --- a/testdata/iter_dnsseclame_bug.rpl +++ b/testdata/iter_dnsseclame_bug.rpl @@ -4,6 +4,7 @@ val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ds.rpl b/testdata/iter_dnsseclame_ds.rpl index a92049b..78a11cc 100644 --- a/testdata/iter_dnsseclame_ds.rpl +++ b/testdata/iter_dnsseclame_ds.rpl @@ -4,6 +4,7 @@ val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ds_ok.rpl b/testdata/iter_dnsseclame_ds_ok.rpl index f3e9bf0..d398c82 100644 --- a/testdata/iter_dnsseclame_ds_ok.rpl +++ b/testdata/iter_dnsseclame_ds_ok.rpl @@ -3,6 +3,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_dnsseclame_ta.rpl b/testdata/iter_dnsseclame_ta.rpl index d4c1078..5799a11 100644 --- a/testdata/iter_dnsseclame_ta.rpl +++ b/testdata/iter_dnsseclame_ta.rpl @@ -4,6 +4,7 @@ val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_dnsseclame_ta_ok.rpl b/testdata/iter_dnsseclame_ta_ok.rpl index 60774fc..285fb3e 100644 --- a/testdata/iter_dnsseclame_ta_ok.rpl +++ b/testdata/iter_dnsseclame_ta_ok.rpl @@ -3,6 +3,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_donotq127.rpl b/testdata/iter_donotq127.rpl index 15f9fff..3668d7b 100644 --- a/testdata/iter_donotq127.rpl +++ b/testdata/iter_donotq127.rpl @@ -1,4 +1,6 @@ ; config options +server: + qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/iter_ds_locate_ns_detach.rpl b/testdata/iter_ds_locate_ns_detach.rpl index 9288fe5..9308bba 100644 --- a/testdata/iter_ds_locate_ns_detach.rpl +++ b/testdata/iter_ds_locate_ns_detach.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "3 2 1 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_emptydp.rpl b/testdata/iter_emptydp.rpl index 34bce81..f61b306 100644 --- a/testdata/iter_emptydp.rpl +++ b/testdata/iter_emptydp.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_emptydp_for_glue.rpl b/testdata/iter_emptydp_for_glue.rpl index aafb3b2..33951e7 100644 --- a/testdata/iter_emptydp_for_glue.rpl +++ b/testdata/iter_emptydp_for_glue.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_got6only.rpl b/testdata/iter_got6only.rpl index d7b4fde..7363a48 100644 --- a/testdata/iter_got6only.rpl +++ b/testdata/iter_got6only.rpl @@ -2,6 +2,7 @@ server: do-ip6: no target-fetch-policy: "0 0 0 0 0 " + qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/iter_hint_lame.rpl b/testdata/iter_hint_lame.rpl index 8cbede1..e9ffbce 100644 --- a/testdata/iter_hint_lame.rpl +++ b/testdata/iter_hint_lame.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_lame_noaa.rpl b/testdata/iter_lame_noaa.rpl index 116d7a2..18d326b 100644 --- a/testdata/iter_lame_noaa.rpl +++ b/testdata/iter_lame_noaa.rpl @@ -2,6 +2,7 @@ server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_lamescrub.rpl b/testdata/iter_lamescrub.rpl index 5fe6b8a..2de13a6 100644 --- a/testdata/iter_lamescrub.rpl +++ b/testdata/iter_lamescrub.rpl @@ -1,4 +1,6 @@ ; config options +server: + qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/iter_mod.rpl b/testdata/iter_mod.rpl index f7dd43e..c57e232 100644 --- a/testdata/iter_mod.rpl +++ b/testdata/iter_mod.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" module-config: "iterator" stub-zone: diff --git a/testdata/iter_ns_badip.rpl b/testdata/iter_ns_badip.rpl index 021e552..6ce2b14 100644 --- a/testdata/iter_ns_badip.rpl +++ b/testdata/iter_ns_badip.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "3 2 1 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_ns_spoof.rpl b/testdata/iter_ns_spoof.rpl index 8b7a4d5..1679ce7 100644 --- a/testdata/iter_ns_spoof.rpl +++ b/testdata/iter_ns_spoof.rpl @@ -2,6 +2,7 @@ server: harden-referral-path: yes target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/iter_pcdirect.rpl b/testdata/iter_pcdirect.rpl index 45765be..0a4487f 100644 --- a/testdata/iter_pcdirect.rpl +++ b/testdata/iter_pcdirect.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_prefetch.rpl b/testdata/iter_prefetch.rpl index 678bdd7..feb6b81 100644 --- a/testdata/iter_prefetch.rpl +++ b/testdata/iter_prefetch.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" prefetch: "yes" stub-zone: diff --git a/testdata/iter_prefetch_childns.rpl b/testdata/iter_prefetch_childns.rpl index c2b72d6..869aaa4 100644 --- a/testdata/iter_prefetch_childns.rpl +++ b/testdata/iter_prefetch_childns.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" prefetch: "yes" stub-zone: diff --git a/testdata/iter_prefetch_ns.rpl b/testdata/iter_prefetch_ns.rpl index 3dcda60..f99fb80 100644 --- a/testdata/iter_prefetch_ns.rpl +++ b/testdata/iter_prefetch_ns.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" prefetch: "yes" stub-zone: diff --git a/testdata/iter_primenoglue.rpl b/testdata/iter_primenoglue.rpl index efe248a..0d6adef 100644 --- a/testdata/iter_primenoglue.rpl +++ b/testdata/iter_primenoglue.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_privaddr.rpl b/testdata/iter_privaddr.rpl index d0f63c9..2361af6 100644 --- a/testdata/iter_privaddr.rpl +++ b/testdata/iter_privaddr.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" private-address: 10.0.0.0/8 private-address: 172.16.0.0/12 diff --git a/testdata/iter_reclame_one.rpl b/testdata/iter_reclame_one.rpl index e2e6b45..fe15b25 100644 --- a/testdata/iter_reclame_one.rpl +++ b/testdata/iter_reclame_one.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_recurse.rpl b/testdata/iter_recurse.rpl index c787ac3..ab62e1a 100644 --- a/testdata/iter_recurse.rpl +++ b/testdata/iter_recurse.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_resolve.rpl b/testdata/iter_resolve.rpl index 293c3fe..cab3887 100644 --- a/testdata/iter_resolve.rpl +++ b/testdata/iter_resolve.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_resolve_minimised.rpl b/testdata/iter_resolve_minimised.rpl index fc42bae..ab3c6e9 100644 --- a/testdata/iter_resolve_minimised.rpl +++ b/testdata/iter_resolve_minimised.rpl @@ -1,7 +1,6 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" - qname-minimisation: yes stub-zone: name: "." diff --git a/testdata/iter_scrub_cname_an.rpl b/testdata/iter_scrub_cname_an.rpl index 8f184d4..54a98c6 100644 --- a/testdata/iter_scrub_cname_an.rpl +++ b/testdata/iter_scrub_cname_an.rpl @@ -2,6 +2,7 @@ server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_scrub_dname_insec.rpl b/testdata/iter_scrub_dname_insec.rpl index f205b0e..a297220 100644 --- a/testdata/iter_scrub_dname_insec.rpl +++ b/testdata/iter_scrub_dname_insec.rpl @@ -2,6 +2,7 @@ server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/iter_scrub_dname_rev.rpl b/testdata/iter_scrub_dname_rev.rpl index 67ee560..b7e3ee2 100644 --- a/testdata/iter_scrub_dname_rev.rpl +++ b/testdata/iter_scrub_dname_rev.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_scrub_dname_sec.rpl b/testdata/iter_scrub_dname_sec.rpl index bcc289e..1b9153b 100644 --- a/testdata/iter_scrub_dname_sec.rpl +++ b/testdata/iter_scrub_dname_sec.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/iter_timeout_ra_aaaa.rpl b/testdata/iter_timeout_ra_aaaa.rpl index 2815d4c..9b06aea 100644 --- a/testdata/iter_timeout_ra_aaaa.rpl +++ b/testdata/iter_timeout_ra_aaaa.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/local_ds.rpl b/testdata/local_ds.rpl index 58b3e22..d76d346 100644 --- a/testdata/local_ds.rpl +++ b/testdata/local_ds.rpl @@ -1,7 +1,7 @@ ; config options ; The island of trust is at example.com server: - + qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. diff --git a/testdata/local_nodefault.rpl b/testdata/local_nodefault.rpl index 7941962..7a1e140 100644 --- a/testdata/local_nodefault.rpl +++ b/testdata/local_nodefault.rpl @@ -2,6 +2,7 @@ ; The island of trust is at example.com server: local-zone: "10.in-addr.arpa" nodefault + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/local_typetransparent.rpl b/testdata/local_typetransparent.rpl index 6396918..8fe3402 100644 --- a/testdata/local_typetransparent.rpl +++ b/testdata/local_typetransparent.rpl @@ -3,6 +3,7 @@ server: local-zone: "example.com." typetransparent local-data: "mail.example.com. IN A 10.20.30.40" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/nomem_cnametopos.rpl b/testdata/nomem_cnametopos.rpl index 1c7f6a5..c1610d6 100644 --- a/testdata/nomem_cnametopos.rpl +++ b/testdata/nomem_cnametopos.rpl @@ -7,6 +7,7 @@ msg-cache-size: 8 rrset-cache-size: 8 target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/stop_nxdomain.rpl b/testdata/stop_nxdomain.rpl index 04cf83a..b503dfe 100644 --- a/testdata/stop_nxdomain.rpl +++ b/testdata/stop_nxdomain.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" harden-below-nxdomain: yes trust-anchor: ". IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" val-override-date: "20070916134226" diff --git a/testdata/subnet_cached.crpl b/testdata/subnet_cached.crpl index 3f7571a..3d4fd9a 100644 --- a/testdata/subnet_cached.crpl +++ b/testdata/subnet_cached.crpl @@ -11,6 +11,7 @@ module-config: "subnetcache validator iterator" verbosity: 3 access-control: 127.0.0.1 allow_snoop + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_derived.crpl b/testdata/subnet_derived.crpl index e2944ff..6ff626a 100644 --- a/testdata/subnet_derived.crpl +++ b/testdata/subnet_derived.crpl @@ -4,6 +4,7 @@ max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache validator iterator" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_format_ip4.crpl b/testdata/subnet_format_ip4.crpl index 2ee3c7d..cd1c858 100644 --- a/testdata/subnet_format_ip4.crpl +++ b/testdata/subnet_format_ip4.crpl @@ -3,6 +3,7 @@ max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache validator iterator" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_max_source.crpl b/testdata/subnet_max_source.crpl index dc4b542..aae1f1a 100644 --- a/testdata/subnet_max_source.crpl +++ b/testdata/subnet_max_source.crpl @@ -9,6 +9,7 @@ max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_not_whitelisted.crpl b/testdata/subnet_not_whitelisted.crpl index 474687b..545b019 100644 --- a/testdata/subnet_not_whitelisted.crpl +++ b/testdata/subnet_not_whitelisted.crpl @@ -4,6 +4,7 @@ max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache validator iterator" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_val_positive.crpl b/testdata/subnet_val_positive.crpl index 2f75be7..ef33531 100644 --- a/testdata/subnet_val_positive.crpl +++ b/testdata/subnet_val_positive.crpl @@ -9,6 +9,7 @@ max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_val_positive_client.crpl b/testdata/subnet_val_positive_client.crpl index 4bbfac1..dcd3a87 100644 --- a/testdata/subnet_val_positive_client.crpl +++ b/testdata/subnet_val_positive_client.crpl @@ -10,6 +10,7 @@ max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/subnet_without_validator.crpl b/testdata/subnet_without_validator.crpl index ea0daf7..2fbf242 100644 --- a/testdata/subnet_without_validator.crpl +++ b/testdata/subnet_without_validator.crpl @@ -3,6 +3,7 @@ max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache iterator" + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns index 7b773d3..1464772 100644 --- a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns @@ -13,7 +13,7 @@ ENTRY_BEGIN MATCH TCP opcode qtype qname REPLY QR AA NOERROR -ADJUST copy_id sleep=3 +ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER diff --git a/testdata/ttl_max.rpl b/testdata/ttl_max.rpl index 6443da7..1faa054 100644 --- a/testdata/ttl_max.rpl +++ b/testdata/ttl_max.rpl @@ -2,6 +2,7 @@ server: access-control: 127.0.0.1 allow_snoop cache-max-ttl: 10 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/ttl_min.rpl b/testdata/ttl_min.rpl index 1fa7ef1..b965fdb 100644 --- a/testdata/ttl_min.rpl +++ b/testdata/ttl_min.rpl @@ -2,6 +2,7 @@ server: access-control: 127.0.0.1 allow_snoop cache-min-ttl: 10 + qname-minimisation: "no" stub-zone: name: "." diff --git a/testdata/ttl_msg.rpl b/testdata/ttl_msg.rpl index 627f061..efb7ea3 100644 --- a/testdata/ttl_msg.rpl +++ b/testdata/ttl_msg.rpl @@ -2,6 +2,7 @@ ; fetch all extra targets - we want to trigger a lookup in cache server: target-fetch-policy: "-1 -1 -1 -1 -1" + qname-minimisation: "no" access-control: 127.0.0.1 allow_snoop stub-zone: diff --git a/testdata/val_adbit.rpl b/testdata/val_adbit.rpl index c859ab8..f8f44fc 100644 --- a/testdata/val_adbit.rpl +++ b/testdata/val_adbit.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_adcopy.rpl b/testdata/val_adcopy.rpl index 04d0488..beb9523 100644 --- a/testdata/val_adcopy.rpl +++ b/testdata/val_adcopy.rpl @@ -4,6 +4,7 @@ #trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_anchor_nx.rpl b/testdata/val_anchor_nx.rpl index 6067cb3..5d8855b 100644 --- a/testdata/val_anchor_nx.rpl +++ b/testdata/val_anchor_nx.rpl @@ -5,6 +5,7 @@ trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_anchor_nx_nosig.rpl b/testdata/val_anchor_nx_nosig.rpl index e36180b..e0dc7d8 100644 --- a/testdata/val_anchor_nx_nosig.rpl +++ b/testdata/val_anchor_nx_nosig.rpl @@ -4,6 +4,7 @@ trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_ans_dsent.rpl b/testdata/val_ans_dsent.rpl index 4d543b2..09ce621 100644 --- a/testdata/val_ans_dsent.rpl +++ b/testdata/val_ans_dsent.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ans_nx.rpl b/testdata/val_ans_nx.rpl index d70316d..48f4527 100644 --- a/testdata/val_ans_nx.rpl +++ b/testdata/val_ans_nx.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_any.rpl b/testdata/val_any.rpl index bb4db8f..058f449 100644 --- a/testdata/val_any.rpl +++ b/testdata/val_any.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_any_cname.rpl b/testdata/val_any_cname.rpl index 56b22ba..5e5d12b 100644 --- a/testdata/val_any_cname.rpl +++ b/testdata/val_any_cname.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_any_dname.rpl b/testdata/val_any_dname.rpl index 331698d..3957f7b 100644 --- a/testdata/val_any_dname.rpl +++ b/testdata/val_any_dname.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cname_loop1.rpl b/testdata/val_cname_loop1.rpl index 61fcdb7..b261ecf 100644 --- a/testdata/val_cname_loop1.rpl +++ b/testdata/val_cname_loop1.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_cname_loop2.rpl b/testdata/val_cname_loop2.rpl index 26644bc..009616f 100644 --- a/testdata/val_cname_loop2.rpl +++ b/testdata/val_cname_loop2.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_cname_loop3.rpl b/testdata/val_cname_loop3.rpl index fbd0d8a..acdd110 100644 --- a/testdata/val_cname_loop3.rpl +++ b/testdata/val_cname_loop3.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_cnameinsectopos.rpl b/testdata/val_cnameinsectopos.rpl index d11b728..8a26feb 100644 --- a/testdata/val_cnameinsectopos.rpl +++ b/testdata/val_cnameinsectopos.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnamenx_dblnsec.rpl b/testdata/val_cnamenx_dblnsec.rpl index 499e051..4a04324 100644 --- a/testdata/val_cnamenx_dblnsec.rpl +++ b/testdata/val_cnamenx_dblnsec.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnamenx_rcodenx.rpl b/testdata/val_cnamenx_rcodenx.rpl index e733619..09d3793 100644 --- a/testdata/val_cnamenx_rcodenx.rpl +++ b/testdata/val_cnamenx_rcodenx.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnameqtype.rpl b/testdata/val_cnameqtype.rpl index 73fc6a8..05ef474 100644 --- a/testdata/val_cnameqtype.rpl +++ b/testdata/val_cnameqtype.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametocnamewctoposwc.rpl b/testdata/val_cnametocnamewctoposwc.rpl index 374db7b..f17f5aa 100644 --- a/testdata/val_cnametocnamewctoposwc.rpl +++ b/testdata/val_cnametocnamewctoposwc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametodname.rpl b/testdata/val_cnametodname.rpl index 9719dba..e064ec5 100644 --- a/testdata/val_cnametodname.rpl +++ b/testdata/val_cnametodname.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametodnametocnametopos.rpl b/testdata/val_cnametodnametocnametopos.rpl index 1d75f7e..280e557 100644 --- a/testdata/val_cnametodnametocnametopos.rpl +++ b/testdata/val_cnametodnametocnametopos.rpl @@ -6,6 +6,7 @@ trust-anchor: "example.org. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametonodata.rpl b/testdata/val_cnametonodata.rpl index 2aba3ae..c94cfed 100644 --- a/testdata/val_cnametonodata.rpl +++ b/testdata/val_cnametonodata.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametonodata_nonsec.rpl b/testdata/val_cnametonodata_nonsec.rpl index 4b1eeb2..c1346ce 100644 --- a/testdata/val_cnametonodata_nonsec.rpl +++ b/testdata/val_cnametonodata_nonsec.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametonsec.rpl b/testdata/val_cnametonsec.rpl index e721dca..27a562f 100644 --- a/testdata/val_cnametonsec.rpl +++ b/testdata/val_cnametonsec.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametonx.rpl b/testdata/val_cnametonx.rpl index 973bfaf..f381029 100644 --- a/testdata/val_cnametonx.rpl +++ b/testdata/val_cnametonx.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametooptin.rpl b/testdata/val_cnametooptin.rpl index 622c5e2..77a3c06 100644 --- a/testdata/val_cnametooptin.rpl +++ b/testdata/val_cnametooptin.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametopos.rpl b/testdata/val_cnametopos.rpl index d0d38ca..b71bdb2 100644 --- a/testdata/val_cnametopos.rpl +++ b/testdata/val_cnametopos.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametoposnowc.rpl b/testdata/val_cnametoposnowc.rpl index a5572a0..343c3e2 100644 --- a/testdata/val_cnametoposnowc.rpl +++ b/testdata/val_cnametoposnowc.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnametoposwc.rpl b/testdata/val_cnametoposwc.rpl index 8cca507..01801b7 100644 --- a/testdata/val_cnametoposwc.rpl +++ b/testdata/val_cnametoposwc.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnamewctonodata.rpl b/testdata/val_cnamewctonodata.rpl index 3e51789..65c0007 100644 --- a/testdata/val_cnamewctonodata.rpl +++ b/testdata/val_cnamewctonodata.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnamewctonx.rpl b/testdata/val_cnamewctonx.rpl index 2de1f35..a576293 100644 --- a/testdata/val_cnamewctonx.rpl +++ b/testdata/val_cnamewctonx.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_cnamewctoposwc.rpl b/testdata/val_cnamewctoposwc.rpl index 7636521..0c9932d 100644 --- a/testdata/val_cnamewctoposwc.rpl +++ b/testdata/val_cnamewctoposwc.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_deleg_nons.rpl b/testdata/val_deleg_nons.rpl index 49e72bf..6e8f1bd 100644 --- a/testdata/val_deleg_nons.rpl +++ b/testdata/val_deleg_nons.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_dnametopos.rpl b/testdata/val_dnametopos.rpl index edf932b..c0ccc59 100644 --- a/testdata/val_dnametopos.rpl +++ b/testdata/val_dnametopos.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_dnametoposwc.rpl b/testdata/val_dnametoposwc.rpl index 5c9c8f7..16481d1 100644 --- a/testdata/val_dnametoposwc.rpl +++ b/testdata/val_dnametoposwc.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_dnamewc.rpl b/testdata/val_dnamewc.rpl index 33055b1..b011af8 100644 --- a/testdata/val_dnamewc.rpl +++ b/testdata/val_dnamewc.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_afterprime.rpl b/testdata/val_ds_afterprime.rpl index 8f219e2..50c28aa 100644 --- a/testdata/val_ds_afterprime.rpl +++ b/testdata/val_ds_afterprime.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_cname.rpl b/testdata/val_ds_cname.rpl index a9b7f09..7c3e41b 100644 --- a/testdata/val_ds_cname.rpl +++ b/testdata/val_ds_cname.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_cnamesub.rpl b/testdata/val_ds_cnamesub.rpl index 211d550..bbd3689 100644 --- a/testdata/val_ds_cnamesub.rpl +++ b/testdata/val_ds_cnamesub.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_gost.crpl b/testdata/val_ds_gost.crpl index d66234a..5babb3d 100644 --- a/testdata/val_ds_gost.crpl +++ b/testdata/val_ds_gost.crpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_gost_downgrade.crpl b/testdata/val_ds_gost_downgrade.crpl index ff88f90..a3930bc 100644 --- a/testdata/val_ds_gost_downgrade.crpl +++ b/testdata/val_ds_gost_downgrade.crpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no harden-algo-downgrade: yes diff --git a/testdata/val_ds_sha2.crpl b/testdata/val_ds_sha2.crpl index 1e13f89..4af6693 100644 --- a/testdata/val_ds_sha2.crpl +++ b/testdata/val_ds_sha2.crpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-dsa: yes fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_sha2_downgrade.crpl b/testdata/val_ds_sha2_downgrade.crpl index 2feacb1..b15f39b 100644 --- a/testdata/val_ds_sha2_downgrade.crpl +++ b/testdata/val_ds_sha2_downgrade.crpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-dsa: yes fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ds_sha2_lenient.crpl b/testdata/val_ds_sha2_lenient.crpl index a0d1cc0..631facd 100644 --- a/testdata/val_ds_sha2_lenient.crpl +++ b/testdata/val_ds_sha2_lenient.crpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-dsa: yes fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_entds.rpl b/testdata/val_entds.rpl index 9a0b539..74509ac 100644 --- a/testdata/val_entds.rpl +++ b/testdata/val_entds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_keyprefetch.rpl b/testdata/val_keyprefetch.rpl index 2bc5031..0462833 100644 --- a/testdata/val_keyprefetch.rpl +++ b/testdata/val_keyprefetch.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" prefetch-key: yes fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_keyprefetch_verify.rpl b/testdata/val_keyprefetch_verify.rpl index a67c37b..f55bd79 100644 --- a/testdata/val_keyprefetch_verify.rpl +++ b/testdata/val_keyprefetch_verify.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" prefetch-key: yes prefetch: yes fake-sha1: yes diff --git a/testdata/val_mal_wc.rpl b/testdata/val_mal_wc.rpl index 1113f75..5279092 100644 --- a/testdata/val_mal_wc.rpl +++ b/testdata/val_mal_wc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_negcache_ds.rpl b/testdata/val_negcache_ds.rpl index 00af0d6..3a2c8d5 100644 --- a/testdata/val_negcache_ds.rpl +++ b/testdata/val_negcache_ds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_negcache_dssoa.rpl b/testdata/val_negcache_dssoa.rpl index b02d98b..0121d1f 100644 --- a/testdata/val_negcache_dssoa.rpl +++ b/testdata/val_negcache_dssoa.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_negcache_nodata.rpl b/testdata/val_negcache_nodata.rpl index 374ac40..2fb9429 100644 --- a/testdata/val_negcache_nodata.rpl +++ b/testdata/val_negcache_nodata.rpl @@ -4,6 +4,7 @@ trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes diff --git a/testdata/val_negcache_nta.rpl b/testdata/val_negcache_nta.rpl index 2331643..95c25fd 100644 --- a/testdata/val_negcache_nta.rpl +++ b/testdata/val_negcache_nta.rpl @@ -4,6 +4,7 @@ trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes domain-insecure: "ant.testzone.nlnetlabs.nl" diff --git a/testdata/val_negcache_nxdomain.rpl b/testdata/val_negcache_nxdomain.rpl index 06f115b..520c577 100644 --- a/testdata/val_negcache_nxdomain.rpl +++ b/testdata/val_negcache_nxdomain.rpl @@ -4,6 +4,7 @@ trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes diff --git a/testdata/val_noadwhennodo.rpl b/testdata/val_noadwhennodo.rpl index 3d34b6f..c4b9afd 100644 --- a/testdata/val_noadwhennodo.rpl +++ b/testdata/val_noadwhennodo.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata.rpl b/testdata/val_nodata.rpl index faf62d4..f199634 100644 --- a/testdata/val_nodata.rpl +++ b/testdata/val_nodata.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata_ent.rpl b/testdata/val_nodata_ent.rpl index 0e41635..96ba7db 100644 --- a/testdata/val_nodata_ent.rpl +++ b/testdata/val_nodata_ent.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata_entnx.rpl b/testdata/val_nodata_entnx.rpl index 2e4fd87..c8e704e 100644 --- a/testdata/val_nodata_entnx.rpl +++ b/testdata/val_nodata_entnx.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. IN DS 29332 8 2 751f8b755718a7b4ef8920a4b42407520889c3d2142a64f6ffad9e12fa9fc262" val-override-date: "20140301134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata_entwc.rpl b/testdata/val_nodata_entwc.rpl index cf64da8..c02e952 100644 --- a/testdata/val_nodata_entwc.rpl +++ b/testdata/val_nodata_entwc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata_failsig.rpl b/testdata/val_nodata_failsig.rpl index 2b84e6f..f1be663 100644 --- a/testdata/val_nodata_failsig.rpl +++ b/testdata/val_nodata_failsig.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata_failwc.rpl b/testdata/val_nodata_failwc.rpl index 4e4a7c3..76fa8ac 100644 --- a/testdata/val_nodata_failwc.rpl +++ b/testdata/val_nodata_failwc.rpl @@ -4,6 +4,7 @@ trust-anchor: "nsecwc.nlnetlabs.nl. 10024 IN DS 565 8 2 0C15C04C022700C8713028F6F64CF2343DE627B8F83CDA1C421C65DB 52908A2E" val-override-date: "20181202115531" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: diff --git a/testdata/val_nodata_hasdata.rpl b/testdata/val_nodata_hasdata.rpl index f348375..18f420c 100644 --- a/testdata/val_nodata_hasdata.rpl +++ b/testdata/val_nodata_hasdata.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodata_zonecut.rpl b/testdata/val_nodata_zonecut.rpl index 135aa51..eb84ac0 100644 --- a/testdata/val_nodata_zonecut.rpl +++ b/testdata/val_nodata_zonecut.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodatawc.rpl b/testdata/val_nodatawc.rpl index 6b33985..542b65e 100644 --- a/testdata/val_nodatawc.rpl +++ b/testdata/val_nodatawc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodatawc_badce.rpl b/testdata/val_nodatawc_badce.rpl index da8118a..49ee7f1 100644 --- a/testdata/val_nodatawc_badce.rpl +++ b/testdata/val_nodatawc_badce.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodatawc_nodeny.rpl b/testdata/val_nodatawc_nodeny.rpl index 2bedc9a..35f154e 100644 --- a/testdata/val_nodatawc_nodeny.rpl +++ b/testdata/val_nodatawc_nodeny.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nodatawc_one.rpl b/testdata/val_nodatawc_one.rpl index 45eb518..081d20c 100644 --- a/testdata/val_nodatawc_one.rpl +++ b/testdata/val_nodatawc_one.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b1_nameerror.rpl b/testdata/val_nsec3_b1_nameerror.rpl index 219426b..f9d1d26 100644 --- a/testdata/val_nsec3_b1_nameerror.rpl +++ b/testdata/val_nsec3_b1_nameerror.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b1_nameerror_noce.rpl b/testdata/val_nsec3_b1_nameerror_noce.rpl index 11a0d0c..ebe93a6 100644 --- a/testdata/val_nsec3_b1_nameerror_noce.rpl +++ b/testdata/val_nsec3_b1_nameerror_noce.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b1_nameerror_nonc.rpl b/testdata/val_nsec3_b1_nameerror_nonc.rpl index 27d1657..3fc9db6 100644 --- a/testdata/val_nsec3_b1_nameerror_nonc.rpl +++ b/testdata/val_nsec3_b1_nameerror_nonc.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm 3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b1_nameerror_nowc.rpl b/testdata/val_nsec3_b1_nameerror_nowc.rpl index ca47687..6c77421 100644 --- a/testdata/val_nsec3_b1_nameerror_nowc.rpl +++ b/testdata/val_nsec3_b1_nameerror_nowc.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b21_nodataent.rpl b/testdata/val_nsec3_b21_nodataent.rpl index 6253900..e20a285 100644 --- a/testdata/val_nsec3_b21_nodataent.rpl +++ b/testdata/val_nsec3_b21_nodataent.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b21_nodataent_wr.rpl b/testdata/val_nsec3_b21_nodataent_wr.rpl index 731c35f..a56f0b8 100644 --- a/testdata/val_nsec3_b21_nodataent_wr.rpl +++ b/testdata/val_nsec3_b21_nodataent_wr.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b2_nodata.rpl b/testdata/val_nsec3_b2_nodata.rpl index 158ad02..709c918 100644 --- a/testdata/val_nsec3_b2_nodata.rpl +++ b/testdata/val_nsec3_b2_nodata.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b3_optout.rpl b/testdata/val_nsec3_b3_optout.rpl index 48488f4..41e2e38 100644 --- a/testdata/val_nsec3_b3_optout.rpl +++ b/testdata/val_nsec3_b3_optout.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b3_optout_negcache.rpl b/testdata/val_nsec3_b3_optout_negcache.rpl index 930df96..e2897e5 100644 --- a/testdata/val_nsec3_b3_optout_negcache.rpl +++ b/testdata/val_nsec3_b3_optout_negcache.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b3_optout_noce.rpl b/testdata/val_nsec3_b3_optout_noce.rpl index a859d27..ddcd4c0 100644 --- a/testdata/val_nsec3_b3_optout_noce.rpl +++ b/testdata/val_nsec3_b3_optout_noce.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b3_optout_nonc.rpl b/testdata/val_nsec3_b3_optout_nonc.rpl index e7ff8d4..c4b044e 100644 --- a/testdata/val_nsec3_b3_optout_nonc.rpl +++ b/testdata/val_nsec3_b3_optout_nonc.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b4_wild.rpl b/testdata/val_nsec3_b4_wild.rpl index 6143cba..db205ab 100644 --- a/testdata/val_nsec3_b4_wild.rpl +++ b/testdata/val_nsec3_b4_wild.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b4_wild_wr.rpl b/testdata/val_nsec3_b4_wild_wr.rpl index 1aaae02..50daf38 100644 --- a/testdata/val_nsec3_b4_wild_wr.rpl +++ b/testdata/val_nsec3_b4_wild_wr.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b5_wcnodata.rpl b/testdata/val_nsec3_b5_wcnodata.rpl index ea8fa5b..a10d6b7 100644 --- a/testdata/val_nsec3_b5_wcnodata.rpl +++ b/testdata/val_nsec3_b5_wcnodata.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b5_wcnodata_noce.rpl b/testdata/val_nsec3_b5_wcnodata_noce.rpl index 4e7995c..f35eae1 100644 --- a/testdata/val_nsec3_b5_wcnodata_noce.rpl +++ b/testdata/val_nsec3_b5_wcnodata_noce.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b5_wcnodata_nonc.rpl b/testdata/val_nsec3_b5_wcnodata_nonc.rpl index f335697..e4c58c6 100644 --- a/testdata/val_nsec3_b5_wcnodata_nonc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nonc.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_b5_wcnodata_nowc.rpl b/testdata/val_nsec3_b5_wcnodata_nowc.rpl index 32bc729..27f68d6 100644 --- a/testdata/val_nsec3_b5_wcnodata_nowc.rpl +++ b/testdata/val_nsec3_b5_wcnodata_nowc.rpl @@ -3,6 +3,7 @@ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_cname_ds.rpl b/testdata/val_nsec3_cname_ds.rpl index 200b467..a3c2b8a 100644 --- a/testdata/val_nsec3_cname_ds.rpl +++ b/testdata/val_nsec3_cname_ds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_cname_par.rpl b/testdata/val_nsec3_cname_par.rpl index 71c0951..e07a4ae 100644 --- a/testdata/val_nsec3_cname_par.rpl +++ b/testdata/val_nsec3_cname_par.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_cname_sub.rpl b/testdata/val_nsec3_cname_sub.rpl index 52af440..233afb0 100644 --- a/testdata/val_nsec3_cname_sub.rpl +++ b/testdata/val_nsec3_cname_sub.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_cnametocnamewctoposwc.rpl b/testdata/val_nsec3_cnametocnamewctoposwc.rpl index 24bf6cf..23d2b6a 100644 --- a/testdata/val_nsec3_cnametocnamewctoposwc.rpl +++ b/testdata/val_nsec3_cnametocnamewctoposwc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_iter_high.rpl b/testdata/val_nsec3_iter_high.rpl index 0315537..2b78f0b 100644 --- a/testdata/val_nsec3_iter_high.rpl +++ b/testdata/val_nsec3_iter_high.rpl @@ -5,6 +5,7 @@ val-override-date: "20070916134226" val-nsec3-keysize-iterations: "1024 100 2048 200 4096 500" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_nodatawccname.rpl b/testdata/val_nsec3_nodatawccname.rpl index 8a54464..48631bc 100644 --- a/testdata/val_nsec3_nodatawccname.rpl +++ b/testdata/val_nsec3_nodatawccname.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_nods.rpl b/testdata/val_nsec3_nods.rpl index 1496a98..7151e11 100644 --- a/testdata/val_nsec3_nods.rpl +++ b/testdata/val_nsec3_nods.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_nods_badopt.rpl b/testdata/val_nsec3_nods_badopt.rpl index 607dd8b..6ddd474 100644 --- a/testdata/val_nsec3_nods_badopt.rpl +++ b/testdata/val_nsec3_nods_badopt.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_nods_badsig.rpl b/testdata/val_nsec3_nods_badsig.rpl index d125305..1c37d21 100644 --- a/testdata/val_nsec3_nods_badsig.rpl +++ b/testdata/val_nsec3_nods_badsig.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_nods_negcache.rpl b/testdata/val_nsec3_nods_negcache.rpl index d542aad..d2ba730 100644 --- a/testdata/val_nsec3_nods_negcache.rpl +++ b/testdata/val_nsec3_nods_negcache.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_optout_ad.rpl b/testdata/val_nsec3_optout_ad.rpl index 12a8716..824cf6d 100644 --- a/testdata/val_nsec3_optout_ad.rpl +++ b/testdata/val_nsec3_optout_ad.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. DS 57024 7 1 46d134be319b2cc910b9938f1cb25dc41abb27bf" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_wcany.rpl b/testdata/val_nsec3_wcany.rpl index 256bf60..24bdaeb 100644 --- a/testdata/val_nsec3_wcany.rpl +++ b/testdata/val_nsec3_wcany.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nsec3_wcany_nodeny.rpl b/testdata/val_nsec3_wcany_nodeny.rpl index 1ac1514..2e27fb5 100644 --- a/testdata/val_nsec3_wcany_nodeny.rpl +++ b/testdata/val_nsec3_wcany_nodeny.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nx.rpl b/testdata/val_nx.rpl index c4684a1..d0e4bb3 100644 --- a/testdata/val_nx.rpl +++ b/testdata/val_nx.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nx_failwc.rpl b/testdata/val_nx_failwc.rpl index dc58085..eb2f5ba 100644 --- a/testdata/val_nx_failwc.rpl +++ b/testdata/val_nx_failwc.rpl @@ -4,6 +4,7 @@ trust-anchor: "nsecwc.nlnetlabs.nl. 10024 IN DS 565 8 2 0C15C04C022700C8713028F6F64CF2343DE627B8F83CDA1C421C65DB 52908A2E" val-override-date: "20181202115531" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: diff --git a/testdata/val_nx_nodeny.rpl b/testdata/val_nx_nodeny.rpl index b1abb42..311b6ab 100644 --- a/testdata/val_nx_nodeny.rpl +++ b/testdata/val_nx_nodeny.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nx_nowc.rpl b/testdata/val_nx_nowc.rpl index 12aca55..3a5aa18 100644 --- a/testdata/val_nx_nowc.rpl +++ b/testdata/val_nx_nowc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nx_nsec3_collision.rpl b/testdata/val_nx_nsec3_collision.rpl index 25f9621..41cd0d6 100644 --- a/testdata/val_nx_nsec3_collision.rpl +++ b/testdata/val_nx_nsec3_collision.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nx_nsec3_params.rpl b/testdata/val_nx_nsec3_params.rpl index 90ac45d..dd3ab6b 100644 --- a/testdata/val_nx_nsec3_params.rpl +++ b/testdata/val_nx_nsec3_params.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_nx_overreach.rpl b/testdata/val_nx_overreach.rpl index d6bf758..c63d4da 100644 --- a/testdata/val_nx_overreach.rpl +++ b/testdata/val_nx_overreach.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_pos_truncns.rpl b/testdata/val_pos_truncns.rpl index 2b52e77..57f320e 100644 --- a/testdata/val_pos_truncns.rpl +++ b/testdata/val_pos_truncns.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_positive.rpl b/testdata/val_positive.rpl index d5a6061..bef91f6 100644 --- a/testdata/val_positive.rpl +++ b/testdata/val_positive.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_positive_wc.rpl b/testdata/val_positive_wc.rpl index 4b61a8d..5384acf 100644 --- a/testdata/val_positive_wc.rpl +++ b/testdata/val_positive_wc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_positive_wc_nodeny.rpl b/testdata/val_positive_wc_nodeny.rpl index 6d14ae8..e87611e 100644 --- a/testdata/val_positive_wc_nodeny.rpl +++ b/testdata/val_positive_wc_nodeny.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_qds_badanc.rpl b/testdata/val_qds_badanc.rpl index dce22a8..5c9f756 100644 --- a/testdata/val_qds_badanc.rpl +++ b/testdata/val_qds_badanc.rpl @@ -4,6 +4,7 @@ trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_qds_oneanc.rpl b/testdata/val_qds_oneanc.rpl index 183611d..c742cfa 100644 --- a/testdata/val_qds_oneanc.rpl +++ b/testdata/val_qds_oneanc.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_qds_twoanc.rpl b/testdata/val_qds_twoanc.rpl index 8d7bd1c..dc66388 100644 --- a/testdata/val_qds_twoanc.rpl +++ b/testdata/val_qds_twoanc.rpl @@ -5,6 +5,7 @@ trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_refer_unsignadd.rpl b/testdata/val_refer_unsignadd.rpl index a83998f..90e0f04 100644 --- a/testdata/val_refer_unsignadd.rpl +++ b/testdata/val_refer_unsignadd.rpl @@ -6,6 +6,7 @@ val-override-date: "20070916134226" access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_referd.rpl b/testdata/val_referd.rpl index 6b3d108..dfc82e1 100644 --- a/testdata/val_referd.rpl +++ b/testdata/val_referd.rpl @@ -6,6 +6,7 @@ harden-referral-path: no access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_referglue.rpl b/testdata/val_referglue.rpl index 836f46a..a9714d1 100644 --- a/testdata/val_referglue.rpl +++ b/testdata/val_referglue.rpl @@ -6,6 +6,7 @@ directory: "" access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_rrsig.rpl b/testdata/val_rrsig.rpl index e8c39f0..d9684e4 100644 --- a/testdata/val_rrsig.rpl +++ b/testdata/val_rrsig.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_secds.rpl b/testdata/val_secds.rpl index f7f4e97..6178627 100644 --- a/testdata/val_secds.rpl +++ b/testdata/val_secds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_spurious_ns.rpl b/testdata/val_spurious_ns.rpl index 3a6281e..0f9d843 100644 --- a/testdata/val_spurious_ns.rpl +++ b/testdata/val_spurious_ns.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ta_algo_dnskey.rpl b/testdata/val_ta_algo_dnskey.rpl index 9770e5a..a1f1ed5 100644 --- a/testdata/val_ta_algo_dnskey.rpl +++ b/testdata/val_ta_algo_dnskey.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ta_algo_dnskey_dp.rpl b/testdata/val_ta_algo_dnskey_dp.rpl index aa8edc4..1dd48bf 100644 --- a/testdata/val_ta_algo_dnskey_dp.rpl +++ b/testdata/val_ta_algo_dnskey_dp.rpl @@ -5,6 +5,7 @@ trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" harden-algo-downgrade: no fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ta_algo_missing.rpl b/testdata/val_ta_algo_missing.rpl index 1480f0d..a905c22 100644 --- a/testdata/val_ta_algo_missing.rpl +++ b/testdata/val_ta_algo_missing.rpl @@ -6,6 +6,7 @@ trust-anchor: "example.com. 3600 IN DS 30899 7 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" harden-algo-downgrade: yes fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_ta_algo_missing_dp.rpl b/testdata/val_ta_algo_missing_dp.rpl index 737cbd1..4709407 100644 --- a/testdata/val_ta_algo_missing_dp.rpl +++ b/testdata/val_ta_algo_missing_dp.rpl @@ -6,6 +6,7 @@ trust-anchor: "example.com. 3600 IN DS 30899 7 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" harden-algo-downgrade: no fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_unalgo_anchor.rpl b/testdata/val_unalgo_anchor.rpl index 0848b70..24dcbaf 100644 --- a/testdata/val_unalgo_anchor.rpl +++ b/testdata/val_unalgo_anchor.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 208 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes stub-zone: diff --git a/testdata/val_unalgo_dlv.rpl b/testdata/val_unalgo_dlv.rpl index 7419ebe..e78226f 100644 --- a/testdata/val_unalgo_dlv.rpl +++ b/testdata/val_unalgo_dlv.rpl @@ -4,6 +4,7 @@ dlv-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_unalgo_ds.rpl b/testdata/val_unalgo_ds.rpl index b8fc44f..65db9b2 100644 --- a/testdata/val_unalgo_ds.rpl +++ b/testdata/val_unalgo_ds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_unsec_cname.rpl b/testdata/val_unsec_cname.rpl index 9be8054..ad02dae 100644 --- a/testdata/val_unsec_cname.rpl +++ b/testdata/val_unsec_cname.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_unsecds.rpl b/testdata/val_unsecds.rpl index 7a19351..8678160 100644 --- a/testdata/val_unsecds.rpl +++ b/testdata/val_unsecds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_unsecds_negcache.rpl b/testdata/val_unsecds_negcache.rpl index 8136d3c..2e9b1e7 100644 --- a/testdata/val_unsecds_negcache.rpl +++ b/testdata/val_unsecds_negcache.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_unsecds_qtypeds.rpl b/testdata/val_unsecds_qtypeds.rpl index e4b9a22..e277fd7 100644 --- a/testdata/val_unsecds_qtypeds.rpl +++ b/testdata/val_unsecds_qtypeds.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/val_wild_pos.rpl b/testdata/val_wild_pos.rpl index 1d4357b..2fc3847 100644 --- a/testdata/val_wild_pos.rpl +++ b/testdata/val_wild_pos.rpl @@ -4,6 +4,7 @@ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no diff --git a/testdata/views.rpl b/testdata/views.rpl index d403136..5573cd8 100644 --- a/testdata/views.rpl +++ b/testdata/views.rpl @@ -1,6 +1,7 @@ ; config options server: target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" access-control: 10.10.10.0/24 allow access-control-view: 10.10.10.10/32 "view1" diff --git a/util/alloc.c b/util/alloc.c index 2c6e1a2..908b1f4 100644 --- a/util/alloc.c +++ b/util/alloc.c @@ -126,10 +126,40 @@ } } +/** free the special list */ +static void +alloc_clear_special_list(struct alloc_cache* alloc) +{ + alloc_special_type* p, *np; + /* free */ + p = alloc->quar; + while(p) { + np = alloc_special_next(p); + /* deinit special type */ + lock_rw_destroy(&p->entry.lock); + free(p); + p = np; + } +} + +void +alloc_clear_special(struct alloc_cache* alloc) +{ + if(!alloc->super) { + lock_quick_lock(&alloc->lock); + } + alloc_clear_special_list(alloc); + alloc->quar = 0; + alloc->num_quar = 0; + if(!alloc->super) { + lock_quick_unlock(&alloc->lock); + } +} + void alloc_clear(struct alloc_cache* alloc) { - alloc_special_type* p, *np; + alloc_special_type* p; struct regional* r, *nr; if(!alloc) return; @@ -147,15 +177,7 @@ alloc->super->num_quar += alloc->num_quar; lock_quick_unlock(&alloc->super->lock); } else { - /* free */ - p = alloc->quar; - while(p) { - np = alloc_special_next(p); - /* deinit special type */ - lock_rw_destroy(&p->entry.lock); - free(p); - p = np; - } + alloc_clear_special_list(alloc); } alloc->quar = 0; alloc->num_quar = 0; diff --git a/util/alloc.h b/util/alloc.h index 9839a45..ee03b07 100644 --- a/util/alloc.h +++ b/util/alloc.h @@ -114,6 +114,14 @@ * @param alloc: is almost zeroed on exit (except some stats). */ void alloc_clear(struct alloc_cache* alloc); + +/** + * Free the special alloced items. The rrset and message caches must be + * empty, there must be no more references to rrset pointers into the + * rrset cache. + * @param alloc: the special allocs are freed. + */ +void alloc_clear_special(struct alloc_cache* alloc); /** * Get a new special_type element. diff --git a/util/config_file.c b/util/config_file.c index 3bf5f63..b76ed56 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -109,6 +109,7 @@ cfg->ssl_port = UNBOUND_DNS_OVER_TLS_PORT; cfg->ssl_upstream = 0; cfg->tls_cert_bundle = NULL; + cfg->tls_win_cert = 0; cfg->use_syslog = 1; cfg->log_identity = NULL; /* changed later with argv[0] */ cfg->log_time_ascii = 0; @@ -161,7 +162,7 @@ if(!(cfg->logfile = strdup(""))) goto error_exit; if(!(cfg->pidfile = strdup(PIDFILE))) goto error_exit; if(!(cfg->target_fetch_policy = strdup("3 2 1 0 0"))) goto error_exit; - cfg->low_rtt_pct = 0; + cfg->low_rtt_permil = 0; cfg->low_rtt = 45; cfg->donotqueryaddrs = NULL; cfg->donotquery_localhost = 1; @@ -280,7 +281,7 @@ cfg->ratelimit_below_domain = NULL; cfg->ip_ratelimit_factor = 10; cfg->ratelimit_factor = 10; - cfg->qname_minimisation = 0; + cfg->qname_minimisation = 1; cfg->qname_minimisation_strict = 0; cfg->shm_enable = 0; cfg->shm_key = 11777; @@ -455,7 +456,9 @@ else S_STR("ssl-service-pem:", ssl_service_pem) else S_NUMBER_NONZERO("ssl-port:", ssl_port) else S_STR("tls-cert-bundle:", tls_cert_bundle) - else S_STRLIST("additional-tls-port:", additional_tls_port) + else S_YNO("tls-win-cert:", tls_win_cert) + else S_STRLIST("additional-tls-port:", tls_additional_ports) + else S_STRLIST("tls-additional-ports:", tls_additional_ports) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -618,7 +621,8 @@ else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor) else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor) else S_NUMBER_OR_ZERO("low-rtt:", low_rtt) - else S_NUMBER_OR_ZERO("low-rtt-pct:", low_rtt_pct) + else S_NUMBER_OR_ZERO("low-rtt-pct:", low_rtt_permil) + else S_NUMBER_OR_ZERO("low-rtt-permil:", low_rtt_permil) else S_YNO("qname-minimisation:", qname_minimisation) else S_YNO("qname-minimisation-strict:", qname_minimisation_strict) #ifdef USE_IPSECMOD @@ -874,7 +878,8 @@ else O_STR(opt, "ssl-service-pem", ssl_service_pem) else O_DEC(opt, "ssl-port", ssl_port) else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) - else O_LST(opt, "additional-tls-port", additional_tls_port) + else O_YNO(opt, "tls-win-cert", tls_win_cert) + else O_LST(opt, "tls-additional-ports", tls_additional_ports) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) @@ -1001,7 +1006,8 @@ else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor) else O_DEC(opt, "ratelimit-factor", ratelimit_factor) else O_DEC(opt, "low-rtt", low_rtt) - else O_DEC(opt, "low-rtt-pct", low_rtt_pct) + else O_DEC(opt, "low-rtt-pct", low_rtt_permil) + else O_DEC(opt, "low-rtt-permil", low_rtt_permil) else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min) else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max) else O_YNO(opt, "qname-minimisation", qname_minimisation) @@ -1297,7 +1303,7 @@ free(cfg->ssl_service_key); free(cfg->ssl_service_pem); free(cfg->tls_cert_bundle); - config_delstrlist(cfg->additional_tls_port); + config_delstrlist(cfg->tls_additional_ports); free(cfg->log_identity); config_del_strarray(cfg->ifs, cfg->num_ifs); config_del_strarray(cfg->out_ifs, cfg->num_out_ifs); diff --git a/util/config_file.h b/util/config_file.h index eba60b9..548cc33 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -102,8 +102,10 @@ int ssl_upstream; /** cert bundle for outgoing connections */ char* tls_cert_bundle; + /** should the system certificate store get added to the cert bundle */ + int tls_win_cert; /** additional tls ports */ - struct config_strlist* additional_tls_port; + struct config_strlist* tls_additional_ports; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; @@ -144,7 +146,7 @@ /** the target fetch policy for the iterator */ char* target_fetch_policy; /** percent*10, how many times in 1000 to pick low rtt destinations */ - int low_rtt_pct; + int low_rtt_permil; /** what time in msec is a low rtt destination */ int low_rtt; diff --git a/util/configlexer.c b/util/configlexer.c index 7bc1f2e..941501e 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 263 -#define YY_END_OF_BUFFER 264 +#define YY_NUM_RULES 266 +#define YY_END_OF_BUFFER 267 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,294 +372,297 @@ flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2599] = +static yyconst flex_int16_t yy_accept[2631] = { 0, - 1, 1, 245, 245, 249, 249, 253, 253, 257, 257, - 1, 1, 264, 261, 1, 243, 243, 262, 2, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 262, 245, 246, 246, 247, 262, 249, 250, 250, - 251, 262, 256, 253, 254, 254, 255, 262, 257, 258, - 258, 259, 262, 260, 244, 2, 248, 260, 262, 261, - 0, 1, 2, 2, 2, 2, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 245, - 0, 249, 0, 256, 0, 253, 257, 0, 260, 0, - 2, 2, 260, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 260, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 101, 261, 261, 261, 261, 261, 261, 261, 260, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 85, 261, 261, 261, 261, - 261, 261, 8, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 106, 261, 260, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 45, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 190, 261, 14, 15, 261, - 18, 17, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 100, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 176, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 3, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 260, 261, 261, 261, - 261, 261, 261, 261, 237, 261, 261, 236, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 252, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 48, - 261, 214, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 49, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 165, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 20, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 121, 261, 261, 252, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 219, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 140, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 120, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 83, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 28, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 29, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 46, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 99, 261, 261, 261, 261, 261, 98, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 47, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 141, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 36, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 205, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 40, 261, - 41, 261, 261, 261, 261, 86, 261, 87, 261, 261, - 261, 84, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 7, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 183, 261, 261, 261, 261, 123, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 37, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 157, 261, 156, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 16, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 50, 261, 261, 261, 261, 261, 261, 261, - 261, 164, 261, 261, 261, 261, 261, 89, 88, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 151, 261, 261, 261, 261, 261, 261, 261, - 261, 107, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 68, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 72, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 44, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 154, 155, - 261, 215, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 6, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 217, 261, 261, 261, 238, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 34, 261, 261, 261, 261, 261, 261, 261, 261, 147, - 261, 261, 261, 102, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 169, 261, 148, 261, 261, 181, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 35, 261, 261, 261, - 261, 261, 261, 104, 93, 261, 94, 261, 261, 92, - 261, 261, 261, 261, 261, 261, 261, 261, 118, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 204, 261, 261, 261, 261, 261, 261, 261, 261, 149, - 261, 261, 261, 261, 261, 152, 261, 261, 180, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 82, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 42, 261, 261, 261, 22, 261, - 261, 261, 261, 261, 19, 261, 261, 261, 23, 261, - 128, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 57, - 59, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 221, 261, 261, 261, 191, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 95, 261, 261, 261, 261, 261, 261, - 261, 261, 117, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 232, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 122, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 175, 261, 261, 261, - 261, 261, 261, 261, 261, 241, 261, 261, 261, 261, - 261, 261, 261, 261, 139, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 134, 261, 142, 261, 261, - 261, 261, 261, 110, 261, 261, 261, 261, 261, 78, - 261, 261, 261, 261, 167, 261, 261, 261, 261, 261, - 182, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 196, 261, 261, 261, 261, 261, 261, - 103, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 138, 261, 261, 261, 261, 261, 60, 61, 261, 261, - 261, 261, 261, 43, 261, 261, 261, 261, 261, 67, - 143, 261, 158, 261, 184, 153, 261, 261, 261, 53, - - 261, 145, 261, 261, 261, 261, 261, 9, 261, 261, - 261, 81, 261, 261, 261, 261, 209, 261, 261, 261, - 166, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 137, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 124, - 220, 261, 261, 261, 261, 195, 261, 261, 261, 261, - 261, 261, 261, 261, 177, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 235, 261, 144, 261, 261, 261, 52, 54, 261, 261, - 261, 261, 261, 261, 261, 80, 261, 261, 261, 261, - 207, 261, 261, 261, 216, 261, 261, 261, 261, 261, - 261, 171, 30, 24, 26, 261, 261, 261, 261, 261, - 31, 25, 27, 261, 261, 261, 261, 261, 261, 77, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 173, 170, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 51, 261, 105, 261, 261, 261, 261, 261, - - 261, 261, 261, 119, 13, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 230, 261, 233, 261, 261, 261, - 261, 261, 261, 12, 261, 261, 21, 261, 261, 261, - 213, 261, 261, 261, 218, 261, 55, 261, 179, 261, - 172, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 133, 132, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 174, 168, 261, - 261, 261, 222, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 62, 261, 261, 261, 208, - - 261, 261, 261, 261, 261, 178, 261, 261, 261, 261, - 261, 261, 261, 261, 239, 240, 130, 56, 261, 261, - 261, 90, 91, 261, 125, 261, 127, 261, 159, 261, - 261, 261, 131, 261, 261, 185, 261, 261, 261, 261, - 261, 261, 261, 112, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 192, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 160, 261, 261, 206, 261, 234, 261, 261, 261, 38, - 261, 261, 261, 261, 4, 261, 261, 111, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 188, - - 32, 33, 261, 261, 261, 261, 261, 261, 261, 223, - 261, 261, 261, 261, 261, 261, 194, 261, 261, 163, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 65, - 261, 39, 212, 261, 189, 261, 261, 11, 261, 261, - 261, 261, 261, 261, 161, 69, 261, 261, 261, 261, - 261, 136, 261, 261, 261, 261, 261, 114, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 193, 108, 261, - 96, 97, 261, 261, 261, 71, 75, 70, 261, 63, - 261, 261, 261, 10, 261, 261, 261, 210, 261, 261, - 261, 261, 135, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 76, 74, 261, 64, 231, 261, 261, 261, 150, 261, - 261, 162, 261, 261, 261, 261, 261, 261, 126, 58, - 261, 261, 261, 261, 261, 224, 261, 261, 261, 261, - 261, 261, 261, 109, 73, 115, 116, 66, 261, 211, - 129, 261, 261, 261, 261, 187, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 79, 261, 186, - 261, 203, 228, 261, 261, 261, 261, 261, 261, 261, - - 261, 261, 5, 261, 261, 261, 229, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 113, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 146, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 225, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 242, 261, 261, 199, - 261, 261, 261, 261, 261, 226, 261, 261, 261, 261, - 261, 261, 227, 261, 261, 261, 197, 261, 200, 201, - 261, 261, 261, 261, 261, 198, 202, 0 - + 1, 1, 248, 248, 252, 252, 256, 256, 260, 260, + 1, 1, 267, 264, 1, 246, 246, 265, 2, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 265, 248, 249, 249, 250, 265, 252, 253, 253, + 254, 265, 259, 256, 257, 257, 258, 265, 260, 261, + 261, 262, 265, 263, 247, 2, 251, 263, 265, 264, + 0, 1, 2, 2, 2, 2, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 248, + 0, 252, 0, 259, 0, 256, 260, 0, 263, 0, + 2, 2, 263, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 263, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 103, 264, 264, 264, 264, 264, 264, 264, 263, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 87, 264, 264, 264, 264, + 264, 264, 8, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 108, 264, 263, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 263, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 47, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 192, + 264, 14, 15, 264, 18, 17, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 102, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 178, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 3, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 263, 264, 264, 264, 264, 264, 264, 264, + 240, 264, 264, 239, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 255, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 50, 264, 216, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 51, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 167, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 20, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 123, 264, 264, 255, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 222, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 142, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 122, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 85, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 28, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 29, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 48, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 101, 264, 264, 264, 264, 264, 100, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 49, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 143, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 38, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 207, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 42, + 264, 43, 264, 264, 264, 264, 88, 264, 89, 264, + + 264, 264, 86, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 7, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 185, 264, 264, 264, 264, 125, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 39, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 159, + 264, 158, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 16, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 52, 264, 264, 264, + 264, 264, 264, 264, 264, 166, 264, 264, 264, 264, + 264, 91, 90, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 153, 264, + 264, 264, 264, 264, 264, 264, 264, 109, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 70, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 74, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 46, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 156, 157, 264, 217, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 6, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 220, + 264, 264, 264, 241, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 36, + 264, 264, 264, 264, 264, 264, 264, 264, 149, 264, + 264, 264, 104, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 171, 264, 150, 264, 264, 183, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 37, 264, 264, 264, 264, + 264, 264, 106, 95, 264, 96, 264, 264, 94, 264, + + 264, 264, 264, 264, 264, 264, 264, 120, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 206, + 264, 264, 264, 264, 264, 264, 264, 264, 151, 264, + 264, 264, 264, 264, 154, 264, 264, 264, 182, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 84, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 44, 264, 264, 264, 22, 264, + 264, 264, 264, 264, 19, 264, 264, 264, 264, 23, + 32, 264, 130, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 59, 61, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 224, 264, 264, 264, 193, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 97, 264, 264, 264, 264, + 264, 264, 264, 264, 119, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 235, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 124, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 177, + + 264, 264, 264, 264, 264, 264, 264, 264, 244, 264, + 264, 264, 264, 264, 264, 264, 264, 141, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 136, + 264, 144, 264, 264, 264, 264, 264, 112, 264, 264, + 264, 264, 264, 80, 264, 264, 264, 264, 169, 264, + 264, 264, 264, 264, 184, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 198, 264, 264, + 264, 264, 264, 264, 105, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 140, 264, 264, 264, 264, 264, + + 62, 63, 264, 264, 264, 264, 264, 45, 264, 264, + 264, 264, 264, 69, 145, 264, 160, 264, 186, 155, + 218, 264, 264, 264, 55, 264, 147, 264, 264, 264, + 264, 264, 9, 264, 264, 264, 83, 264, 264, 264, + 264, 211, 264, 264, 264, 168, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 139, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 126, 223, 264, 264, 264, + + 264, 197, 264, 264, 264, 264, 264, 264, 264, 264, + 179, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 238, 264, 146, 264, + 264, 264, 54, 56, 264, 264, 264, 264, 264, 264, + 264, 82, 264, 264, 264, 264, 209, 264, 264, 264, + 219, 264, 264, 264, 264, 264, 264, 173, 30, 24, + 26, 264, 264, 264, 264, 264, 264, 31, 25, 27, + 264, 264, 264, 264, 264, 264, 79, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 175, 172, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 53, + 264, 107, 264, 264, 264, 264, 264, 264, 264, 264, + 121, 13, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 233, 264, 236, 264, 264, 264, 264, 264, 264, + 12, 264, 264, 21, 264, 264, 264, 215, 264, 264, + 264, 221, 264, 57, 264, 181, 264, 174, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 135, 134, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 176, 170, 264, 264, 264, + + 225, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 64, 264, 264, 264, 210, 264, 264, + 264, 264, 264, 180, 264, 264, 264, 264, 264, 264, + 264, 264, 242, 243, 132, 58, 264, 264, 264, 92, + 93, 264, 264, 127, 264, 129, 264, 161, 264, 264, + 264, 133, 264, 264, 187, 264, 264, 264, 264, 264, + 264, 264, 114, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 194, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 162, + + 264, 264, 208, 264, 237, 264, 264, 264, 40, 264, + 264, 264, 264, 4, 264, 264, 113, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 190, + 33, 34, 264, 264, 264, 264, 264, 264, 264, 226, + 264, 264, 264, 264, 264, 264, 196, 264, 264, 165, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 67, + 264, 41, 214, 264, 191, 264, 264, 11, 264, 264, + 264, 264, 264, 264, 163, 71, 264, 264, 264, 264, + 264, 264, 138, 264, 264, 264, 264, 264, 116, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 195, 110, + + 264, 98, 99, 264, 264, 264, 73, 77, 72, 264, + 65, 264, 264, 264, 10, 264, 264, 264, 212, 264, + 35, 264, 264, 264, 137, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 78, 76, 264, 66, 234, 264, 264, 264, + 152, 264, 264, 164, 264, 264, 264, 264, 264, 264, + 128, 60, 264, 264, 264, 264, 264, 227, 264, 264, + 264, 264, 264, 264, 264, 111, 75, 117, 118, 68, + 264, 213, 131, 264, 264, 264, 264, 189, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 81, + 264, 188, 264, 205, 231, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 5, 264, 264, 264, 232, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 115, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 148, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 228, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 245, 264, + + 264, 201, 264, 264, 264, 264, 264, 229, 264, 264, + 264, 264, 264, 264, 230, 264, 264, 264, 199, 264, + 202, 203, 264, 264, 264, 264, 264, 200, 204, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -705,15 +708,15 @@ 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2613] = +static yyconst flex_uint16_t yy_base[2645] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 352, 307, 96, 7434, 7434, 7434, 109, 171, + 131, 137, 352, 307, 96, 7525, 7525, 7525, 109, 171, 85, 142, 215, 83, 117, 152, 207, 50, 110, 75, 167, 231, 112, 275, 121, 259, 323, 243, 291, 320, - 170, 368, 289, 7434, 7434, 7434, 104, 288, 7434, 7434, - 7434, 147, 286, 289, 7434, 7434, 7434, 305, 239, 7434, - 7434, 7434, 160, 210, 7434, 372, 7434, 177, 382, 201, + 170, 368, 289, 7525, 7525, 7525, 104, 288, 7525, 7525, + 7525, 147, 286, 289, 7525, 7525, 7525, 305, 239, 7525, + 7525, 7525, 160, 210, 7525, 372, 7525, 177, 382, 201, 386, 115, 0, 390, 0, 0, 160, 162, 199, 204, 188, 169, 303, 222, 256, 248, 377, 369, 254, 226, 313, 271, 365, 382, 296, 327, 391, 392, 384, 420, @@ -742,554 +745,560 @@ 1037, 1044, 1061, 1057, 1054, 1071, 1058, 1055, 1062, 1064, 1075, 1077, 1099, 1085, 1098, 1111, 1102, 1104, 1113, 1094, - 1125, 1124, 1122, 1132, 1126, 1151, 1130, 1135, 1148, 1155, - 7434, 1173, 1166, 1218, 1164, 1175, 1209, 1181, 1168, 1196, - 1171, 1208, 1212, 1223, 1198, 1138, 1213, 1248, 1178, 1202, - 1226, 1240, 1236, 1247, 1243, 1245, 1244, 1263, 1271, 1251, - 1253, 1279, 1287, 1261, 1275, 1278, 1283, 1293, 1296, 1309, - 1298, 1292, 1314, 1311, 1317, 1323, 1306, 1334, 1333, 1326, - 1321, 1325, 1341, 1350, 1344, 1355, 1362, 1338, 1364, 1366, - 1382, 1372, 1376, 1365, 1389, 1378, 1373, 1368, 1390, 1392, - - 1393, 1400, 1406, 1402, 1417, 7434, 1421, 1405, 1428, 1416, - 1410, 1427, 7434, 1438, 1414, 1432, 1445, 1433, 1452, 1457, - 1437, 1459, 1473, 1454, 1468, 1481, 1461, 1477, 1465, 1469, - 1476, 1486, 1478, 1501, 1494, 1492, 1538, 1495, 1497, 1507, - 1520, 1514, 1535, 1532, 1550, 1533, 1560, 1541, 1552, 1545, - 1568, 1559, 1566, 1577, 1575, 1576, 1584, 1590, 1581, 1591, - 1601, 7434, 1603, 1605, 1556, 1602, 1595, 1596, 1617, 1620, - 1622, 1634, 1630, 1644, 1637, 1161, 1625, 1636, 1629, 1639, - 1647, 1653, 1649, 1652, 1667, 1669, 1689, 1674, 1688, 1690, - 1664, 1692, 1693, 1702, 1677, 1694, 1681, 1695, 1704, 1682, - - 1709, 1714, 1711, 1719, 1706, 1730, 1717, 1716, 1734, 1726, - 1744, 1731, 1741, 1736, 1743, 1755, 1745, 1750, 1778, 1771, - 1781, 1786, 1783, 1789, 1775, 1782, 1792, 1773, 1796, 1805, - 1809, 1815, 1804, 1820, 1803, 1831, 1823, 1811, 1821, 1842, - 1838, 1845, 1841, 1846, 1864, 1836, 1847, 1861, 1850, 1848, - 1857, 1874, 1882, 1862, 1871, 1887, 1895, 1896, 1877, 1884, - 1898, 1901, 1908, 1913, 1914, 1915, 1916, 1929, 1911, 1922, - 1921, 1927, 1938, 1930, 1956, 1943, 1948, 1951, 1953, 1958, - 1955, 1978, 1964, 1965, 1970, 1982, 1972, 1983, 1973, 1997, - 1985, 2000, 2011, 2013, 2001, 2014, 2017, 2006, 2023, 2010, - - 2025, 2033, 2031, 2028, 2045, 2024, 2047, 2043, 2056, 2066, - 2065, 2059, 7434, 2052, 1998, 2053, 2072, 2070, 2060, 2089, - 2069, 2083, 2081, 2087, 2130, 7434, 2096, 7434, 7434, 2100, - 7434, 7434, 2104, 2114, 2128, 2118, 2123, 2110, 2129, 2133, - 2095, 2180, 2131, 2140, 2146, 2150, 2183, 2085, 2167, 2177, - 2170, 2188, 2163, 2190, 2191, 2201, 2194, 2205, 2218, 2207, - 2210, 2223, 2234, 2221, 2225, 2220, 2228, 2237, 2241, 2275, - 7434, 2252, 2249, 2251, 2250, 2254, 2263, 2264, 2255, 2269, - 2276, 2266, 2259, 2279, 2281, 2297, 2286, 7434, 2295, 2298, - 2306, 2300, 2291, 2312, 2314, 2310, 2318, 2315, 2321, 2320, - - 2299, 2348, 7434, 2341, 2349, 2331, 2355, 2342, 2334, 2344, - 2350, 2346, 2356, 2370, 2362, 2369, 2375, 2373, 2376, 2390, - 2392, 2394, 2386, 2389, 2400, 2383, 2403, 2410, 2413, 2408, - 2419, 2414, 2407, 2432, 2433, 2421, 2448, 2434, 2436, 2440, - 2430, 2459, 2453, 2456, 2450, 2457, 2464, 2463, 2470, 2471, - 2460, 2461, 2487, 2475, 7434, 2469, 2489, 7434, 2484, 2485, - 2531, 2516, 2514, 2495, 2498, 2522, 2512, 2519, 2521, 2560, - 2543, 2555, 2541, 2561, 2567, 2550, 2544, 2571, 2569, 2578, - 2580, 1925, 2583, 2562, 2577, 2622, 2588, 2592, 2599, 2594, - 2589, 2604, 2610, 2611, 2616, 2620, 2629, 2640, 7434, 2619, - - 2631, 2632, 2647, 2637, 2649, 2646, 2661, 2663, 2664, 2658, - 2668, 2667, 2674, 2662, 2669, 2673, 2675, 2689, 2708, 7434, - 2696, 7434, 2691, 2695, 2697, 2702, 2716, 2722, 2723, 2710, - 2725, 2713, 2718, 7434, 2720, 2738, 2755, 2748, 2743, 2740, - 2744, 2753, 2746, 2769, 2752, 2773, 2771, 2764, 2776, 2787, - 2778, 2790, 2797, 2798, 7434, 2800, 2788, 2801, 2782, 2811, - 2809, 2805, 2813, 2808, 2820, 2821, 2817, 2825, 2847, 2844, - 2846, 7434, 2836, 2860, 2856, 2850, 2840, 2861, 2868, 2857, - 2853, 2866, 2867, 2855, 2884, 2869, 2871, 2885, 2888, 1093, - 2883, 2894, 2886, 2882, 7434, 2895, 2904, 61, 2906, 2908, - - 2912, 2913, 2910, 2925, 2909, 2943, 2947, 2939, 2946, 2949, - 2941, 2945, 2952, 2938, 2942, 2951, 2962, 2964, 2960, 2976, - 2974, 2987, 2975, 3002, 7434, 2996, 3000, 2999, 2984, 3009, - 3010, 3004, 3003, 3019, 3036, 3023, 7434, 2967, 3039, 3027, - 3046, 3045, 3043, 3060, 3034, 3050, 3066, 3057, 3055, 3069, - 3065, 3072, 3077, 3070, 3078, 3080, 3092, 7434, 2969, 3089, - 3087, 3091, 3104, 3094, 3129, 3107, 3118, 3110, 3119, 3155, - 3122, 3130, 3145, 3142, 3149, 3152, 3153, 3162, 3170, 3172, - 3157, 3156, 3181, 3179, 3182, 3146, 3201, 3198, 3206, 3229, - 3213, 2127, 3196, 7434, 3208, 3202, 3197, 3223, 3221, 3204, - - 3231, 3237, 3246, 3233, 3235, 3253, 3257, 3262, 3263, 3259, - 3248, 3258, 3264, 3219, 3272, 3292, 3295, 7434, 3298, 3300, - 3284, 3302, 3286, 3307, 3304, 3291, 3294, 3308, 3296, 3321, - 3318, 7434, 3314, 3332, 3330, 3335, 3341, 3348, 3333, 3344, - 3345, 3342, 7434, 3359, 3361, 3353, 3366, 3354, 3364, 3373, - 3370, 3367, 7434, 3369, 3372, 3371, 3379, 3386, 7434, 3406, - 3388, 3385, 3391, 3390, 3407, 3419, 3401, 3399, 3409, 3418, - 3437, 3415, 3434, 7434, 3422, 3458, 3435, 3432, 3429, 3442, - 3445, 3468, 3453, 3461, 3479, 3474, 3466, 3462, 3465, 3480, - 3489, 3492, 3493, 7434, 3482, 3497, 3511, 3495, 3509, 3514, - - 3505, 3516, 3520, 3530, 3531, 3529, 3523, 3542, 3547, 3541, - 3544, 3550, 3555, 3557, 3560, 3561, 3484, 3502, 3564, 3582, - 7434, 3567, 3585, 3586, 3578, 3584, 3587, 3592, 3600, 3597, - 3607, 3613, 3606, 3611, 3636, 3637, 3619, 3616, 3622, 3629, - 3631, 3626, 3628, 3633, 3644, 3664, 3642, 3646, 3653, 3655, - 3656, 3663, 3671, 3666, 3673, 3675, 3685, 3690, 3692, 3691, - 3680, 3693, 3719, 7434, 3700, 3709, 3688, 3710, 3728, 3729, - 3735, 3737, 3739, 3722, 3712, 3727, 3749, 3745, 7434, 3732, - 7434, 3752, 3753, 3759, 3768, 7434, 3771, 7434, 3775, 3762, - 3765, 7434, 3779, 3783, 3767, 3785, 3792, 3776, 3772, 3795, - - 3787, 3799, 3798, 3807, 3812, 3809, 3820, 3805, 3819, 3831, - 3814, 3832, 7434, 3838, 3824, 3836, 3825, 3839, 3843, 3848, - 3856, 3847, 3858, 3846, 3874, 3864, 3885, 3876, 3891, 3869, - 3895, 7434, 3883, 3892, 3880, 3894, 7434, 3893, 3901, 3903, - 3909, 3907, 3918, 3910, 3914, 3920, 3919, 3945, 3940, 3938, - 3944, 3949, 3930, 3958, 3967, 3968, 3972, 3959, 3966, 3956, - 3965, 3977, 3982, 3992, 3993, 3994, 3980, 4000, 4002, 4007, - 3990, 3995, 3996, 3999, 4004, 4021, 4001, 4041, 4017, 4026, - 4024, 4028, 7434, 4047, 4030, 4051, 4053, 4043, 4045, 4039, - 4034, 4060, 4067, 4064, 4080, 4068, 7434, 4073, 7434, 4072, - - 4075, 4101, 4100, 4104, 4086, 4107, 4090, 4099, 4091, 4113, - 4114, 4119, 4121, 4109, 4130, 4120, 4128, 4135, 4132, 7434, - 4133, 4127, 4152, 4147, 4155, 4156, 4166, 4175, 4150, 4165, - 4171, 4201, 7434, 4183, 4178, 4182, 4176, 4180, 4194, 4209, - 4206, 7434, 4195, 4203, 4211, 4205, 4216, 7434, 7434, 4204, - 4210, 4226, 4222, 4227, 4245, 4238, 4230, 4228, 4246, 4263, - 4244, 4249, 7434, 4264, 4250, 4262, 4274, 4275, 4276, 4273, - 4261, 7434, 4268, 4269, 4285, 4286, 4295, 4292, 4291, 4308, - 4309, 4311, 4297, 4300, 4290, 4317, 4310, 4324, 4299, 4331, - 4333, 7434, 4335, 4336, 4339, 4337, 4344, 4350, 4332, 4343, - - 4351, 4356, 4363, 4366, 4370, 4371, 4376, 4378, 4364, 4379, - 4385, 4393, 4383, 4380, 4395, 4414, 4417, 4419, 4423, 4405, - 4424, 4407, 4408, 4430, 4432, 4422, 4434, 7434, 4438, 4421, - 4443, 4433, 4444, 4440, 4452, 4459, 4463, 4442, 4461, 4473, - 4464, 7434, 4478, 4469, 4470, 4487, 4479, 4492, 4486, 4496, - 4480, 4493, 4491, 4511, 4504, 4505, 4514, 4526, 7434, 7434, - 4520, 7434, 4509, 4533, 4519, 4528, 4531, 4522, 4536, 4539, - 4543, 7434, 4545, 4557, 4549, 4561, 4576, 4578, 4574, 4575, - 4570, 4562, 4564, 4573, 4584, 4563, 4567, 4597, 4604, 4595, - 4601, 4609, 7434, 4599, 4608, 4603, 7434, 4614, 4617, 4626, - - 4625, 4623, 4635, 4647, 4637, 4628, 4624, 4648, 4650, 4652, - 4657, 4665, 4656, 4671, 4678, 4685, 4686, 4661, 4677, 4691, - 7434, 4681, 4696, 4690, 4676, 4711, 4688, 4712, 4697, 7434, - 4707, 4703, 4716, 7434, 4723, 4724, 4731, 4732, 4713, 4740, - 4735, 4737, 4738, 4736, 7434, 4749, 7434, 4752, 4758, 7434, - 4761, 4762, 4751, 4757, 4766, 4772, 4781, 4780, 4767, 4782, - 4778, 4771, 4788, 4798, 4800, 4797, 7434, 4809, 4802, 4807, - 4813, 4814, 4815, 7434, 7434, 4806, 7434, 4819, 4823, 7434, - 4817, 4831, 4836, 4834, 4853, 4850, 4856, 4849, 7434, 4858, - 4840, 4863, 4859, 4848, 4861, 4862, 4870, 4867, 4883, 4896, - - 7434, 4879, 4891, 4904, 4887, 4892, 4908, 4916, 4897, 7434, - 4922, 4926, 4889, 4931, 4906, 7434, 4932, 4935, 7434, 4933, - 4945, 4924, 4951, 4944, 4952, 4960, 4943, 4949, 4971, 4962, - 4968, 4972, 7434, 4963, 4977, 4975, 4984, 4978, 4983, 5002, - 4995, 4999, 4998, 4986, 5004, 5018, 5020, 5008, 5025, 5013, - 5011, 5023, 5027, 5012, 7434, 5041, 5044, 5050, 7434, 5043, - 5038, 5039, 5042, 5046, 7434, 5063, 5067, 5069, 7434, 5073, - 7434, 5080, 5068, 5066, 5078, 5088, 5098, 5095, 5109, 5093, - 5106, 5111, 5101, 5126, 5122, 5128, 5124, 5121, 5115, 7434, - 7434, 5132, 5143, 5125, 5140, 5145, 5138, 5139, 5152, 5155, - - 5163, 5159, 5173, 7434, 5170, 5156, 5171, 7434, 5153, 5183, - 5166, 5177, 5190, 5181, 5191, 5194, 5202, 5196, 5204, 5186, - 5201, 5219, 5214, 7434, 5208, 5213, 5221, 5218, 5230, 5216, - 5238, 5231, 7434, 5240, 5253, 5257, 5243, 5247, 5259, 5262, - 5266, 5268, 5258, 5265, 5274, 5282, 5281, 5292, 7434, 5293, - 5276, 5284, 5295, 5306, 5310, 5308, 5312, 5299, 5313, 5314, - 5301, 5311, 7434, 5324, 5316, 5326, 5332, 5328, 5341, 5333, - 5348, 5350, 5339, 5352, 5342, 5362, 7434, 5351, 5357, 5355, - 5377, 5365, 5368, 5375, 5378, 7434, 5383, 5376, 5379, 5385, - 5374, 5408, 5402, 5413, 7434, 5404, 5414, 5417, 5403, 5405, - - 5412, 5420, 5429, 5432, 5435, 5443, 5426, 5441, 5449, 5456, - 5457, 5460, 5453, 5235, 5459, 7434, 5452, 7434, 5462, 5473, - 5478, 5494, 5482, 7434, 5481, 5490, 5488, 5492, 5501, 7434, - 5499, 5496, 5498, 5508, 7434, 5515, 5509, 5523, 5532, 5527, - 7434, 5546, 5545, 5547, 5537, 5554, 5551, 5539, 5555, 5549, - 5563, 5538, 5559, 7434, 5558, 5564, 5568, 5587, 5573, 5594, - 7434, 5576, 5579, 5583, 5601, 5582, 5603, 5574, 5606, 5589, - 7434, 5595, 5610, 5618, 5609, 5625, 7434, 7434, 5626, 5630, - 5638, 5620, 5642, 7434, 5644, 5623, 5637, 5651, 5647, 7434, - 7434, 5655, 7434, 5645, 7434, 7434, 5654, 5657, 5660, 7434, - - 5661, 7434, 5671, 5676, 5664, 5670, 5674, 7434, 5666, 5682, - 5695, 7434, 5687, 5704, 5684, 5690, 7434, 5700, 5689, 5697, - 7434, 5709, 5713, 5720, 5721, 5716, 5714, 5719, 5729, 5730, - 5738, 5739, 5744, 5737, 5732, 5753, 5757, 5751, 5762, 5767, - 5768, 5760, 5766, 5770, 5759, 5764, 5778, 5774, 5783, 5776, - 5784, 5794, 5788, 5799, 5815, 5805, 5793, 5803, 7434, 5806, - 5795, 5800, 5825, 5822, 5832, 5833, 5846, 5847, 5852, 7434, - 7434, 5855, 5830, 5843, 5839, 7434, 5841, 5844, 5845, 5849, - 5868, 5864, 5860, 5885, 7434, 5890, 5883, 5893, 5879, 5880, - 5894, 5887, 5881, 5882, 5906, 5896, 5903, 5916, 5756, 5913, - - 5917, 5918, 5929, 5919, 5921, 5930, 5936, 5947, 5948, 5951, - 7434, 5933, 7434, 5944, 5949, 5954, 7434, 7434, 5962, 5964, - 5970, 5957, 5965, 5985, 5984, 7434, 5971, 5989, 5987, 5977, - 7434, 5975, 5981, 6003, 7434, 5994, 6005, 5999, 6007, 6014, - 6023, 7434, 7434, 7434, 7434, 6024, 6009, 6016, 6022, 6028, - 7434, 7434, 7434, 6033, 6013, 6034, 6036, 6040, 6045, 7434, - 6042, 6043, 6063, 6058, 6047, 6076, 6070, 6074, 6060, 6064, - 6086, 6083, 6091, 6081, 6084, 6093, 6094, 7434, 7434, 6085, - 6099, 6122, 6109, 6119, 6104, 6103, 6123, 6118, 6117, 6125, - 6130, 6126, 7434, 6134, 7434, 6142, 6143, 6140, 6150, 6157, - - 6159, 6155, 6162, 7434, 7434, 6153, 6161, 6160, 6173, 6175, - 6169, 6176, 6192, 6182, 7434, 6189, 7434, 6187, 6193, 6215, - 6211, 6205, 6212, 7434, 6214, 6209, 7434, 6221, 6216, 6218, - 7434, 6226, 6229, 6235, 7434, 6237, 7434, 6246, 7434, 6231, - 7434, 6239, 6254, 6247, 6261, 6260, 6265, 6266, 6268, 6256, - 6269, 6252, 6258, 6280, 6276, 6273, 7434, 7434, 6289, 6278, - 6282, 6286, 6285, 6313, 6290, 6307, 6310, 7434, 7434, 6309, - 6312, 6316, 7434, 6296, 6322, 6327, 6326, 6332, 6335, 6337, - 6330, 6341, 6348, 6342, 6362, 6364, 6366, 6369, 6357, 6371, - 6354, 6353, 6377, 6375, 6385, 7434, 6399, 6404, 6390, 7434, - - 6409, 6403, 6411, 6413, 6406, 7434, 6396, 6416, 6417, 6419, - 6412, 6424, 6434, 6440, 7434, 7434, 7434, 7434, 6425, 6441, - 6444, 7434, 7434, 6432, 7434, 6446, 7434, 6439, 7434, 6448, - 6461, 6454, 7434, 6459, 6468, 7434, 6465, 6470, 6478, 6473, - 6474, 6479, 6488, 7434, 6484, 6497, 6499, 6503, 6489, 6487, - 6505, 6495, 6517, 6511, 6518, 7434, 6500, 6524, 6523, 6515, - 6520, 6537, 6534, 6532, 6530, 6544, 6551, 6527, 6558, 6546, - 7434, 6562, 6567, 7434, 6560, 7434, 6569, 6561, 6579, 7434, - 6572, 6566, 6568, 6555, 7434, 6589, 6583, 7434, 6576, 6600, - 6602, 6596, 6587, 6593, 6603, 6599, 6609, 6618, 6627, 7434, - - 7434, 7434, 6610, 6611, 6638, 6635, 6637, 6646, 6625, 7434, - 6639, 6642, 6632, 6655, 6658, 6653, 7434, 6656, 6641, 7434, - 6657, 6661, 6667, 6663, 6674, 6681, 6686, 6689, 6687, 7434, - 6691, 7434, 7434, 6678, 7434, 6671, 6694, 7434, 6696, 6698, - 6680, 6701, 6709, 6706, 7434, 7434, 6703, 6720, 6718, 6729, - 6727, 7434, 6714, 6715, 6738, 6719, 6742, 7434, 6741, 6733, - 6730, 6744, 6745, 6724, 6756, 6757, 6761, 7434, 7434, 6760, - 7434, 7434, 6755, 6781, 6782, 7434, 7434, 7434, 6785, 7434, - 6789, 2173, 6788, 7434, 6794, 6777, 6783, 7434, 6796, 6791, - 6799, 6787, 7434, 6793, 6808, 6805, 6827, 6828, 6816, 6829, - - 6830, 6841, 6845, 6821, 6822, 6826, 6854, 6855, 6843, 6850, - 7434, 7434, 6851, 7434, 7434, 6852, 6863, 6865, 7434, 6858, - 6871, 7434, 6875, 6861, 6868, 6882, 6869, 6891, 7434, 7434, - 6879, 6890, 6873, 6900, 6886, 7434, 6902, 6913, 6898, 6909, - 6896, 6903, 6906, 7434, 7434, 7434, 7434, 7434, 6916, 7434, - 7434, 6911, 6931, 6917, 6933, 7434, 6927, 6940, 6948, 6943, - 6941, 6954, 6939, 6938, 6958, 6970, 6944, 6972, 6968, 6975, - 6963, 6964, 6992, 6993, 6998, 7001, 6985, 6990, 7002, 7003, - 7006, 6982, 7009, 7023, 7012, 7022, 7021, 7434, 7027, 7434, - 7025, 7434, 7434, 7041, 7044, 7038, 7028, 7032, 7049, 7048, - - 7050, 7037, 7434, 7058, 7052, 7053, 7434, 7061, 7055, 7067, - 7079, 7082, 7072, 7093, 7096, 7084, 7085, 7097, 7105, 7108, - 7099, 7109, 7111, 7112, 7088, 7126, 7125, 7133, 7434, 7136, - 7123, 7138, 7127, 7128, 7153, 7132, 7143, 7148, 7434, 7158, - 7152, 7157, 7163, 7167, 7168, 7165, 7172, 7174, 7434, 7170, - 7197, 7183, 7199, 7204, 7201, 7208, 7184, 7207, 7211, 7210, - 7217, 7213, 7214, 7226, 7231, 7227, 7434, 7222, 7232, 7434, - 7247, 7250, 7237, 7238, 7259, 7434, 7261, 7243, 7248, 7265, - 7268, 7264, 7434, 7269, 7276, 7273, 7434, 7285, 7434, 7434, - 7292, 7282, 7283, 7281, 7299, 7434, 7434, 7434, 7342, 7349, - - 7356, 7363, 7370, 83, 7377, 7384, 7391, 7398, 7405, 7412, - 7419, 7426 + 1125, 1124, 1122, 1132, 1126, 1174, 1134, 1135, 1142, 1151, + 7525, 1169, 1153, 1223, 1143, 1173, 1191, 1181, 1184, 1194, + 1192, 1218, 1209, 1203, 1097, 1196, 1162, 1252, 1183, 1221, + 1224, 1231, 1254, 1234, 1236, 1240, 1245, 1261, 1279, 1253, + 1266, 1265, 1291, 1274, 1269, 1283, 1281, 1296, 1273, 1309, + 1302, 1292, 1300, 1293, 1310, 1322, 1305, 1330, 1329, 1336, + 1320, 1325, 1347, 1350, 1334, 1348, 1358, 1351, 1360, 1357, + 1366, 1355, 1372, 1362, 1374, 1381, 1384, 1378, 1382, 1392, + + 1403, 1387, 1397, 1391, 1415, 7525, 1419, 1401, 1405, 1417, + 1418, 1409, 7525, 1432, 1431, 1427, 1440, 1428, 1461, 1455, + 1443, 1458, 1467, 1453, 1468, 1479, 1449, 1476, 1464, 1462, + 1488, 1494, 1487, 1496, 1489, 1485, 1532, 1498, 1490, 1514, + 1516, 1517, 1512, 1529, 1519, 1528, 1568, 1526, 1547, 1556, + 1565, 1545, 1579, 1567, 1559, 1569, 1562, 1577, 1583, 1578, + 1593, 1575, 1595, 7525, 1604, 1614, 1480, 1607, 1606, 1597, + 1609, 1610, 1611, 1626, 1622, 1640, 1624, 1627, 1649, 1643, + 1652, 1646, 1657, 1648, 1656, 1662, 1675, 1650, 1686, 1682, + 1671, 1672, 1669, 1674, 1678, 1673, 1676, 1699, 1687, 1700, + + 1707, 1688, 1693, 1713, 1721, 1715, 1705, 1720, 1709, 1733, + 1736, 1716, 1746, 1735, 1744, 1737, 1756, 1760, 1752, 1759, + 1764, 1742, 1767, 1773, 1779, 1785, 1780, 1762, 1793, 1783, + 1680, 1786, 1789, 1797, 1813, 1808, 1812, 1816, 1822, 1810, + 1804, 1826, 1824, 1838, 1831, 1839, 1852, 1835, 1837, 1840, + 1843, 1849, 1854, 1864, 1870, 1862, 1866, 1867, 1885, 1881, + 1876, 1890, 1879, 1900, 1886, 1889, 1893, 1891, 1894, 1918, + 1915, 1908, 1912, 1913, 1921, 1928, 1931, 1917, 1927, 1948, + 1929, 1935, 1949, 1942, 1950, 1965, 1968, 1959, 1960, 1976, + 1969, 1963, 1970, 1977, 1995, 1994, 1997, 2008, 1988, 2007, + + 1980, 2003, 2009, 2011, 2015, 2016, 2021, 2012, 2022, 2036, + 2040, 2034, 2032, 2056, 2037, 2053, 7525, 2041, 2061, 2046, + 2067, 2058, 2059, 2074, 2064, 2078, 2075, 2083, 2126, 7525, + 2080, 7525, 7525, 2089, 7525, 7525, 2081, 2107, 2105, 2114, + 2119, 2101, 2110, 2123, 2084, 2175, 2139, 2133, 2141, 2136, + 2122, 2129, 2157, 2168, 2158, 2188, 2178, 2171, 2185, 2195, + 2180, 2199, 2204, 2203, 2206, 2205, 2210, 2212, 2214, 2216, + 2217, 2231, 2242, 2251, 7525, 2243, 2172, 2252, 2246, 2247, + 2254, 2256, 2239, 2255, 2258, 2240, 2268, 2263, 2269, 2276, + 2274, 7525, 2279, 2285, 2292, 2289, 2299, 2295, 2291, 2282, + + 2309, 2296, 2312, 2308, 2306, 2337, 7525, 2326, 2314, 2322, + 2341, 2324, 2327, 2332, 2334, 2342, 2351, 2359, 2353, 2357, + 2368, 2354, 2369, 2378, 2379, 2382, 2374, 2390, 2380, 2391, + 2375, 2393, 2396, 2402, 2415, 2405, 2419, 2404, 2403, 2421, + 2423, 2418, 2435, 2442, 2431, 2426, 2438, 2452, 2437, 2454, + 2449, 2465, 2456, 2458, 2455, 2471, 2453, 2468, 2469, 2484, + 7525, 2463, 2477, 7525, 2485, 2486, 2532, 2492, 2502, 2494, + 2497, 2513, 2512, 2518, 2511, 2531, 2528, 2547, 2545, 2552, + 2556, 2549, 2544, 2559, 2483, 2571, 2577, 1152, 2586, 2566, + 2564, 2613, 2583, 2584, 2588, 2591, 2596, 2615, 2599, 2611, + + 2608, 2609, 2617, 2641, 7525, 2604, 2634, 2624, 2636, 2655, + 2648, 2638, 2647, 2658, 2646, 2663, 2660, 2652, 2672, 2661, + 2664, 2666, 2683, 2688, 2700, 7525, 2685, 7525, 2689, 2687, + 2684, 2694, 2712, 2713, 2715, 2698, 2721, 2705, 2710, 7525, + 2719, 2731, 2737, 2740, 2739, 2732, 2733, 2742, 2746, 2759, + 2736, 2762, 2768, 2754, 2767, 2769, 2760, 2779, 2780, 2765, + 7525, 2787, 2781, 2794, 2795, 2791, 2796, 2792, 2806, 2798, + 2807, 2808, 2802, 2818, 2822, 2825, 2833, 7525, 2813, 2819, + 2846, 2844, 2841, 2829, 2845, 2851, 2852, 2843, 2855, 2856, + 2864, 2865, 2857, 2869, 2866, 2872, 2875, 1093, 2877, 2888, + + 2879, 2876, 7525, 2881, 2905, 61, 2896, 2894, 2899, 2912, + 2907, 2918, 2913, 2924, 2925, 2926, 2927, 2930, 2928, 2932, + 2936, 2934, 2945, 2940, 2950, 2951, 2948, 2952, 2953, 2975, + 2962, 2980, 7525, 2983, 2990, 2979, 2973, 2998, 2997, 3007, + 3000, 3010, 3013, 3011, 7525, 3004, 3014, 3024, 3028, 3031, + 3027, 3032, 3034, 3037, 3050, 3041, 3040, 3051, 3045, 3055, + 3063, 3068, 3061, 3064, 3076, 7525, 2993, 3072, 3079, 3074, + 3093, 3077, 3107, 3090, 3091, 3102, 3118, 3142, 3113, 3121, + 3127, 3132, 3136, 3122, 3139, 3157, 3163, 3167, 3153, 3166, + 3171, 3169, 3168, 3129, 3140, 3174, 3177, 3205, 3184, 1434, + + 3204, 7525, 3203, 3201, 3191, 3208, 3227, 3202, 3228, 3212, + 3211, 3218, 3230, 3232, 3242, 3253, 3247, 3254, 3244, 3241, + 3260, 3270, 3257, 3273, 3275, 7525, 3276, 3281, 3282, 3278, + 3271, 3294, 3290, 3289, 3293, 3296, 3292, 3302, 3306, 3309, + 7525, 3321, 3320, 3322, 3318, 3330, 3338, 3331, 3328, 3334, + 3337, 3347, 7525, 3336, 3355, 3351, 3371, 3359, 3350, 3361, + 3375, 3364, 7525, 3365, 3353, 3386, 3394, 3373, 7525, 3395, + 3387, 3377, 3381, 3391, 3392, 3408, 3396, 3390, 3411, 3420, + 3426, 3404, 3428, 7525, 3421, 3444, 3432, 3422, 3431, 3435, + 3446, 3458, 3449, 3455, 3470, 3471, 3468, 3462, 3457, 3474, + + 3482, 3476, 3480, 7525, 3472, 3493, 3503, 3501, 3497, 3498, + 3506, 3507, 3502, 3508, 3521, 3520, 3532, 3533, 3541, 3531, + 3542, 3553, 3547, 3550, 3534, 3552, 3485, 3570, 3571, 3574, + 7525, 3585, 3582, 3578, 3573, 3576, 3577, 3581, 3593, 3596, + 3598, 3602, 3597, 3603, 3631, 3632, 3608, 3617, 3618, 3620, + 3621, 3624, 3645, 3626, 3627, 3644, 3661, 3638, 3643, 3648, + 3655, 3664, 3659, 3666, 3675, 3682, 3671, 3660, 3687, 3686, + 3684, 3691, 3693, 3719, 7525, 3699, 3701, 3695, 3707, 3729, + 3727, 3730, 3733, 3736, 3724, 3731, 3741, 3746, 3739, 7525, + 3751, 7525, 3726, 3750, 3771, 3775, 7525, 3779, 7525, 3780, + + 3765, 3767, 7525, 3782, 3786, 3774, 3763, 3788, 3790, 3777, + 3804, 3778, 3796, 3807, 3820, 3811, 3800, 3824, 3809, 3831, + 3813, 3822, 3837, 3823, 3834, 7525, 3843, 3827, 3830, 3854, + 3849, 3840, 3876, 3870, 3858, 3859, 3871, 3882, 3864, 3881, + 3888, 3894, 3892, 3899, 7525, 3902, 3895, 3898, 3907, 7525, + 3872, 3923, 3926, 3904, 3910, 3915, 3929, 3934, 3921, 3938, + 3946, 3941, 3942, 3954, 3961, 3945, 3968, 3951, 3974, 3976, + 3962, 3969, 3965, 3980, 3985, 3989, 3991, 3995, 3992, 3988, + 4001, 4008, 4009, 4002, 3997, 4003, 4007, 4025, 4019, 4024, + 4018, 4022, 4033, 4029, 4034, 7525, 4040, 4045, 4049, 4056, + + 4044, 4048, 4050, 4060, 4064, 4070, 4061, 4081, 4080, 7525, + 4079, 7525, 4077, 4098, 4103, 4106, 4110, 4100, 4092, 4117, + 4108, 4105, 4112, 4133, 4107, 4120, 4128, 4126, 4135, 4132, + 4138, 4140, 4149, 7525, 4139, 4136, 4167, 4155, 4165, 4173, + 4169, 4177, 4172, 4166, 4185, 4207, 7525, 4192, 4213, 4191, + 4210, 4220, 4216, 4225, 4217, 7525, 4202, 4212, 4229, 4214, + 4242, 7525, 7525, 4219, 4236, 4249, 4246, 4244, 4247, 4233, + 4253, 4215, 4250, 4248, 4270, 4237, 4263, 4269, 7525, 4281, + 4271, 4285, 4294, 4295, 4296, 4293, 4280, 7525, 4277, 4305, + 4290, 4312, 4306, 4311, 4317, 4308, 4322, 4328, 4318, 4321, + + 4348, 4335, 4332, 4351, 4346, 4353, 4354, 7525, 4355, 4361, + 4363, 4359, 4364, 4362, 4349, 4372, 4377, 4382, 4374, 4376, + 4390, 4392, 4403, 4396, 4393, 4399, 4410, 4416, 4404, 4409, + 4419, 4422, 4432, 4415, 4438, 4427, 4444, 4429, 4436, 4448, + 4449, 4463, 4458, 7525, 4467, 4446, 4472, 4443, 4466, 4478, + 4480, 4477, 4497, 4459, 4492, 4487, 4493, 7525, 4502, 4501, + 4496, 4506, 4503, 4494, 4522, 4507, 4505, 4535, 4520, 4540, + 4528, 4529, 4549, 4552, 7525, 7525, 4554, 7525, 4555, 4538, + 4557, 4545, 4562, 4561, 4566, 4573, 4568, 4582, 7525, 4575, + 4576, 4579, 4578, 4588, 4609, 4608, 4605, 4602, 4593, 4595, + + 4604, 4615, 4606, 4601, 4622, 4635, 4619, 4629, 4643, 7525, + 4628, 4633, 4638, 7525, 4640, 4630, 4658, 4660, 4668, 4672, + 4662, 4677, 4661, 4667, 4686, 4687, 4688, 4684, 4691, 4689, + 4701, 4697, 4698, 4726, 4715, 4727, 4703, 4711, 4732, 7525, + 4719, 4733, 4724, 4716, 4740, 4725, 4745, 4743, 7525, 4749, + 4738, 4764, 7525, 4759, 4765, 4748, 4771, 4753, 4750, 4772, + 4774, 4775, 4776, 7525, 4782, 7525, 4780, 4792, 7525, 4799, + 4801, 4789, 4790, 4788, 4815, 4817, 4818, 4803, 4816, 4809, + 4810, 4828, 4830, 4838, 4834, 7525, 4852, 4833, 4849, 4854, + 4855, 4856, 7525, 7525, 4839, 7525, 4857, 4861, 7525, 4859, + + 4875, 4876, 4870, 4871, 4866, 4892, 4897, 7525, 4899, 4888, + 4909, 4898, 4890, 4900, 4901, 4917, 4894, 4903, 4935, 7525, + 4922, 4919, 4923, 4925, 4928, 4950, 4946, 4937, 7525, 4955, + 4959, 4945, 4962, 4958, 7525, 4970, 4964, 4969, 7525, 4981, + 4966, 4973, 4978, 5000, 4996, 5004, 4989, 4991, 5017, 5008, + 5006, 5012, 7525, 5005, 5016, 5014, 5036, 5027, 5025, 5022, + 5043, 5051, 5050, 5055, 5044, 5059, 5061, 5064, 5067, 5063, + 5047, 5081, 5075, 5085, 7525, 5086, 5091, 5094, 7525, 5088, + 5087, 5092, 5102, 5089, 7525, 5115, 5118, 5104, 5112, 7525, + 7525, 5116, 7525, 5132, 5123, 5125, 5126, 5139, 5133, 5147, + + 5141, 5136, 5154, 5159, 5157, 5176, 5166, 5174, 5169, 5171, + 5160, 7525, 7525, 5177, 5187, 5181, 5189, 5191, 5182, 5193, + 5200, 5205, 5212, 5217, 5228, 7525, 5220, 5206, 5221, 7525, + 5209, 5230, 5218, 5216, 5237, 5232, 5238, 5246, 5252, 5245, + 5258, 5240, 5251, 5269, 5271, 7525, 5257, 5261, 5259, 5265, + 5272, 5273, 5283, 5281, 7525, 5290, 5304, 5303, 5298, 5299, + 5301, 5318, 5312, 5315, 5308, 5307, 5326, 5339, 5336, 5332, + 7525, 5338, 5329, 5335, 5340, 5344, 5357, 5341, 5358, 5354, + 5361, 5369, 5373, 5363, 5364, 7525, 5375, 5374, 5367, 5389, + 5379, 5387, 5392, 5402, 5398, 5390, 5396, 5407, 5405, 7525, + + 5388, 5404, 5406, 5424, 5412, 5422, 5425, 5429, 7525, 5437, + 5423, 5435, 5432, 5431, 5459, 5438, 5461, 7525, 5454, 5467, + 5470, 5451, 5464, 5458, 5478, 5484, 5487, 5480, 5485, 5491, + 5473, 5488, 5499, 5500, 5504, 5511, 5503, 5526, 5525, 7525, + 5512, 7525, 5515, 5533, 5538, 5536, 5521, 7525, 5530, 5539, + 5549, 5535, 5558, 7525, 5542, 5559, 5556, 5562, 7525, 5576, + 5573, 5560, 5572, 5588, 7525, 5590, 5589, 5586, 5598, 5600, + 5596, 5583, 5603, 5602, 5594, 5593, 5621, 7525, 5605, 5623, + 5628, 5629, 5613, 5638, 7525, 5617, 5625, 5632, 5639, 5627, + 5652, 5656, 5661, 5644, 7525, 5659, 5653, 5668, 5669, 5674, + + 7525, 7525, 5664, 5680, 5679, 5666, 5686, 7525, 5693, 5673, + 5698, 5690, 5702, 7525, 7525, 5699, 7525, 5694, 7525, 7525, + 7525, 5713, 5717, 5715, 7525, 5716, 7525, 5703, 5726, 5707, + 5706, 5730, 7525, 5729, 5719, 5732, 7525, 5738, 5741, 5733, + 5737, 7525, 5761, 5744, 5749, 7525, 5765, 5769, 5768, 5772, + 5778, 5756, 5771, 5776, 5782, 5784, 5786, 5787, 5779, 5783, + 5788, 5816, 5807, 5804, 5802, 5821, 5822, 5811, 5818, 5812, + 5806, 5827, 5810, 5835, 5831, 5815, 5836, 5842, 5837, 5846, + 5864, 5857, 5859, 5862, 7525, 5852, 5849, 5858, 5869, 5876, + 5873, 5875, 5894, 5895, 5905, 7525, 7525, 5908, 5892, 5900, + + 5893, 7525, 5896, 5897, 5891, 5914, 5917, 5925, 5928, 5929, + 7525, 5931, 5938, 5948, 5932, 5933, 5942, 5939, 5944, 5952, + 5964, 5963, 5967, 5968, 5969, 5965, 5971, 5966, 5979, 5981, + 5994, 5995, 5997, 5988, 6002, 6003, 7525, 5998, 7525, 5996, + 6013, 6015, 7525, 7525, 6016, 6032, 6018, 6022, 6020, 6019, + 6044, 7525, 6024, 6046, 6052, 6040, 7525, 6049, 6054, 6055, + 7525, 6045, 6056, 6051, 6058, 6063, 6086, 7525, 7525, 7525, + 7525, 6087, 6067, 6078, 6079, 6084, 6083, 7525, 7525, 7525, + 6094, 6090, 6095, 6101, 6105, 6115, 7525, 6114, 6103, 6107, + 6118, 6137, 6138, 6136, 6135, 6126, 6128, 6152, 6149, 6147, + + 6142, 6153, 6159, 6161, 7525, 7525, 6155, 6163, 6177, 6173, + 6182, 6188, 6185, 6186, 6183, 6179, 6190, 6196, 6195, 7525, + 6199, 7525, 6203, 6206, 6209, 6218, 6215, 6223, 6219, 6228, + 7525, 7525, 6221, 6229, 6225, 6239, 6234, 6248, 6245, 6241, + 6243, 7525, 6250, 7525, 6254, 6259, 6278, 6269, 6271, 6277, + 7525, 6276, 6270, 7525, 6284, 6280, 6287, 7525, 6290, 6293, + 6295, 7525, 6299, 7525, 6300, 7525, 6296, 7525, 6304, 6307, + 6313, 6319, 6322, 6310, 6330, 6331, 6333, 6321, 6338, 6323, + 6339, 6344, 6342, 6343, 7525, 7525, 6361, 6349, 6355, 6357, + 6356, 6359, 6354, 6360, 6367, 7525, 7525, 6368, 6370, 6382, + + 7525, 6365, 6393, 6397, 6398, 6383, 6391, 6394, 6407, 6400, + 6405, 6410, 6421, 6425, 6430, 6432, 6420, 6434, 6423, 6418, + 6442, 6435, 6445, 7525, 6454, 6461, 6449, 7525, 6468, 6466, + 6474, 6470, 6471, 7525, 6459, 6479, 6481, 6478, 6469, 6515, + 6476, 6490, 7525, 7525, 7525, 7525, 6509, 6504, 6506, 7525, + 7525, 6494, 6500, 7525, 6510, 7525, 6502, 7525, 6525, 6527, + 6526, 7525, 6529, 6537, 7525, 6524, 6532, 6539, 6549, 6540, + 6544, 6543, 7525, 6574, 6567, 6568, 6577, 6561, 6557, 6575, + 6564, 6586, 6571, 6583, 7525, 6570, 6588, 6592, 6595, 6598, + 6610, 6609, 6601, 6593, 6613, 6619, 6600, 6629, 6615, 7525, + + 6631, 6632, 7525, 6622, 7525, 6633, 6636, 6642, 7525, 6650, + 6635, 6641, 6638, 7525, 6653, 6658, 7525, 6644, 6667, 6673, + 6656, 6669, 6668, 6670, 6674, 6683, 6687, 6695, 6691, 7525, + 7525, 7525, 6694, 6684, 6681, 6690, 6709, 6714, 6702, 7525, + 6718, 6719, 6707, 6732, 6725, 6728, 7525, 6735, 6721, 7525, + 6737, 6738, 6739, 6746, 6749, 6756, 6757, 6758, 6763, 7525, + 6761, 7525, 7525, 6753, 7525, 6752, 6776, 7525, 6775, 6764, + 6762, 6783, 6786, 6788, 7525, 7525, 6794, 6784, 6801, 6789, + 6800, 6802, 7525, 6803, 6806, 6809, 6805, 6812, 7525, 6827, + 6819, 6820, 6822, 6825, 6821, 6839, 6834, 6846, 7525, 7525, + + 6848, 7525, 7525, 6831, 6859, 6867, 7525, 7525, 7525, 6860, + 7525, 6863, 6878, 6870, 7525, 6872, 6861, 6866, 7525, 6881, + 7525, 6882, 6887, 6877, 7525, 6884, 6876, 6895, 6900, 6910, + 6898, 6912, 6919, 6920, 6926, 6899, 6915, 6911, 6929, 6936, + 6916, 6933, 7525, 7525, 6945, 7525, 7525, 6948, 6949, 6950, + 7525, 6943, 6954, 7525, 6964, 6951, 6953, 6968, 6956, 6967, + 7525, 7525, 6955, 6981, 6959, 6986, 6970, 7525, 6996, 6979, + 6975, 6998, 6982, 6992, 6991, 7525, 7525, 7525, 7525, 7525, + 7002, 7525, 7525, 6994, 7000, 7013, 7008, 7525, 6997, 7025, + 7034, 7040, 7023, 7044, 7028, 7024, 7030, 7037, 7029, 7031, + + 7056, 7060, 7059, 7068, 7062, 7078, 7082, 7084, 7066, 7070, + 7088, 7087, 7089, 7071, 7093, 7083, 7086, 7099, 7103, 7525, + 7109, 7525, 7107, 7525, 7525, 7102, 7127, 7123, 7113, 7112, + 7138, 7129, 7133, 7118, 7525, 7121, 7130, 7149, 7525, 7142, + 7156, 7147, 7150, 7154, 7159, 7170, 7174, 7164, 7165, 7172, + 7180, 7192, 7194, 7191, 7193, 7199, 7181, 7208, 7205, 7213, + 7525, 7211, 7197, 7207, 7209, 7220, 7222, 7225, 7232, 7229, + 7525, 7233, 7241, 7243, 7227, 7242, 7238, 7257, 7259, 7249, + 7525, 7255, 7266, 7260, 7273, 7282, 7285, 7288, 7277, 7292, + 7293, 7297, 7302, 7300, 7304, 7286, 7309, 7316, 7525, 7303, + + 7318, 7525, 7323, 7334, 7321, 7325, 7332, 7525, 7342, 7327, + 7330, 7350, 7347, 7356, 7525, 7353, 7358, 7361, 7525, 7360, + 7525, 7525, 7367, 7362, 7374, 7370, 7375, 7525, 7525, 7525, + 7433, 7440, 7447, 7454, 7461, 83, 7468, 7475, 7482, 7489, + 7496, 7503, 7510, 7517 } ; -static yyconst flex_int16_t yy_def[2613] = +static yyconst flex_int16_t yy_def[2645] = { 0, - 2598, 1, 2599, 2599, 2600, 2600, 2601, 2601, 2602, 2602, - 2603, 2603, 2598, 2604, 2598, 2598, 2598, 2598, 2605, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2606, 2598, 2598, 2598, 2606, 2607, 2598, 2598, - 2598, 2607, 2608, 2598, 2598, 2598, 2598, 2608, 2609, 2598, - 2598, 2598, 2609, 2610, 2598, 2611, 2598, 2610, 2610, 2604, - 2604, 2598, 2612, 2605, 2612, 2605, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2606, - 2606, 2607, 2607, 2608, 2608, 2598, 2609, 2609, 2610, 2610, - 2611, 2611, 2610, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2610, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2610, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2610, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2610, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2598, 2598, 2604, - 2598, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2610, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2610, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2598, 2604, 2604, 2604, 2604, 2598, 2604, 2598, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2598, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2598, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2598, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2598, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2598, 2604, 2598, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2598, 2598, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2598, - 2598, 2604, 2598, 2604, 2598, 2598, 2604, 2604, 2604, 2598, - - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2598, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2598, 2604, 2604, 2604, 2598, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - 2604, 2598, 2598, 2598, 2598, 2604, 2604, 2604, 2604, 2604, - 2598, 2598, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2598, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2598, 2598, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2604, 2598, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2598, 2604, 2604, 2604, - 2598, 2604, 2604, 2604, 2598, 2604, 2598, 2604, 2598, 2604, - 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2598, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2598, - - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2598, 2598, 2598, 2604, 2604, - 2604, 2598, 2598, 2604, 2598, 2604, 2598, 2604, 2598, 2604, - 2604, 2604, 2598, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2604, 2604, 2598, 2604, 2598, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - - 2598, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, - 2604, 2598, 2598, 2604, 2598, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2598, 2598, 2604, 2604, 2604, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2598, 2604, - 2598, 2598, 2604, 2604, 2604, 2598, 2598, 2598, 2604, 2598, - 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2598, 2598, 2604, 2598, 2598, 2604, 2604, 2604, 2598, 2604, - 2604, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2598, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2598, 2598, 2598, 2598, 2598, 2604, 2598, - 2598, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2598, - 2604, 2598, 2598, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - - 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, - 2604, 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2598, - 2604, 2604, 2604, 2604, 2604, 2598, 2604, 2604, 2604, 2604, - 2604, 2604, 2598, 2604, 2604, 2604, 2598, 2604, 2598, 2598, - 2604, 2604, 2604, 2604, 2604, 2598, 2598, 0, 2598, 2598, - - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598 + 2630, 1, 2631, 2631, 2632, 2632, 2633, 2633, 2634, 2634, + 2635, 2635, 2630, 2636, 2630, 2630, 2630, 2630, 2637, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2638, 2630, 2630, 2630, 2638, 2639, 2630, 2630, + 2630, 2639, 2640, 2630, 2630, 2630, 2630, 2640, 2641, 2630, + 2630, 2630, 2641, 2642, 2630, 2643, 2630, 2642, 2642, 2636, + 2636, 2630, 2644, 2637, 2644, 2637, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2638, + 2638, 2639, 2639, 2640, 2640, 2630, 2641, 2641, 2642, 2642, + 2643, 2643, 2642, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2642, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2642, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2642, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2642, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2630, 2636, 2630, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2642, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2630, 2636, 2636, 2642, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2636, 2636, 2636, 2636, 2630, 2636, 2630, 2636, + + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2630, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2630, 2636, 2630, 2636, 2636, 2630, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2630, + 2630, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + + 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2630, 2630, 2636, 2630, 2636, 2630, 2630, + 2630, 2636, 2636, 2636, 2630, 2636, 2630, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, + 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, + + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2630, 2636, + 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2630, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2630, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2630, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2630, 2636, 2630, 2636, 2630, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, + + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2630, 2630, 2630, 2636, 2636, 2636, 2630, + 2630, 2636, 2636, 2630, 2636, 2630, 2636, 2630, 2636, 2636, + 2636, 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + + 2636, 2636, 2630, 2636, 2630, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2630, 2636, 2636, 2630, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2630, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2630, 2636, 2630, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2630, + + 2636, 2630, 2630, 2636, 2636, 2636, 2630, 2630, 2630, 2636, + 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, + 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2630, 2630, 2636, 2630, 2630, 2636, 2636, 2636, + 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2630, 2630, 2630, + 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2636, 2630, 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + + 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, + 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, + 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2630, 0, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630 } ; -static yyconst flex_uint16_t yy_nxt[7501] = +static yyconst flex_uint16_t yy_nxt[7592] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 14, @@ -1329,52 +1338,52 @@ 171, 134, 135, 114, 173, 145, 177, 143, 141, 115, 71, 161, 116, 136, 132, 71, 198, 137, 172, 117, 123, 138, 71, 124, 133, 160, 71, 256, 134, 135, - 125, 2598, 71, 177, 126, 127, 71, 178, 161, 71, - 136, 2598, 71, 198, 137, 172, 71, 123, 138, 70, + 125, 2630, 71, 177, 126, 127, 71, 178, 161, 71, + 136, 2630, 71, 198, 137, 172, 71, 123, 138, 70, 124, 70, 70, 75, 70, 75, 75, 125, 75, 71, 70, 126, 127, 149, 178, 149, 149, 70, 149, 70, 70, 75, 70, 75, 75, 165, 75, 174, 70, 167, - 168, 166, 75, 2598, 71, 175, 176, 179, 71, 180, - 181, 152, 2598, 2598, 2598, 186, 71, 188, 2598, 197, - 2598, 71, 165, 71, 174, 71, 167, 168, 166, 76, + 168, 166, 75, 2630, 71, 175, 176, 179, 71, 180, + 181, 152, 2630, 2630, 2630, 186, 71, 188, 2630, 197, + 2630, 71, 165, 71, 174, 71, 167, 168, 166, 76, 71, 71, 175, 176, 179, 182, 180, 181, 183, 187, 194, 189, 71, 196, 188, 195, 197, 71, 71, 191, - 199, 184, 185, 192, 200, 2598, 71, 201, 2598, 71, - 2598, 190, 182, 71, 71, 183, 187, 194, 189, 193, + 199, 184, 185, 192, 200, 2630, 71, 201, 2630, 71, + 2630, 190, 182, 71, 71, 183, 187, 194, 189, 193, 196, 71, 195, 71, 71, 202, 191, 199, 184, 185, 192, 200, 71, 203, 201, 204, 205, 206, 190, 209, - 208, 207, 71, 210, 214, 71, 193, 71, 2598, 215, - - 71, 2598, 202, 222, 331, 2598, 71, 71, 71, 71, + 208, 207, 71, 210, 214, 71, 193, 71, 2630, 215, + + 71, 2630, 202, 222, 331, 2630, 71, 71, 71, 71, 203, 219, 204, 205, 206, 71, 209, 208, 207, 211, 210, 214, 221, 223, 216, 71, 215, 224, 212, 71, 222, 71, 225, 226, 213, 217, 71, 71, 219, 218, - 2598, 71, 71, 71, 229, 228, 211, 227, 71, 221, + 2630, 71, 71, 71, 229, 228, 211, 227, 71, 221, 223, 216, 231, 71, 224, 212, 71, 236, 232, 225, 226, 213, 217, 233, 234, 230, 218, 71, 239, 71, - 71, 229, 228, 71, 227, 235, 2598, 2598, 71, 231, - 71, 2598, 240, 2598, 236, 232, 2598, 237, 2598, 2598, + 71, 229, 228, 71, 227, 235, 2630, 2630, 71, 231, + 71, 2630, 240, 2630, 236, 232, 2630, 237, 2630, 2630, 233, 234, 230, 144, 238, 144, 144, 71, 144, 245, 71, 149, 235, 149, 149, 75, 149, 75, 75, 240, 75, 150, 242, 241, 237, 71, 71, 246, 243, 247, - 248, 238, 71, 2598, 71, 244, 245, 71, 249, 252, + 248, 238, 71, 2630, 71, 244, 245, 71, 249, 252, 251, 250, 71, 255, 288, 253, 71, 71, 71, 242, 241, 254, 292, 152, 246, 243, 247, 248, 71, 257, 71, 267, 244, 258, 268, 249, 265, 251, 250, 71, 255, 71, 253, 71, 266, 272, 71, 270, 254, 269, - 259, 2598, 71, 71, 71, 2598, 71, 71, 267, 273, - 258, 268, 71, 265, 71, 278, 316, 2598, 71, 274, - 2598, 266, 272, 275, 71, 271, 269, 259, 260, 71, + 259, 2630, 71, 71, 71, 2630, 71, 71, 267, 273, + 258, 268, 71, 265, 71, 278, 316, 2630, 71, 274, + 2630, 266, 272, 275, 71, 271, 269, 259, 260, 71, 289, 71, 71, 261, 276, 71, 273, 277, 262, 71, 279, 280, 278, 316, 263, 264, 274, 290, 285, 71, - 275, 71, 271, 2598, 406, 260, 71, 289, 291, 294, + 275, 71, 271, 2630, 406, 260, 71, 289, 291, 294, 261, 276, 71, 71, 277, 262, 286, 279, 280, 281, 71, 263, 264, 71, 282, 285, 287, 293, 298, 71, 295, 71, 297, 296, 71, 291, 283, 71, 284, 71, - 299, 71, 300, 286, 302, 71, 281, 2598, 71, 301, + 299, 71, 300, 286, 302, 71, 281, 2630, 71, 301, 71, 282, 303, 287, 293, 298, 305, 295, 71, 304, 296, 307, 306, 283, 71, 284, 71, 71, 308, 71, 309, 302, 71, 71, 71, 310, 301, 71, 311, 303, @@ -1390,735 +1399,746 @@ 340, 343, 71, 71, 71, 71, 71, 335, 71, 337, 333, 341, 344, 347, 348, 349, 71, 350, 351, 353, - 2598, 352, 2598, 71, 336, 368, 342, 340, 343, 71, - 71, 71, 71, 354, 356, 71, 71, 357, 2598, 344, + 2630, 352, 2630, 71, 336, 368, 342, 340, 343, 71, + 71, 71, 71, 354, 356, 71, 71, 357, 2630, 344, 347, 348, 358, 363, 350, 351, 353, 71, 352, 355, 360, 71, 71, 361, 71, 362, 367, 71, 71, 71, - 354, 356, 71, 364, 357, 365, 371, 2598, 71, 358, + 354, 356, 71, 364, 357, 365, 371, 2630, 71, 358, 363, 366, 369, 370, 71, 71, 355, 360, 376, 71, 361, 71, 362, 367, 372, 71, 374, 375, 377, 71, 364, 71, 365, 371, 71, 71, 379, 378, 366, 369, 381, 373, 71, 380, 390, 71, 71, 71, 382, 71, 71, 372, 71, 374, 375, 377, 383, 71, 384, 389, - 385, 2598, 386, 379, 378, 71, 71, 381, 373, 71, - 380, 387, 71, 388, 71, 382, 71, 391, 392, 2598, + 385, 2630, 386, 379, 378, 71, 71, 381, 373, 71, + 380, 387, 71, 388, 71, 382, 71, 391, 392, 2630, 71, 71, 398, 383, 397, 384, 389, 385, 71, 386, - 2598, 71, 399, 71, 400, 2598, 2598, 71, 387, 393, + 2630, 71, 399, 71, 400, 2630, 2630, 71, 387, 393, 388, 71, 71, 407, 391, 392, 402, 394, 395, 398, - 396, 397, 401, 403, 71, 2598, 2598, 71, 71, 399, + 396, 397, 401, 403, 71, 2630, 2630, 71, 71, 399, 71, 400, 404, 405, 410, 411, 393, 71, 71, 413, 407, 414, 417, 402, 394, 395, 71, 396, 408, 401, 403, 409, 412, 71, 415, 416, 418, 71, 71, 404, 405, 410, 411, 71, 71, 419, 71, 71, 414, 417, - 71, 71, 1047, 71, 421, 408, 422, 420, 409, 412, + 71, 71, 1057, 71, 421, 408, 422, 420, 409, 412, 71, 415, 416, 418, 71, 424, 71, 423, 425, 426, - 431, 427, 419, 2598, 71, 2598, 2598, 428, 429, 437, - 430, 421, 71, 71, 420, 2598, 2598, 71, 71, 2598, + 431, 427, 419, 2630, 71, 2630, 2630, 428, 429, 437, + 430, 421, 71, 71, 420, 472, 71, 71, 71, 2630, 432, 71, 424, 71, 423, 436, 426, 431, 427, 438, 71, 439, 71, 433, 428, 429, 434, 430, 435, 440, - 2598, 71, 445, 71, 71, 71, 441, 432, 446, 71, - 471, 71, 436, 613, 71, 447, 438, 71, 439, 442, - 433, 448, 443, 434, 444, 435, 440, 71, 449, 445, - 71, 459, 451, 441, 71, 446, 460, 471, 466, 463, - - 71, 464, 447, 71, 450, 71, 442, 150, 448, 443, - 71, 444, 71, 475, 71, 449, 461, 71, 459, 451, - 71, 462, 2598, 460, 2598, 466, 463, 465, 464, 467, - 469, 450, 452, 453, 476, 71, 470, 71, 2598, 472, - 475, 71, 454, 468, 455, 456, 457, 71, 71, 458, - 481, 71, 71, 479, 465, 473, 467, 71, 477, 452, - 453, 476, 71, 470, 474, 71, 472, 478, 483, 454, - 468, 455, 456, 457, 480, 71, 458, 482, 485, 71, - 479, 487, 71, 71, 71, 477, 71, 71, 486, 484, - 71, 474, 71, 491, 478, 483, 488, 489, 490, 2598, - - 71, 480, 71, 492, 482, 2598, 493, 495, 487, 494, - 71, 499, 496, 2598, 71, 486, 484, 71, 71, 500, - 491, 2598, 71, 488, 2598, 497, 71, 507, 511, 2598, - 492, 71, 71, 493, 495, 71, 494, 71, 499, 496, - 498, 502, 501, 503, 504, 71, 500, 510, 71, 509, - 71, 508, 497, 71, 507, 505, 71, 506, 512, 513, - 71, 515, 71, 518, 71, 71, 514, 498, 502, 501, - 503, 504, 71, 71, 510, 517, 509, 71, 508, 522, - 71, 519, 505, 71, 506, 512, 513, 516, 515, 71, - 518, 520, 523, 514, 71, 521, 2598, 527, 524, 526, - - 528, 71, 517, 71, 71, 71, 525, 71, 519, 531, - 2598, 71, 71, 532, 516, 71, 530, 71, 520, 523, - 529, 71, 521, 533, 527, 524, 526, 528, 71, 71, - 535, 71, 71, 525, 536, 534, 531, 539, 537, 71, - 532, 71, 540, 530, 71, 71, 544, 529, 538, 71, - 533, 541, 546, 71, 547, 71, 71, 535, 545, 548, - 71, 536, 534, 550, 539, 537, 71, 71, 542, 540, - 543, 71, 71, 544, 549, 538, 71, 71, 541, 551, - 553, 547, 552, 555, 71, 545, 554, 558, 556, 2598, - 550, 71, 562, 71, 559, 542, 71, 543, 71, 560, - - 71, 549, 561, 563, 71, 564, 551, 71, 71, 552, - 555, 557, 71, 554, 558, 71, 71, 71, 565, 562, - 71, 559, 566, 567, 2598, 71, 560, 575, 576, 561, - 563, 71, 564, 71, 71, 577, 71, 578, 557, 2598, - 71, 579, 2598, 2598, 2598, 565, 71, 2598, 2598, 566, - 567, 568, 580, 71, 575, 576, 569, 582, 570, 71, - 581, 584, 577, 602, 578, 587, 571, 583, 579, 572, - 573, 71, 71, 586, 71, 585, 574, 71, 568, 580, - 71, 589, 588, 569, 71, 570, 590, 581, 584, 71, - 591, 71, 587, 571, 583, 71, 572, 573, 71, 71, - - 586, 595, 585, 574, 592, 71, 593, 71, 589, 588, - 594, 596, 597, 590, 71, 71, 71, 591, 598, 599, - 71, 601, 604, 71, 600, 2598, 603, 605, 595, 71, - 71, 592, 614, 593, 71, 71, 616, 594, 596, 597, - 71, 71, 71, 606, 150, 598, 599, 607, 601, 604, - 609, 600, 608, 603, 605, 610, 71, 612, 611, 71, - 615, 71, 618, 617, 71, 2598, 620, 621, 71, 71, - 606, 630, 2598, 71, 607, 71, 71, 609, 71, 608, - 619, 2598, 610, 71, 612, 611, 71, 615, 71, 618, - 617, 71, 71, 620, 621, 622, 625, 624, 623, 627, - - 628, 626, 629, 71, 631, 632, 71, 619, 71, 633, - 634, 635, 636, 71, 2598, 637, 71, 639, 642, 638, - 71, 71, 622, 647, 624, 623, 627, 71, 71, 71, - 641, 71, 71, 71, 71, 643, 644, 634, 635, 636, - 640, 71, 637, 71, 639, 71, 638, 645, 71, 646, - 71, 648, 649, 71, 654, 71, 71, 641, 71, 650, - 656, 653, 643, 644, 651, 71, 655, 640, 652, 71, - 71, 658, 657, 71, 645, 71, 646, 659, 648, 649, - 71, 654, 71, 71, 71, 660, 650, 656, 653, 71, - 2598, 651, 661, 655, 71, 652, 662, 2598, 658, 657, - - 665, 2598, 663, 667, 659, 670, 666, 668, 671, 669, - 71, 675, 71, 2598, 71, 2598, 2598, 71, 677, 661, - 71, 71, 71, 662, 664, 71, 672, 665, 71, 663, - 667, 71, 670, 666, 668, 71, 669, 673, 676, 674, - 679, 680, 71, 71, 71, 677, 678, 681, 71, 682, - 71, 664, 684, 672, 71, 683, 685, 693, 2598, 71, - 71, 689, 71, 686, 673, 676, 674, 679, 680, 699, - 71, 687, 690, 678, 681, 71, 688, 71, 695, 694, - 71, 71, 683, 685, 71, 71, 71, 71, 689, 71, - 686, 696, 691, 692, 2598, 700, 71, 697, 706, 690, - - 71, 71, 702, 71, 701, 695, 694, 703, 2598, 704, - 71, 2598, 698, 71, 705, 708, 71, 2598, 696, 691, - 692, 71, 700, 71, 697, 706, 71, 2598, 2598, 707, - 2598, 701, 715, 938, 71, 71, 704, 71, 709, 698, - 71, 705, 708, 710, 711, 714, 712, 71, 713, 716, - 71, 717, 71, 71, 71, 71, 707, 720, 718, 715, - 71, 71, 719, 721, 71, 709, 71, 2598, 71, 71, - 710, 711, 714, 712, 722, 713, 716, 71, 717, 723, - 729, 724, 71, 725, 720, 718, 727, 71, 726, 719, - 71, 728, 71, 731, 71, 71, 730, 71, 735, 732, - - 733, 722, 737, 71, 71, 761, 723, 729, 724, 71, - 725, 71, 71, 727, 734, 726, 736, 71, 728, 738, - 731, 71, 71, 730, 71, 735, 732, 733, 739, 737, - 740, 741, 744, 742, 746, 2598, 71, 71, 743, 71, - 71, 734, 747, 736, 745, 71, 738, 749, 748, 71, - 71, 752, 71, 71, 750, 739, 71, 740, 741, 744, - 742, 746, 71, 71, 150, 743, 751, 71, 755, 747, - 71, 745, 71, 753, 749, 748, 754, 758, 752, 756, - 759, 750, 71, 760, 71, 762, 71, 757, 763, 767, - 765, 71, 71, 751, 764, 71, 766, 799, 71, 71, - - 753, 2598, 786, 754, 71, 71, 756, 759, 71, 71, - 760, 71, 762, 768, 757, 763, 767, 765, 769, 770, - 71, 764, 71, 776, 71, 778, 71, 2598, 71, 777, - 2598, 781, 779, 783, 71, 71, 782, 2598, 1157, 71, - 768, 2598, 2598, 71, 780, 769, 770, 771, 794, 71, - 776, 772, 778, 71, 773, 784, 777, 71, 781, 779, - 783, 774, 71, 782, 775, 785, 71, 71, 71, 71, - 71, 780, 71, 795, 771, 794, 796, 2598, 772, 71, - 804, 773, 784, 2416, 2417, 71, 800, 797, 774, 71, - 801, 775, 785, 787, 788, 2598, 789, 802, 798, 790, - - 795, 803, 71, 796, 791, 805, 71, 804, 806, 71, - 792, 793, 71, 800, 797, 807, 71, 801, 808, 71, - 787, 788, 71, 789, 802, 798, 790, 71, 803, 71, - 71, 791, 805, 71, 810, 806, 809, 792, 793, 811, - 71, 812, 807, 813, 71, 808, 71, 814, 815, 71, - 817, 816, 818, 820, 819, 2598, 824, 71, 825, 71, - 71, 810, 71, 809, 71, 826, 811, 71, 812, 823, - 813, 834, 827, 71, 814, 815, 71, 817, 816, 818, - 71, 819, 821, 828, 829, 830, 831, 822, 71, 71, - 71, 71, 826, 71, 71, 832, 823, 833, 71, 827, - - 835, 836, 71, 71, 837, 71, 843, 2598, 71, 2598, - 828, 829, 830, 831, 71, 71, 839, 838, 71, 840, - 71, 842, 832, 841, 833, 71, 2598, 835, 836, 844, - 71, 847, 2598, 843, 71, 851, 71, 71, 71, 71, - 845, 850, 848, 839, 838, 71, 840, 846, 842, 71, - 841, 71, 849, 71, 71, 854, 844, 71, 847, 71, - 71, 855, 851, 852, 856, 2598, 859, 845, 850, 848, - 71, 853, 857, 71, 846, 858, 860, 863, 862, 849, - 71, 71, 854, 71, 861, 71, 864, 71, 71, 71, - 852, 856, 865, 859, 71, 71, 867, 868, 853, 857, - - 866, 71, 858, 860, 863, 862, 872, 869, 71, 71, - 871, 861, 71, 864, 71, 71, 870, 876, 873, 865, - 879, 874, 71, 867, 868, 71, 881, 866, 71, 71, - 882, 71, 875, 71, 869, 877, 878, 871, 883, 71, - 880, 889, 71, 870, 876, 873, 71, 71, 874, 71, - 886, 890, 71, 71, 887, 892, 884, 882, 71, 875, - 71, 888, 877, 878, 885, 883, 893, 880, 895, 71, - 891, 71, 71, 71, 897, 71, 898, 886, 890, 71, - 896, 887, 892, 884, 901, 894, 900, 71, 888, 71, - 899, 885, 71, 903, 902, 71, 71, 891, 71, 71, - - 71, 897, 71, 150, 904, 906, 905, 896, 71, 71, - 71, 901, 894, 900, 71, 907, 908, 899, 909, 2598, - 903, 902, 918, 71, 71, 2598, 71, 2598, 71, 916, - 917, 904, 906, 905, 71, 919, 922, 71, 920, 921, - 2598, 2598, 907, 908, 2598, 909, 910, 923, 911, 918, - 2598, 71, 912, 71, 913, 71, 916, 917, 71, 914, - 71, 71, 919, 922, 915, 920, 921, 924, 928, 926, - 71, 927, 925, 910, 923, 911, 932, 933, 929, 912, - 71, 913, 71, 71, 931, 936, 914, 935, 930, 71, - 939, 915, 937, 940, 71, 928, 926, 934, 927, 71, - - 71, 71, 952, 932, 933, 929, 71, 941, 71, 949, - 71, 931, 948, 2598, 935, 930, 71, 71, 951, 71, - 940, 953, 71, 2598, 934, 950, 960, 71, 71, 952, - 954, 71, 2598, 71, 941, 942, 949, 955, 71, 948, - 943, 958, 944, 71, 964, 951, 961, 956, 953, 71, - 71, 957, 950, 945, 946, 71, 959, 954, 71, 71, - 947, 71, 942, 962, 955, 970, 965, 943, 71, 944, - 71, 71, 963, 961, 956, 2598, 71, 966, 957, 71, - 945, 946, 967, 959, 968, 71, 71, 947, 71, 971, - 962, 973, 969, 965, 974, 975, 977, 71, 972, 963, - - 71, 71, 71, 71, 966, 976, 71, 71, 71, 967, - 978, 968, 71, 71, 71, 979, 971, 981, 973, 969, - 990, 974, 975, 977, 980, 972, 982, 983, 71, 984, - 71, 988, 976, 985, 71, 71, 71, 978, 989, 986, - 987, 71, 2598, 991, 981, 993, 2598, 71, 992, 71, - 994, 980, 71, 982, 983, 71, 984, 71, 988, 71, - 985, 71, 71, 997, 71, 989, 986, 987, 995, 998, - 991, 996, 999, 1002, 1000, 992, 1003, 71, 1001, 71, - 1005, 2598, 71, 71, 1004, 71, 1006, 71, 2598, 1017, - 997, 71, 71, 1008, 71, 995, 998, 1007, 996, 999, - - 1002, 1000, 2598, 71, 1009, 1001, 1010, 1011, 71, 2598, - 71, 1004, 71, 1006, 1012, 71, 1015, 71, 1014, 1016, - 1008, 71, 1013, 1018, 1007, 2598, 71, 71, 1021, 71, - 1019, 1009, 1026, 1010, 1011, 1020, 71, 71, 1022, 71, - 71, 1012, 1025, 1015, 71, 1014, 1016, 71, 71, 1013, - 71, 1023, 71, 1024, 1027, 1021, 71, 1019, 2598, 71, - 71, 1028, 1020, 1029, 71, 1022, 1030, 1031, 1032, 1025, - 1034, 1033, 2598, 1039, 1040, 71, 1035, 1038, 1023, 71, - 1024, 1043, 1041, 71, 2598, 71, 71, 1037, 1028, 71, - 1029, 1036, 71, 1030, 71, 71, 71, 1034, 1033, 71, - - 71, 1042, 1044, 1035, 1038, 71, 71, 71, 71, 1041, - 71, 1045, 1046, 1048, 1037, 1049, 1053, 1050, 1036, 1051, - 2598, 71, 71, 71, 71, 71, 1052, 71, 1042, 1044, - 1057, 1058, 1054, 71, 71, 1055, 1056, 1059, 1045, 1046, - 1048, 1060, 1049, 71, 1050, 71, 1051, 71, 71, 71, - 1061, 71, 71, 1052, 1062, 2598, 1063, 1057, 1058, 1054, - 1064, 2598, 1055, 1056, 71, 1069, 1065, 1066, 1060, 1068, - 1071, 1067, 1074, 1070, 2598, 2598, 1114, 71, 71, 1094, - 71, 71, 71, 1063, 71, 71, 71, 1064, 71, 1072, - 71, 71, 1069, 1065, 1066, 1073, 1068, 1071, 1067, 71, - - 1070, 71, 1075, 71, 1076, 1077, 71, 1078, 71, 1083, - 1086, 2598, 2598, 71, 71, 71, 1072, 1084, 1085, 1079, - 1090, 2598, 1073, 71, 1087, 1089, 71, 2598, 1080, 1075, - 1081, 1076, 1077, 1082, 1078, 71, 1083, 1086, 71, 71, - 1088, 71, 71, 71, 1084, 1085, 1079, 1090, 71, 71, - 1091, 1087, 1089, 1092, 1093, 1080, 1095, 1081, 71, 1096, - 1082, 1098, 71, 1097, 1099, 1101, 71, 1088, 2598, 2598, - 2598, 2598, 2598, 71, 1102, 71, 1104, 1091, 71, 1105, - 1092, 1093, 71, 1095, 71, 71, 1096, 1100, 1098, 71, - 1097, 1099, 1101, 1103, 71, 1109, 71, 1110, 1107, 71, - - 1106, 1102, 1108, 1104, 71, 71, 1105, 1116, 71, 71, - 1111, 71, 1112, 1113, 1100, 1115, 71, 71, 1119, 71, - 1103, 1118, 1109, 1117, 1110, 1107, 71, 1106, 71, 1108, - 71, 71, 1125, 71, 1116, 1124, 1120, 1111, 1122, 1112, - 1113, 1121, 1115, 71, 1123, 1119, 71, 1132, 1118, 71, - 1117, 1133, 1134, 1147, 2598, 1135, 2598, 71, 71, 1125, - 2598, 71, 1124, 2598, 2598, 1122, 1136, 2598, 71, 71, - 1138, 1123, 1126, 1137, 1132, 1127, 1128, 1143, 1133, 1139, - 1129, 71, 1135, 1140, 71, 71, 1130, 1141, 71, 1142, - 1131, 71, 71, 1136, 71, 71, 71, 1138, 1144, 1126, - - 1137, 71, 1127, 1128, 1143, 1145, 1139, 1129, 1148, 71, - 1140, 71, 1146, 1130, 1141, 1149, 1142, 1131, 71, 1158, - 71, 71, 1150, 2598, 1159, 1144, 1156, 1161, 1163, 1160, - 2598, 1179, 1145, 1164, 2598, 71, 71, 71, 1165, 1146, - 71, 71, 1149, 71, 1162, 71, 1158, 71, 1166, 1150, - 1151, 1159, 71, 1156, 1161, 1152, 1160, 1153, 71, 1154, - 71, 1155, 71, 1167, 1169, 1165, 1170, 1168, 71, 2598, - 71, 1162, 71, 1171, 71, 1166, 71, 1151, 1176, 1173, - 1175, 1178, 1152, 1172, 1153, 71, 1154, 71, 1155, 1174, - 1167, 1169, 71, 1170, 1168, 1177, 71, 71, 71, 1180, - - 1171, 71, 71, 71, 1181, 1176, 1173, 1175, 1178, 1182, - 1172, 71, 2598, 1183, 1186, 1185, 1174, 1184, 1187, 1188, - 1192, 1189, 1177, 71, 1190, 71, 1180, 1191, 1193, 1196, - 71, 71, 1195, 71, 71, 71, 1182, 71, 1194, 71, - 1183, 71, 1185, 71, 1184, 1187, 71, 71, 1189, 1197, - 1198, 1190, 1199, 71, 1191, 1193, 1196, 71, 1200, 1195, - 71, 1201, 1203, 1202, 1204, 1194, 1206, 1205, 1207, 71, - 1208, 71, 71, 1209, 71, 1210, 1197, 1198, 1217, 1199, - 71, 71, 1213, 71, 71, 1200, 1218, 71, 1201, 1203, - 1202, 1204, 71, 71, 1205, 1211, 1212, 1208, 71, 1214, - - 71, 1215, 1210, 71, 1219, 71, 71, 1216, 71, 71, - 71, 71, 71, 1220, 1221, 1224, 1225, 1223, 71, 2598, - 1222, 2598, 1211, 1212, 71, 71, 1214, 71, 1215, 71, - 71, 1219, 1227, 1228, 1216, 1231, 1229, 1226, 71, 1230, - 71, 1221, 1224, 1225, 1223, 71, 71, 1222, 71, 1232, - 1233, 1234, 1239, 1235, 71, 1240, 1238, 71, 71, 1227, - 1228, 71, 1231, 1229, 1226, 1236, 1230, 1246, 71, 1241, - 1237, 71, 1242, 71, 71, 1243, 71, 1233, 1234, 1239, - 1235, 71, 1240, 1238, 71, 1244, 1248, 1247, 1245, 1250, - 1249, 1279, 71, 1251, 1246, 2598, 1241, 71, 2598, 1242, - - 71, 71, 1243, 1252, 71, 71, 1254, 71, 1257, 1280, - 1253, 1260, 1244, 71, 1247, 1245, 1250, 1249, 71, 71, - 1251, 71, 1255, 71, 1259, 1256, 2598, 1258, 71, 1263, - 1252, 71, 71, 1254, 71, 1257, 71, 1253, 1260, 1261, - 1269, 71, 2598, 2598, 71, 1262, 1265, 1264, 71, 1255, - 71, 1259, 1256, 71, 1258, 71, 1263, 1266, 1267, 71, - 1268, 1270, 71, 1274, 1271, 1273, 1261, 1269, 71, 71, - 71, 1272, 1262, 1265, 1264, 1276, 2598, 1281, 1278, 1283, - 71, 71, 1275, 71, 1266, 1267, 71, 1268, 1270, 71, - 1274, 1271, 1273, 1277, 71, 1282, 71, 2598, 1272, 71, - - 71, 1284, 1276, 71, 1281, 1278, 71, 1285, 1286, 1275, - 1287, 1289, 2598, 1290, 1288, 2598, 2598, 71, 2598, 2598, - 1277, 71, 1282, 71, 71, 71, 71, 1292, 1284, 1291, - 1293, 71, 1294, 1305, 1285, 1286, 71, 1287, 1289, 71, - 1290, 1288, 1295, 1296, 1298, 71, 71, 1301, 1297, 1299, - 71, 1300, 71, 1302, 1292, 71, 1291, 1293, 71, 1294, - 1303, 71, 1308, 1304, 1307, 71, 1306, 71, 71, 1295, - 71, 1309, 71, 1310, 1301, 71, 71, 1311, 1300, 1317, - 1302, 71, 1314, 71, 1312, 71, 1313, 1303, 1318, 1308, - 1304, 1307, 71, 1306, 71, 71, 1315, 1320, 1316, 1319, - - 1310, 1324, 71, 71, 1311, 71, 1317, 1321, 1322, 1314, - 71, 1312, 71, 1313, 71, 1318, 1323, 1329, 1325, 71, - 1331, 2598, 2598, 1315, 71, 1316, 1319, 71, 1324, 71, - 71, 71, 71, 1326, 1321, 1322, 1330, 1327, 1332, 71, - 1333, 2598, 1339, 1323, 1329, 1325, 1334, 1331, 71, 71, - 1328, 71, 1335, 1336, 1338, 1337, 1341, 1342, 71, 1340, - 1326, 71, 1343, 1330, 1327, 1332, 71, 71, 71, 1339, - 1345, 71, 1346, 1334, 71, 1347, 71, 1328, 71, 1335, - 1336, 1338, 1337, 1348, 71, 1344, 1340, 1349, 71, 1343, - 1350, 71, 71, 1351, 1352, 2598, 1353, 1345, 71, 1346, - - 1354, 71, 1355, 1357, 71, 1356, 71, 71, 1359, 1358, - 71, 71, 1344, 1360, 71, 71, 1361, 1350, 71, 1363, - 1351, 1352, 71, 1353, 71, 1362, 71, 1354, 1364, 1355, - 1357, 71, 1356, 1366, 71, 1359, 1358, 71, 71, 1367, - 1360, 1365, 1368, 1361, 71, 1370, 71, 1369, 71, 1371, - 1372, 71, 1362, 71, 1373, 1364, 1375, 1376, 71, 71, - 1366, 1379, 1374, 71, 71, 1377, 1367, 1383, 1365, 1368, - 71, 71, 1370, 1380, 1369, 71, 1371, 71, 71, 1381, - 1378, 1373, 71, 1375, 1376, 71, 71, 71, 1379, 1374, - 1382, 1384, 1377, 1387, 1383, 71, 1385, 71, 1388, 1386, - - 1380, 1389, 1390, 71, 1392, 2598, 1381, 1378, 71, 1391, - 2598, 1393, 1394, 71, 1396, 71, 1397, 1382, 1384, 71, - 1387, 2598, 71, 1385, 71, 1401, 1386, 1402, 1389, 1395, - 71, 71, 71, 71, 71, 1398, 1391, 1399, 1393, 1394, - 71, 1396, 71, 1397, 1403, 1400, 71, 1408, 71, 71, - 2598, 1404, 1401, 71, 1402, 1409, 1395, 71, 71, 71, - 1405, 2598, 1398, 1406, 1399, 1410, 1411, 1412, 2598, 71, - 2598, 1403, 1400, 1413, 1414, 1407, 1417, 71, 1404, 71, - 2598, 1415, 1409, 71, 71, 1416, 1419, 1405, 71, 1422, - 1406, 1418, 1410, 1411, 1412, 71, 1420, 71, 71, 1423, - - 1413, 1425, 1407, 1417, 71, 71, 71, 71, 1415, 1421, - 1424, 71, 1416, 1419, 1428, 1426, 71, 1427, 1418, 71, - 1430, 71, 2598, 1420, 1429, 1433, 1436, 1431, 1432, 71, - 1434, 71, 71, 71, 71, 71, 1421, 1424, 71, 71, - 71, 71, 1426, 71, 1427, 1435, 71, 1430, 1437, 1438, - 1440, 1429, 1433, 1436, 1431, 1432, 71, 1434, 1439, 1442, - 71, 1441, 1443, 71, 1449, 71, 1445, 71, 1444, 71, - 1446, 1447, 1435, 71, 2598, 1448, 1438, 1440, 71, 2598, - 71, 1450, 71, 1452, 71, 1439, 71, 1459, 1441, 1443, - 71, 1449, 71, 1445, 1451, 1444, 1455, 1446, 1447, 71, - - 1456, 1453, 1448, 71, 1454, 1457, 71, 71, 1450, 1458, - 1452, 71, 71, 1460, 71, 1461, 1462, 1463, 1465, 71, - 1466, 1451, 1467, 1455, 1464, 71, 1471, 1456, 1453, 71, - 71, 1454, 1457, 1472, 1468, 1470, 1458, 1469, 71, 71, - 71, 1473, 1461, 71, 1463, 1465, 71, 1466, 71, 1467, - 1475, 1464, 71, 71, 1476, 1474, 1478, 1480, 71, 71, - 71, 1468, 1470, 1477, 1469, 1481, 71, 71, 1473, 71, - 1479, 71, 71, 1484, 71, 1482, 1483, 1475, 2598, 1485, - 1489, 1476, 1474, 1478, 1480, 1495, 71, 1498, 1497, 71, - 1477, 71, 1481, 1486, 71, 71, 1487, 1479, 1490, 1488, - - 1484, 1491, 1482, 1483, 71, 71, 1485, 1489, 1492, 1494, - 71, 1499, 1496, 1493, 71, 71, 1500, 71, 1504, 71, - 1486, 71, 71, 1487, 1501, 1490, 1488, 1502, 1491, 1503, - 1505, 1506, 2598, 71, 71, 1508, 1494, 1507, 1499, 1496, - 71, 1509, 71, 71, 71, 71, 1510, 1511, 71, 71, - 71, 1501, 1513, 1512, 1502, 71, 1503, 1505, 1506, 1516, - 1515, 71, 1508, 1514, 1507, 71, 71, 71, 1509, 71, - 1518, 1517, 1519, 1510, 1511, 2598, 1521, 71, 1523, 1520, - 1512, 1530, 1522, 71, 71, 71, 1516, 1515, 71, 71, - 1514, 1524, 1525, 1526, 1527, 1529, 1528, 1541, 1517, 1519, - - 71, 71, 71, 71, 1534, 1523, 1520, 71, 71, 1522, - 1532, 1545, 71, 71, 71, 71, 1531, 1535, 1524, 1525, - 1526, 1527, 1529, 1528, 71, 71, 1533, 1536, 1539, 71, - 71, 71, 1540, 1537, 71, 1538, 71, 1532, 71, 71, - 1543, 1542, 1544, 1531, 1535, 1547, 1546, 71, 71, 71, - 71, 1550, 1548, 1533, 1536, 1539, 71, 1549, 1552, 1540, - 1537, 1551, 1538, 71, 1554, 1553, 2598, 1543, 1542, 1544, - 71, 71, 71, 1546, 71, 71, 71, 1555, 71, 1548, - 1558, 1556, 71, 71, 1549, 1552, 1557, 1559, 1551, 71, - 71, 1554, 1553, 1562, 1560, 71, 1565, 1567, 1561, 1563, - - 1568, 2598, 71, 71, 1555, 71, 1566, 1558, 1556, 71, - 71, 1570, 1564, 1557, 1559, 71, 1569, 71, 71, 71, - 1562, 1560, 71, 1565, 71, 1561, 1563, 1571, 1572, 1582, - 1573, 1574, 71, 1566, 71, 1575, 1577, 1576, 1570, 1564, - 1578, 1579, 1580, 1569, 71, 1584, 71, 71, 1581, 1583, - 1586, 1585, 1589, 71, 1571, 1572, 71, 1573, 71, 1588, - 71, 71, 71, 71, 1576, 1590, 1591, 1578, 1579, 71, - 1587, 71, 71, 71, 1596, 1581, 1583, 71, 1585, 71, - 1598, 71, 71, 71, 1603, 1600, 1588, 1592, 1593, 1594, - 1601, 71, 1590, 1597, 1595, 1602, 1599, 1587, 71, 1606, - - 71, 1596, 71, 71, 2598, 1610, 1605, 1607, 71, 71, - 1604, 1603, 71, 1609, 1592, 1593, 1594, 71, 71, 71, - 1597, 1595, 1602, 1599, 1612, 71, 71, 1615, 1608, 1611, - 71, 71, 71, 1605, 1607, 71, 1613, 1604, 1616, 1614, - 1609, 1617, 1618, 71, 71, 1619, 1620, 1621, 71, 1624, - 71, 1612, 1622, 71, 1615, 1608, 1611, 2598, 71, 71, - 1623, 71, 1627, 1613, 1628, 71, 1614, 71, 1617, 1618, - 71, 1626, 71, 1620, 1621, 71, 1624, 1625, 71, 1622, - 1630, 1629, 71, 1631, 71, 1632, 1633, 1623, 71, 1627, - 2598, 1635, 1634, 1640, 1636, 1637, 71, 1638, 1626, 1639, - - 71, 71, 71, 71, 1625, 1641, 71, 1630, 1629, 71, - 1642, 1643, 71, 71, 71, 71, 2598, 71, 1635, 1634, - 1640, 1636, 1637, 71, 1638, 1646, 1639, 1644, 1645, 2598, - 1650, 1648, 1641, 1652, 71, 1655, 71, 1642, 71, 1649, - 71, 1647, 71, 71, 1653, 1651, 1654, 71, 71, 1659, - 1661, 1656, 1646, 71, 1644, 1645, 71, 1650, 1648, 1664, - 1652, 1660, 71, 71, 71, 71, 1649, 71, 1647, 1665, - 1657, 1653, 1651, 1654, 71, 1658, 71, 1661, 1656, 1667, - 1662, 1666, 1663, 1669, 1668, 1670, 71, 71, 1660, 71, - 1671, 71, 1672, 1673, 2598, 71, 71, 1657, 1676, 1674, - - 71, 1675, 1658, 2598, 71, 1677, 1667, 1662, 1666, 1663, - 71, 1668, 1678, 1680, 1679, 71, 71, 71, 1681, 1683, - 71, 1684, 1682, 2598, 71, 71, 1674, 71, 1675, 71, - 71, 1685, 1677, 1687, 1686, 71, 71, 1689, 1688, 1678, - 1680, 1679, 71, 1690, 1691, 1692, 71, 1693, 1684, 1682, - 71, 71, 71, 1694, 1695, 71, 1696, 1697, 1685, 2598, - 1687, 1686, 71, 71, 1689, 1688, 1698, 1699, 1703, 1704, - 71, 71, 1692, 2598, 71, 71, 71, 71, 2598, 71, - 1694, 1695, 1700, 1696, 1697, 1701, 1702, 1705, 71, 1706, - 71, 71, 1708, 1698, 1699, 1703, 71, 71, 1707, 1709, - - 71, 71, 1712, 1710, 1713, 71, 71, 1715, 1711, 1700, - 71, 71, 1701, 1702, 1705, 1714, 1706, 71, 1724, 71, - 71, 71, 1717, 1716, 2598, 1707, 1709, 71, 1720, 1712, - 1710, 1713, 1719, 1718, 1721, 1711, 71, 71, 1722, 71, - 1723, 71, 1714, 1729, 1727, 71, 71, 1725, 71, 1717, - 1716, 1726, 71, 71, 71, 1720, 71, 1728, 71, 1719, - 1718, 1721, 71, 1730, 1732, 1722, 1731, 1723, 1733, 1734, - 71, 1727, 1736, 71, 1725, 71, 1737, 1735, 1726, 71, - 1738, 1739, 2598, 2598, 1728, 1740, 1741, 71, 71, 71, - 1730, 1732, 71, 1731, 1742, 71, 1734, 71, 71, 1736, - - 71, 71, 71, 1737, 1735, 1743, 71, 1738, 1739, 71, - 1744, 1747, 1740, 1741, 1745, 1748, 1749, 1750, 71, 1757, - 2598, 1742, 71, 1752, 1751, 1759, 71, 1746, 71, 1754, - 71, 71, 1743, 1753, 2598, 71, 71, 1744, 1747, 1755, - 1756, 1745, 1748, 71, 1750, 71, 1757, 71, 1758, 1761, - 1752, 1751, 1759, 1760, 1746, 71, 1754, 1763, 1766, 1762, - 1753, 71, 1764, 71, 2598, 71, 1755, 1756, 1765, 1767, - 71, 71, 71, 1769, 71, 1758, 1761, 1768, 1771, 1772, - 1760, 1770, 71, 71, 71, 1766, 1762, 1777, 71, 1764, - 71, 71, 1774, 1773, 1775, 1765, 1767, 1778, 1786, 71, - - 1769, 71, 71, 1776, 1768, 1779, 1772, 71, 1770, 1781, - 71, 71, 1782, 1783, 71, 1780, 71, 71, 1784, 1774, - 1773, 1775, 71, 71, 1778, 71, 1785, 1793, 1787, 1790, - 1776, 1788, 1779, 1789, 71, 1795, 1797, 71, 71, 1782, - 1783, 71, 1780, 71, 1794, 1784, 1791, 71, 1796, 1792, - 71, 71, 71, 1785, 1793, 1787, 1790, 71, 1788, 71, - 1789, 1799, 71, 1797, 71, 1798, 71, 1800, 1801, 1803, - 1802, 1794, 1804, 1791, 1805, 1796, 1792, 71, 71, 2598, - 71, 71, 71, 71, 1807, 71, 1808, 1806, 1799, 71, - 2598, 1809, 1798, 1813, 1800, 1801, 1803, 1802, 1811, 1804, - - 2598, 1805, 71, 1812, 1810, 71, 71, 71, 71, 1815, - 1816, 1807, 71, 1808, 1806, 1814, 1817, 71, 1809, 71, - 1813, 1818, 1820, 2598, 1819, 1811, 1822, 71, 1821, 1825, - 1812, 1810, 71, 1823, 71, 1826, 1815, 71, 1824, 1827, - 71, 1828, 1814, 1817, 1830, 71, 1834, 1829, 71, 1820, - 71, 1819, 1835, 1822, 71, 1821, 1831, 2598, 1836, 1839, - 71, 71, 1837, 71, 71, 71, 1827, 71, 1828, 1838, - 1832, 71, 1840, 1834, 1829, 1841, 1842, 71, 71, 71, - 1843, 1833, 71, 1831, 71, 1836, 1844, 1846, 1845, 1837, - 1847, 71, 71, 2598, 71, 71, 1838, 1832, 71, 1840, - - 1848, 1849, 71, 1842, 1850, 71, 1854, 1851, 1833, 71, - 71, 1852, 71, 1844, 1846, 1845, 71, 1847, 1855, 1853, - 71, 1857, 71, 1856, 1858, 71, 1861, 1848, 1849, 71, - 71, 1850, 1859, 71, 1851, 71, 1860, 2598, 1852, 1862, - 71, 71, 1947, 71, 1863, 1855, 1853, 71, 1857, 1867, - 1856, 1858, 71, 71, 1865, 71, 1864, 71, 71, 1859, - 71, 1866, 1868, 1860, 1869, 1871, 1862, 1870, 1873, 71, - 71, 1863, 1872, 1874, 71, 1876, 1867, 71, 1877, 71, - 1878, 1865, 71, 1864, 1875, 1879, 71, 1881, 1866, 1868, - 1880, 1869, 71, 1884, 1870, 1873, 71, 71, 71, 1872, - - 1874, 71, 1876, 1882, 71, 71, 1883, 71, 1887, 1885, - 1886, 1875, 1879, 71, 1881, 71, 1888, 1880, 1890, 1889, - 71, 71, 1891, 71, 1893, 1895, 1896, 1897, 1900, 1894, - 1882, 71, 71, 1883, 71, 1887, 1885, 1886, 71, 1892, - 71, 1899, 1898, 1888, 1902, 71, 1889, 71, 1905, 71, - 71, 71, 71, 71, 1897, 71, 1894, 1901, 1903, 1904, - 2598, 1906, 1908, 71, 2598, 71, 1892, 71, 1899, 1898, - 1909, 71, 71, 1911, 1912, 1905, 1907, 1917, 71, 1910, - 71, 71, 1915, 1913, 1901, 1903, 1904, 71, 1906, 71, - 71, 71, 1914, 1916, 71, 1921, 71, 1909, 1923, 1918, - - 1911, 71, 1919, 1907, 71, 1920, 1910, 71, 1922, 1915, - 1913, 1924, 1925, 71, 71, 71, 71, 71, 71, 1914, - 1916, 1926, 71, 1927, 71, 1923, 1918, 1928, 1929, 1919, - 1933, 1930, 1920, 2598, 1931, 1922, 2598, 1935, 1924, 1925, - 1932, 71, 71, 71, 71, 1934, 1936, 71, 1926, 1937, - 1927, 71, 71, 71, 1928, 1929, 71, 1933, 1930, 71, - 1939, 1931, 1938, 1940, 1935, 71, 1941, 1932, 71, 2598, - 1942, 71, 1934, 1936, 71, 1948, 1937, 1943, 1944, 1946, - 71, 1945, 71, 1950, 1949, 1952, 1951, 1939, 71, 1938, - 1940, 71, 71, 1941, 2598, 71, 71, 1942, 71, 71, - - 1959, 71, 1948, 2598, 1943, 1944, 1946, 1953, 1945, 1957, - 1950, 1949, 71, 1951, 1955, 1954, 1956, 71, 1958, 1960, - 71, 71, 1961, 1962, 1963, 1964, 1967, 71, 2598, 71, - 1966, 71, 1965, 71, 1953, 71, 1957, 71, 71, 1970, - 71, 1955, 1954, 1956, 1974, 1958, 1960, 71, 71, 1961, - 1962, 1963, 1964, 1967, 71, 1968, 1969, 1966, 1971, 1965, - 1972, 1975, 71, 1976, 1973, 1977, 71, 2598, 1978, 1981, - 2598, 71, 1982, 1979, 1983, 2598, 71, 71, 71, 1984, - 1985, 1995, 1968, 1969, 71, 71, 71, 1972, 71, 1980, - 71, 1973, 1977, 71, 71, 1978, 1981, 71, 71, 1982, - - 1979, 1983, 71, 71, 1986, 1987, 1984, 71, 1989, 1991, - 1988, 1990, 71, 71, 1993, 71, 1980, 1992, 71, 1997, - 1994, 71, 71, 1998, 1996, 2000, 71, 1999, 71, 2001, - 2009, 1986, 1987, 71, 71, 1989, 1991, 1988, 1990, 2002, - 71, 1993, 71, 2004, 1992, 71, 1997, 1994, 71, 71, - 1998, 1996, 2003, 2005, 1999, 2007, 2001, 71, 2006, 71, - 2008, 2010, 71, 2011, 71, 71, 2002, 2013, 2012, 71, - 2004, 2015, 2017, 2018, 2016, 2014, 71, 71, 2019, 2003, - 2005, 71, 2007, 71, 71, 2006, 71, 2008, 2010, 2020, - 71, 2023, 2021, 71, 71, 2012, 71, 2024, 2015, 71, - - 71, 2016, 2014, 71, 2022, 71, 2025, 2026, 2027, 71, - 71, 2028, 2031, 71, 2029, 71, 2020, 2030, 2023, 2021, - 2032, 71, 2034, 71, 2024, 2035, 71, 2033, 71, 71, - 2038, 2022, 2598, 2025, 71, 2027, 71, 2036, 2037, 71, - 2039, 2029, 2042, 71, 2030, 2040, 2041, 2032, 71, 2034, - 2043, 2044, 71, 71, 2033, 71, 2045, 2038, 71, 71, - 71, 2046, 2047, 2106, 2036, 2037, 2048, 2039, 71, 71, - 2049, 71, 2040, 2041, 2051, 2050, 71, 71, 71, 2052, - 2053, 2058, 2598, 71, 2054, 2055, 2060, 2598, 2046, 2047, - 71, 2057, 71, 2048, 2056, 71, 71, 2049, 71, 71, - - 2598, 71, 2050, 71, 2061, 71, 71, 71, 2058, 71, - 2059, 2054, 2055, 71, 2062, 71, 2063, 71, 2057, 2064, - 2069, 2056, 71, 71, 2065, 2066, 2068, 71, 2067, 2072, - 2070, 2061, 71, 71, 71, 2073, 2071, 2059, 71, 71, - 2074, 2062, 71, 2063, 71, 71, 2064, 2069, 2075, 2076, - 2077, 2065, 2066, 2068, 71, 2067, 2072, 2070, 2078, 2079, - 2082, 71, 2073, 2071, 71, 2080, 2083, 2074, 2081, 71, - 2084, 71, 71, 2085, 2086, 2075, 2076, 2077, 71, 2087, - 71, 2088, 71, 71, 71, 71, 71, 2082, 71, 2089, - 2091, 71, 2080, 2083, 71, 2081, 2090, 2084, 2092, 71, - - 2085, 2086, 2093, 71, 2094, 2095, 2087, 71, 2088, 2096, - 2097, 2100, 2101, 2098, 2099, 2104, 2089, 2091, 71, 71, - 71, 71, 71, 2090, 71, 2092, 71, 2103, 2105, 71, - 2598, 2094, 71, 71, 2102, 71, 2096, 2097, 2100, 2101, - 2098, 2099, 71, 2107, 2108, 71, 2110, 2113, 2598, 2109, - 2114, 2111, 71, 2112, 2103, 71, 71, 71, 71, 2115, - 71, 2102, 2116, 2117, 2118, 2119, 2598, 2598, 71, 71, - 2107, 2108, 71, 2110, 2113, 71, 2109, 2114, 2111, 2123, - 2112, 2120, 2124, 71, 2125, 2121, 71, 71, 71, 2116, - 71, 2118, 2119, 71, 2122, 2126, 71, 2127, 2129, 2131, - - 2128, 71, 2132, 71, 71, 2130, 2123, 2133, 2120, 71, - 71, 2125, 2121, 2134, 71, 2135, 71, 2137, 2136, 2139, - 71, 2122, 2126, 71, 71, 2129, 71, 2128, 71, 2132, - 2138, 2140, 2130, 71, 2133, 2141, 2598, 2142, 71, 2148, - 2134, 2144, 71, 2143, 71, 2136, 71, 2145, 71, 2146, - 2147, 2149, 71, 71, 2598, 71, 2150, 2138, 2140, 2157, - 2154, 71, 71, 71, 2142, 2152, 2148, 71, 2144, 2153, - 2143, 2151, 71, 71, 2145, 71, 2146, 2147, 2149, 71, - 2155, 71, 71, 2150, 71, 2156, 71, 2154, 2158, 2159, - 2161, 2160, 2152, 2163, 2162, 2598, 2153, 71, 2151, 71, - - 2164, 2167, 71, 71, 2165, 2168, 2169, 2155, 2166, 71, - 2170, 2176, 2156, 71, 2171, 71, 2159, 2161, 2160, 2177, - 71, 2162, 71, 71, 71, 71, 2174, 2164, 2167, 2172, - 71, 2165, 71, 71, 2173, 2166, 2175, 2170, 71, 2179, - 2178, 2171, 71, 71, 2180, 2181, 2177, 2182, 71, 2184, - 2183, 2598, 2598, 2174, 2598, 2598, 71, 71, 71, 2185, - 2186, 71, 71, 2175, 71, 71, 2179, 2178, 2191, 71, - 2187, 2180, 2181, 71, 2182, 2188, 2184, 2183, 2189, 71, - 2190, 71, 71, 2192, 2193, 2196, 2185, 2186, 2598, 71, - 2198, 2195, 71, 2194, 71, 2191, 71, 2187, 71, 71, - - 71, 71, 2188, 2199, 2200, 2189, 2197, 2190, 71, 2204, - 2192, 2193, 71, 2201, 71, 71, 2202, 2198, 2195, 2203, - 2194, 71, 2205, 2206, 2598, 2207, 71, 2598, 71, 2208, - 2199, 71, 71, 2197, 2210, 2209, 2204, 2211, 2598, 2214, - 2201, 2215, 2212, 2202, 71, 2213, 2203, 2216, 71, 2217, - 71, 71, 2207, 71, 71, 71, 2208, 71, 2218, 2222, - 71, 2210, 2209, 2219, 2211, 71, 2214, 2221, 71, 2212, - 71, 2220, 2213, 2223, 71, 2224, 71, 2225, 71, 2226, - 2227, 2229, 2230, 2228, 2231, 71, 71, 2232, 2233, 2234, - 2219, 71, 2598, 71, 2221, 71, 2235, 71, 2220, 71, - - 71, 2236, 2224, 2240, 71, 71, 2226, 71, 71, 2230, - 2228, 2231, 71, 2237, 2238, 71, 2234, 71, 2239, 71, - 2241, 71, 2244, 2243, 71, 71, 2245, 2242, 71, 71, - 2240, 2247, 2246, 2248, 2598, 71, 2598, 2249, 2598, 2598, - 2237, 2238, 2256, 2252, 2598, 2239, 71, 2598, 71, 71, - 2243, 71, 71, 2245, 2242, 71, 2250, 2251, 2247, 2246, - 2248, 71, 2253, 2255, 2249, 71, 71, 2254, 2258, 71, - 2252, 71, 2257, 2259, 71, 2260, 71, 2261, 2598, 2262, - 71, 71, 2263, 2250, 2251, 2264, 2266, 71, 2265, 2253, - 2255, 2267, 71, 71, 2254, 2258, 71, 2598, 2268, 2257, - - 2259, 71, 2260, 71, 2261, 71, 2262, 2269, 71, 2263, - 71, 2271, 2264, 2266, 71, 2265, 71, 2270, 2267, 2272, - 2273, 2274, 2275, 2276, 71, 2268, 2279, 2278, 2280, 71, - 2277, 2284, 2598, 2281, 2269, 71, 2285, 2288, 71, 2283, - 2282, 2598, 71, 71, 2270, 71, 2272, 2273, 71, 2275, - 71, 71, 71, 2279, 2278, 71, 71, 2277, 71, 2286, - 2281, 2287, 2289, 71, 71, 2294, 2283, 2282, 2290, 2291, - 2292, 71, 2293, 71, 2295, 2296, 2297, 2300, 71, 71, - 71, 2298, 2301, 71, 2299, 71, 2286, 71, 2287, 2289, - 2302, 2307, 2294, 71, 2303, 2290, 2291, 2292, 71, 2293, - - 71, 2295, 2296, 2297, 71, 2306, 2304, 71, 2298, 71, - 2305, 2299, 71, 71, 2308, 2310, 2309, 71, 71, 2311, - 2312, 2303, 2313, 71, 2315, 2314, 71, 71, 71, 2598, - 2317, 2318, 2306, 2304, 71, 2320, 71, 2305, 71, 71, - 2321, 2308, 71, 2309, 71, 2322, 2311, 2312, 2316, 2313, - 71, 2319, 2314, 2323, 71, 2324, 71, 71, 2318, 71, - 2325, 2326, 71, 71, 2327, 2329, 71, 2321, 2328, 71, - 2330, 71, 2322, 71, 2332, 2316, 71, 2331, 2319, 2333, - 2323, 2335, 2324, 71, 2338, 71, 2341, 2325, 2326, 2336, - 71, 2327, 2329, 2334, 71, 2328, 2337, 71, 2339, 71, - - 71, 71, 2342, 2340, 2331, 71, 71, 71, 71, 2343, - 2344, 71, 2345, 2341, 2346, 71, 2336, 2347, 71, 2348, - 2334, 2352, 71, 2337, 2349, 2339, 71, 2350, 71, 2342, - 2340, 2351, 71, 2353, 2355, 71, 2343, 2344, 71, 71, - 2354, 71, 71, 2356, 2347, 2357, 2348, 2358, 71, 71, - 71, 2349, 2359, 2360, 2350, 2361, 2362, 71, 2351, 2363, - 2353, 2355, 2365, 2364, 71, 2368, 71, 2354, 2369, 2371, - 2356, 71, 2370, 2372, 71, 2598, 71, 71, 71, 2359, - 71, 71, 2361, 2362, 2373, 71, 2363, 2366, 2367, 2374, - 2364, 2375, 71, 2376, 71, 71, 71, 71, 2377, 2370, - - 71, 2378, 71, 2380, 2379, 2382, 71, 2383, 2384, 2381, - 71, 2373, 2386, 71, 2366, 2367, 2374, 71, 2375, 71, - 71, 2388, 2387, 2389, 2385, 71, 71, 2391, 71, 2390, - 71, 2379, 2382, 71, 2383, 71, 2381, 71, 2392, 2386, - 71, 2393, 71, 2398, 2394, 71, 2395, 2396, 71, 2387, - 2389, 2385, 2405, 71, 71, 2397, 2390, 71, 71, 71, - 2399, 2400, 2402, 71, 2401, 2392, 71, 2411, 71, 71, - 2398, 2394, 71, 2395, 2396, 2404, 2403, 71, 2409, 2405, - 71, 71, 2397, 71, 71, 2406, 2407, 2399, 2400, 2402, - 2408, 2401, 2410, 2412, 71, 71, 71, 2414, 2413, 71, - - 71, 2415, 2404, 2403, 2418, 2409, 2419, 2420, 2422, 2421, - 2423, 2598, 2406, 2407, 2425, 2424, 71, 2408, 2428, 2410, - 71, 71, 71, 2426, 71, 2413, 71, 71, 71, 2427, - 71, 2418, 71, 71, 2420, 71, 2421, 2423, 71, 2429, - 2430, 2425, 2424, 2431, 71, 2428, 2432, 71, 2435, 2439, - 2426, 2433, 2437, 2436, 2434, 71, 2427, 2598, 2438, 2440, - 71, 71, 2444, 2445, 2446, 71, 71, 71, 71, 71, - 2431, 2441, 2442, 2432, 2443, 2447, 2439, 2448, 2433, 2449, - 71, 2434, 71, 2450, 71, 2438, 2440, 2451, 2452, 71, - 71, 71, 2453, 71, 71, 2454, 2455, 71, 2441, 2442, - - 71, 2443, 71, 2456, 71, 2458, 2449, 71, 71, 2457, - 71, 2459, 71, 2460, 71, 2452, 2461, 2462, 71, 2453, - 2463, 71, 2454, 2455, 2464, 71, 2465, 2466, 2598, 71, - 71, 2469, 2458, 2467, 2468, 71, 2457, 71, 2459, 71, - 2460, 71, 71, 2461, 2462, 71, 2470, 2471, 71, 2472, - 71, 2464, 71, 2465, 2466, 71, 71, 2477, 2469, 2473, - 2467, 2468, 2474, 2475, 2480, 2476, 71, 2479, 2478, 2481, - 71, 2598, 71, 2470, 2471, 2488, 2472, 71, 71, 71, - 71, 2484, 71, 71, 2477, 2489, 2473, 71, 2482, 2474, - 2475, 2480, 2476, 71, 2479, 2478, 2481, 71, 2483, 2485, - - 2486, 2487, 71, 71, 2490, 2598, 2491, 71, 2484, 71, - 2492, 71, 2489, 2493, 71, 2482, 2494, 2496, 2598, 2499, - 2497, 71, 2495, 2498, 71, 2483, 2485, 2486, 2487, 71, - 2501, 71, 71, 2491, 2503, 2598, 2500, 71, 2502, 2511, - 71, 71, 71, 2494, 2496, 71, 2499, 2497, 71, 2495, - 2498, 71, 2504, 2507, 2505, 2506, 2512, 2508, 2509, 2510, - 71, 71, 71, 2500, 71, 2502, 71, 71, 2515, 2518, - 2598, 71, 2520, 2598, 2513, 2514, 71, 71, 2517, 2504, - 71, 2505, 2506, 71, 2508, 2509, 2510, 71, 71, 71, - 2516, 71, 71, 2519, 71, 2515, 2518, 71, 2521, 2520, - - 71, 2513, 2514, 2524, 2522, 2517, 71, 2523, 2598, 2529, - 2525, 71, 2532, 2526, 2527, 2531, 2528, 2516, 71, 2536, - 2519, 71, 2530, 71, 71, 2521, 2533, 71, 2534, 2535, - 2524, 2522, 71, 2537, 2523, 71, 71, 2525, 71, 2532, - 2526, 2527, 2538, 2528, 71, 2539, 2536, 71, 71, 2530, - 71, 71, 2540, 2533, 2541, 2534, 2535, 2542, 2543, 2544, - 2545, 2548, 71, 2546, 71, 71, 71, 71, 2547, 2538, - 2549, 71, 71, 2550, 2552, 71, 2551, 71, 2556, 2540, - 2598, 2541, 71, 2598, 2542, 2543, 2544, 71, 2548, 2557, - 2546, 71, 71, 2555, 2553, 2547, 71, 71, 2554, 2558, - - 2550, 2552, 71, 2551, 71, 2556, 71, 71, 2559, 71, - 2560, 71, 2562, 71, 2561, 2566, 2557, 2563, 2564, 2567, - 2555, 2553, 71, 71, 2569, 2554, 2558, 2565, 2568, 2570, - 2598, 2598, 2571, 2572, 2576, 2559, 71, 2560, 71, 2562, - 71, 2561, 2566, 71, 2563, 2564, 71, 71, 2574, 71, - 71, 2569, 71, 71, 2565, 2568, 71, 2573, 2575, 2571, - 2572, 71, 2598, 2577, 2578, 71, 71, 2579, 2580, 2581, - 71, 71, 2582, 2583, 2584, 2574, 71, 71, 2586, 2585, - 2587, 2589, 71, 2588, 2573, 2575, 71, 71, 2590, 71, - 2577, 2578, 2591, 2596, 2579, 2580, 2581, 2598, 71, 2582, - - 71, 2584, 2592, 71, 71, 2586, 2585, 71, 71, 2593, - 2588, 2597, 71, 2594, 2595, 71, 2598, 2598, 2598, 2591, - 71, 71, 71, 2598, 71, 2598, 2598, 2598, 2598, 2592, - 2598, 71, 2598, 2598, 2598, 2598, 2593, 2598, 71, 2598, - 2594, 2595, 43, 43, 43, 43, 43, 43, 43, 48, - 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, - 53, 53, 53, 59, 59, 59, 59, 59, 59, 59, - 64, 64, 64, 64, 64, 64, 64, 74, 74, 2598, - 74, 74, 74, 74, 140, 140, 2598, 2598, 2598, 140, - 140, 142, 142, 2598, 2598, 142, 2598, 142, 144, 2598, - - 2598, 2598, 2598, 2598, 144, 147, 147, 2598, 2598, 2598, - 147, 147, 149, 2598, 2598, 2598, 2598, 2598, 149, 151, - 151, 2598, 151, 151, 151, 151, 75, 75, 2598, 75, - 75, 75, 75, 13, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598 + 946, 71, 472, 71, 71, 71, 447, 432, 448, 449, + 461, 71, 436, 71, 71, 2630, 438, 450, 439, 453, + 433, 71, 71, 434, 451, 435, 440, 441, 474, 442, + 71, 71, 71, 447, 462, 448, 449, 461, 463, 465, + + 452, 71, 443, 464, 450, 444, 453, 445, 71, 446, + 471, 451, 71, 71, 441, 474, 442, 466, 477, 468, + 71, 462, 71, 150, 2630, 467, 465, 452, 473, 443, + 71, 71, 444, 71, 445, 71, 446, 454, 455, 469, + 470, 2630, 71, 483, 466, 477, 468, 456, 71, 457, + 458, 459, 467, 478, 460, 473, 479, 71, 480, 475, + 71, 482, 71, 71, 454, 455, 469, 470, 476, 485, + 71, 481, 484, 71, 456, 71, 457, 458, 459, 71, + 478, 460, 490, 479, 71, 480, 487, 486, 482, 498, + 488, 71, 71, 71, 489, 476, 485, 494, 481, 484, + + 71, 491, 492, 2630, 71, 71, 493, 496, 71, 490, + 497, 495, 71, 71, 486, 501, 498, 488, 71, 502, + 71, 489, 71, 504, 494, 499, 509, 513, 503, 2630, + 71, 71, 71, 493, 496, 71, 505, 497, 495, 71, + 500, 71, 501, 506, 71, 511, 502, 510, 71, 71, + 504, 517, 499, 509, 507, 503, 508, 512, 514, 71, + 2630, 71, 524, 505, 71, 515, 516, 500, 71, 71, + 506, 519, 511, 71, 510, 71, 520, 521, 517, 523, + 518, 507, 522, 508, 512, 514, 71, 71, 525, 71, + 71, 527, 515, 516, 71, 526, 71, 71, 519, 71, + + 534, 71, 528, 520, 521, 71, 523, 518, 529, 522, + 530, 71, 531, 71, 535, 525, 532, 71, 527, 533, + 71, 71, 526, 71, 536, 540, 71, 534, 537, 528, + 71, 71, 538, 543, 539, 529, 71, 530, 541, 531, + 71, 535, 71, 532, 71, 1168, 533, 548, 71, 549, + 542, 536, 540, 547, 71, 537, 71, 71, 71, 538, + 543, 539, 544, 546, 545, 541, 71, 71, 550, 552, + 71, 71, 551, 71, 555, 560, 549, 542, 553, 71, + 547, 554, 71, 557, 2630, 556, 558, 606, 71, 544, + 546, 545, 71, 561, 71, 563, 552, 71, 562, 551, + + 71, 71, 560, 71, 564, 553, 71, 71, 554, 559, + 557, 565, 556, 567, 566, 71, 569, 568, 71, 71, + 561, 578, 563, 2630, 71, 562, 71, 71, 71, 71, + 577, 564, 580, 71, 581, 71, 559, 71, 565, 582, + 567, 566, 579, 569, 568, 570, 583, 584, 578, 585, + 571, 71, 572, 71, 588, 71, 71, 577, 71, 580, + 573, 581, 589, 574, 575, 71, 582, 71, 71, 579, + 576, 71, 570, 583, 584, 586, 585, 571, 591, 572, + 2630, 588, 592, 595, 71, 587, 71, 573, 590, 589, + 574, 575, 593, 597, 594, 71, 596, 576, 71, 600, + + 599, 71, 602, 2630, 71, 591, 71, 71, 71, 592, + 595, 598, 587, 603, 71, 590, 71, 71, 71, 593, + 597, 594, 71, 596, 601, 604, 600, 599, 609, 602, + 605, 607, 71, 608, 71, 610, 71, 611, 598, 617, + 603, 612, 613, 71, 616, 71, 71, 614, 71, 71, + 71, 601, 604, 150, 615, 609, 618, 605, 607, 620, + 608, 71, 610, 71, 611, 71, 71, 619, 612, 613, + 621, 616, 622, 624, 614, 623, 634, 625, 628, 71, + 637, 615, 71, 632, 633, 71, 635, 71, 71, 71, + 636, 71, 675, 629, 619, 71, 71, 621, 630, 622, + + 624, 71, 623, 626, 625, 628, 627, 631, 71, 638, + 71, 71, 71, 71, 71, 71, 639, 71, 640, 71, + 641, 71, 642, 643, 644, 71, 71, 71, 646, 645, + 626, 647, 71, 627, 631, 648, 638, 649, 71, 71, + 651, 650, 653, 639, 71, 640, 71, 641, 71, 642, + 643, 644, 71, 652, 71, 71, 645, 658, 647, 71, + 71, 654, 648, 665, 649, 657, 655, 659, 650, 653, + 656, 664, 71, 660, 71, 71, 71, 661, 662, 2630, + 652, 71, 666, 71, 658, 71, 663, 672, 654, 667, + 665, 71, 657, 655, 659, 71, 669, 656, 71, 71, + + 660, 71, 670, 71, 661, 662, 71, 676, 671, 666, + 673, 668, 71, 663, 672, 674, 667, 677, 71, 71, + 679, 678, 71, 669, 71, 71, 680, 681, 71, 670, + 685, 682, 71, 686, 676, 671, 71, 673, 668, 683, + 684, 687, 674, 71, 677, 688, 689, 71, 678, 71, + 697, 71, 71, 680, 681, 71, 690, 685, 682, 691, + 693, 71, 694, 71, 692, 71, 683, 684, 687, 703, + 71, 695, 696, 689, 71, 699, 71, 71, 71, 71, + 698, 700, 71, 690, 705, 701, 2630, 693, 71, 694, + 704, 71, 706, 71, 708, 2630, 2630, 707, 695, 696, + + 702, 71, 699, 71, 710, 71, 71, 698, 700, 71, + 711, 705, 701, 709, 712, 71, 713, 704, 71, 714, + 71, 708, 716, 715, 71, 71, 717, 702, 71, 71, + 71, 710, 71, 71, 718, 720, 719, 711, 725, 71, + 709, 712, 721, 713, 722, 723, 714, 71, 726, 716, + 715, 71, 71, 717, 71, 724, 71, 71, 727, 729, + 71, 718, 720, 719, 728, 730, 71, 71, 71, 721, + 71, 722, 723, 732, 71, 726, 733, 2630, 734, 731, + 2630, 71, 724, 737, 735, 727, 729, 71, 71, 71, + 736, 728, 730, 738, 740, 741, 742, 739, 71, 71, + + 732, 749, 71, 733, 71, 734, 731, 71, 71, 71, + 737, 735, 743, 744, 745, 71, 71, 736, 747, 71, + 738, 740, 741, 742, 739, 746, 748, 71, 749, 750, + 751, 754, 753, 71, 71, 752, 71, 755, 756, 743, + 744, 745, 71, 757, 761, 747, 71, 71, 71, 764, + 71, 71, 746, 748, 150, 71, 750, 751, 754, 753, + 71, 71, 752, 758, 755, 756, 759, 760, 767, 762, + 757, 71, 766, 71, 765, 71, 71, 763, 768, 71, + 71, 772, 770, 769, 773, 71, 2630, 2630, 2630, 771, + 758, 792, 71, 759, 760, 71, 762, 71, 71, 766, + + 71, 765, 784, 71, 763, 768, 71, 782, 774, 770, + 769, 773, 775, 71, 71, 776, 771, 71, 783, 71, + 71, 786, 71, 71, 789, 785, 2630, 787, 71, 784, + 2630, 2630, 788, 2630, 782, 774, 790, 804, 2630, 775, + 71, 805, 776, 777, 71, 783, 71, 778, 786, 71, + 779, 789, 785, 71, 787, 791, 800, 780, 71, 788, + 781, 71, 71, 790, 804, 71, 801, 2630, 71, 2630, + 777, 802, 71, 803, 778, 71, 806, 779, 71, 830, + 71, 807, 791, 800, 780, 808, 811, 781, 793, 794, + 2630, 795, 2630, 801, 796, 810, 71, 71, 802, 797, + + 803, 809, 812, 806, 814, 798, 799, 71, 807, 813, + 71, 71, 808, 811, 71, 793, 794, 71, 795, 71, + 816, 796, 810, 820, 71, 819, 797, 71, 809, 812, + 815, 814, 798, 799, 71, 817, 813, 818, 71, 821, + 822, 824, 71, 71, 71, 71, 823, 816, 825, 71, + 820, 71, 819, 71, 826, 71, 71, 815, 827, 831, + 829, 832, 817, 828, 818, 833, 821, 822, 824, 836, + 71, 839, 837, 823, 834, 825, 835, 838, 71, 71, + 840, 71, 71, 843, 841, 71, 71, 829, 832, 842, + 71, 71, 833, 71, 71, 71, 836, 71, 839, 837, + + 845, 834, 71, 835, 838, 844, 846, 71, 71, 847, + 848, 841, 850, 71, 849, 71, 842, 851, 71, 852, + 2630, 71, 853, 854, 71, 2630, 861, 845, 71, 856, + 71, 71, 844, 846, 71, 71, 847, 848, 71, 850, + 860, 849, 857, 855, 851, 71, 852, 71, 71, 853, + 854, 71, 858, 71, 2630, 862, 856, 864, 863, 865, + 859, 71, 2630, 71, 866, 71, 71, 860, 867, 857, + 855, 71, 869, 71, 868, 870, 71, 2630, 874, 858, + 71, 71, 862, 871, 864, 863, 865, 859, 872, 873, + 71, 866, 71, 71, 878, 867, 71, 877, 71, 869, + + 875, 868, 870, 885, 876, 874, 879, 71, 71, 883, + 871, 880, 881, 71, 71, 872, 873, 71, 71, 71, + 890, 71, 887, 882, 877, 884, 889, 875, 886, 71, + 71, 876, 71, 879, 891, 71, 883, 888, 880, 881, + 894, 71, 71, 71, 71, 892, 898, 890, 896, 897, + 882, 895, 884, 893, 71, 886, 899, 71, 71, 901, + 71, 891, 71, 900, 888, 71, 903, 894, 906, 902, + 71, 908, 892, 898, 71, 896, 71, 71, 895, 904, + 893, 71, 905, 899, 909, 907, 912, 910, 71, 2630, + 900, 71, 71, 71, 71, 150, 902, 71, 908, 914, + + 911, 943, 71, 915, 71, 924, 904, 71, 71, 905, + 71, 909, 907, 912, 910, 913, 71, 916, 925, 917, + 2630, 926, 71, 71, 71, 71, 914, 911, 943, 928, + 915, 71, 924, 71, 927, 930, 71, 931, 932, 929, + 2630, 71, 913, 933, 916, 925, 917, 918, 926, 919, + 71, 71, 71, 920, 934, 921, 928, 71, 2630, 2630, + 922, 927, 930, 935, 931, 923, 929, 71, 2630, 937, + 71, 71, 936, 939, 918, 940, 919, 941, 944, 938, + 920, 934, 921, 71, 71, 942, 71, 922, 71, 945, + 935, 71, 923, 947, 949, 71, 937, 948, 71, 936, + + 939, 957, 940, 71, 941, 71, 938, 956, 2630, 960, + 71, 968, 942, 2630, 958, 959, 71, 2630, 2630, 962, + 2630, 949, 71, 71, 948, 71, 950, 71, 957, 966, + 71, 951, 961, 952, 956, 71, 960, 963, 71, 964, + 965, 958, 959, 71, 953, 954, 962, 71, 71, 969, + 71, 955, 71, 950, 71, 970, 71, 967, 951, 961, + 952, 971, 972, 71, 963, 973, 964, 965, 975, 974, + 978, 953, 954, 71, 977, 71, 969, 71, 955, 976, + 71, 979, 970, 980, 967, 71, 71, 71, 971, 981, + 983, 71, 973, 982, 71, 975, 974, 71, 984, 71, + + 71, 977, 71, 71, 985, 71, 976, 987, 979, 986, + 980, 71, 998, 988, 991, 989, 981, 983, 990, 996, + 982, 992, 71, 71, 71, 984, 71, 71, 71, 993, + 994, 985, 995, 71, 997, 999, 986, 71, 1001, 71, + 988, 991, 989, 1002, 71, 990, 996, 1000, 992, 71, + 1003, 71, 71, 1004, 71, 1005, 993, 994, 71, 995, + 71, 997, 999, 1008, 1007, 1006, 1011, 1009, 1012, 1013, + 71, 71, 71, 1010, 1000, 71, 71, 1003, 71, 71, + 1004, 71, 1005, 1014, 1016, 71, 1017, 1015, 1018, 1021, + 1008, 1007, 1006, 71, 1009, 1012, 1019, 1020, 71, 71, + + 1010, 71, 1025, 1026, 71, 1022, 71, 71, 71, 1023, + 1014, 1016, 1024, 1017, 1015, 1018, 1021, 1027, 71, 71, + 71, 1029, 1028, 1019, 1020, 1034, 71, 1033, 1030, 1035, + 71, 71, 1022, 71, 71, 71, 1023, 71, 1031, 1024, + 1032, 71, 1036, 1038, 1027, 71, 71, 71, 1029, 1028, + 1037, 1039, 71, 1040, 1033, 1030, 1041, 71, 71, 1043, + 1044, 71, 1042, 1049, 71, 1031, 1045, 1032, 71, 1036, + 1038, 1050, 71, 1047, 1052, 1046, 2630, 1037, 1039, 1048, + 71, 1053, 71, 71, 71, 71, 1043, 1044, 2630, 1042, + 71, 71, 1051, 1045, 71, 71, 71, 1054, 1055, 1056, + + 1047, 1052, 1046, 71, 71, 71, 1048, 1058, 71, 1059, + 1060, 71, 1062, 1061, 71, 71, 71, 1063, 71, 1051, + 71, 1065, 1064, 1066, 1054, 1055, 1056, 71, 1068, 1067, + 1069, 1071, 1072, 71, 1058, 71, 1059, 1060, 71, 1062, + 1061, 1074, 2630, 1073, 71, 1070, 71, 1075, 1065, 1064, + 1066, 71, 71, 1078, 1076, 1068, 1067, 71, 1077, 1081, + 1084, 1079, 2630, 71, 71, 71, 71, 71, 1074, 71, + 1073, 71, 1070, 71, 1075, 71, 1080, 1082, 1085, 71, + 1078, 1076, 1083, 1086, 71, 1077, 1081, 71, 1079, 71, + 71, 71, 71, 1087, 1088, 2630, 1093, 1089, 1095, 1096, + + 1124, 71, 2630, 1080, 1082, 1085, 1090, 1094, 1091, 1083, + 1086, 1092, 71, 1097, 71, 2630, 1104, 1100, 71, 71, + 1087, 1088, 71, 1093, 1089, 1095, 1096, 1098, 1099, 71, + 1102, 1105, 71, 1090, 1094, 1091, 71, 71, 1092, 71, + 1097, 1101, 1103, 71, 1100, 1107, 71, 1108, 1109, 71, + 71, 2630, 71, 71, 1098, 1099, 1106, 1102, 1105, 1110, + 1114, 1112, 2630, 71, 1115, 1111, 71, 71, 1101, 1103, + 71, 71, 1107, 71, 1108, 1109, 71, 1113, 1117, 71, + 71, 1119, 1116, 1106, 71, 1118, 1110, 1114, 1112, 71, + 71, 1115, 1111, 1121, 71, 1120, 1122, 1123, 1125, 1126, + + 71, 1129, 71, 71, 1113, 1117, 1127, 71, 1119, 1116, + 1128, 71, 1118, 71, 1130, 71, 71, 1133, 71, 1131, + 1121, 1132, 1120, 1122, 1123, 1125, 1126, 1134, 1129, 71, + 71, 1135, 71, 1127, 1144, 2630, 1158, 1128, 1142, 2630, + 2630, 71, 1143, 1147, 1133, 1145, 71, 1159, 1132, 2630, + 2630, 2630, 71, 1146, 1134, 2630, 1148, 71, 1135, 1136, + 71, 71, 1137, 1138, 2630, 1142, 71, 1139, 71, 1143, + 1147, 71, 1145, 1140, 1149, 71, 1150, 1141, 71, 71, + 1146, 71, 1151, 1148, 1152, 1153, 1136, 1154, 1155, 1137, + 1138, 1160, 71, 1161, 1139, 1156, 71, 1167, 1157, 2630, + + 1140, 1149, 71, 1150, 1141, 71, 71, 71, 71, 1151, + 71, 1152, 1153, 71, 1154, 1155, 71, 2630, 1160, 1170, + 1161, 1172, 1156, 71, 1167, 1157, 1162, 1169, 1171, 1173, + 71, 1163, 1179, 1164, 1174, 1165, 1176, 1166, 1178, 1175, + 71, 71, 71, 71, 71, 1177, 1170, 71, 1172, 1180, + 71, 71, 1182, 1162, 1169, 1171, 1173, 71, 1163, 1179, + 1164, 1181, 1165, 1176, 1166, 1178, 71, 71, 1183, 71, + 1184, 71, 1177, 1185, 1187, 1186, 1180, 1189, 1188, 1182, + 71, 71, 1190, 71, 1191, 1192, 71, 2630, 1181, 1193, + 1197, 1194, 71, 71, 2630, 1183, 71, 1184, 1195, 71, + + 1185, 1187, 1186, 1198, 1189, 1188, 1199, 1200, 1203, 71, + 71, 1191, 71, 1196, 71, 71, 1193, 71, 1194, 1205, + 71, 71, 1201, 1207, 1204, 1195, 1202, 1206, 71, 71, + 1198, 71, 71, 71, 1200, 71, 1208, 1209, 1211, 1210, + 1196, 71, 2630, 1219, 1214, 71, 1205, 1212, 71, 1201, + 1207, 1204, 1216, 1202, 1206, 1213, 1217, 71, 1215, 71, + 71, 71, 1220, 1208, 1209, 1211, 1210, 71, 1221, 71, + 71, 1214, 1218, 71, 1212, 71, 71, 71, 1222, 1216, + 1223, 1224, 1213, 1217, 1225, 1215, 71, 1226, 1229, 71, + 71, 1232, 71, 1230, 71, 1221, 1227, 1228, 71, 1218, + + 71, 1231, 1233, 71, 71, 1237, 2630, 1223, 1224, 1236, + 71, 1225, 71, 1234, 71, 1229, 71, 1238, 1232, 1235, + 71, 1240, 1239, 1227, 1228, 71, 71, 1242, 1241, 71, + 71, 71, 1237, 71, 71, 71, 1236, 1244, 1245, 1246, + 1234, 1243, 1252, 71, 1238, 1247, 1235, 71, 1240, 1239, + 71, 1249, 1248, 1251, 1242, 1241, 1250, 1253, 2630, 71, + 71, 71, 1254, 1259, 1244, 71, 1246, 71, 1243, 1252, + 71, 71, 1247, 1255, 71, 1257, 1256, 1261, 1258, 1248, + 1251, 1260, 2630, 71, 1253, 71, 2630, 1262, 71, 1254, + 1259, 1263, 1292, 1264, 71, 1265, 71, 71, 1270, 1267, + + 1255, 71, 1257, 1256, 1266, 1258, 1268, 71, 1260, 71, + 71, 71, 1269, 71, 1262, 71, 1272, 1273, 1263, 71, + 1264, 71, 1265, 1271, 71, 1270, 1267, 1274, 1278, 1275, + 1276, 1266, 71, 1268, 2630, 1279, 71, 71, 1277, 1269, + 71, 71, 71, 1272, 1273, 71, 71, 71, 1280, 1282, + 1271, 1281, 1283, 2630, 1274, 1278, 1275, 1276, 1284, 71, + 71, 1285, 1279, 1286, 2630, 1277, 1287, 1290, 1289, 1291, + 71, 71, 71, 71, 1288, 1280, 1282, 1293, 1281, 1283, + 71, 71, 2630, 2630, 1294, 1284, 71, 1295, 1285, 71, + 1286, 71, 71, 1287, 1290, 1289, 1291, 1296, 1297, 1298, + + 1302, 1288, 1300, 1299, 1301, 2630, 1303, 2630, 2630, 71, + 71, 1294, 71, 71, 1295, 71, 71, 71, 1305, 1306, + 71, 71, 2630, 1307, 71, 1297, 1298, 1302, 1304, 1300, + 1299, 1301, 71, 1303, 1308, 71, 71, 71, 1309, 1311, + 1313, 71, 71, 1310, 1312, 1305, 1306, 71, 1314, 1315, + 1307, 1316, 1319, 1317, 1318, 1304, 71, 71, 1321, 71, + 71, 1308, 1322, 71, 1320, 71, 71, 1313, 1323, 1324, + 71, 71, 1334, 2630, 1325, 1314, 1315, 71, 1316, 1326, + 1317, 1318, 71, 71, 71, 1321, 1327, 71, 1331, 1322, + 1328, 1320, 1329, 1330, 71, 1333, 1324, 1332, 71, 71, + + 71, 1325, 1336, 71, 1335, 71, 1326, 2630, 2630, 1337, + 71, 2630, 1338, 1327, 71, 1331, 1343, 1328, 1339, 1329, + 1330, 71, 1333, 71, 1332, 71, 71, 1345, 1344, 1336, + 71, 1335, 71, 1340, 71, 1346, 1337, 1341, 71, 1338, + 71, 1347, 2630, 1343, 1348, 1339, 71, 1349, 2630, 1350, + 1342, 1356, 1351, 1355, 1345, 1344, 1352, 2630, 71, 1358, + 1340, 1353, 1346, 71, 1341, 71, 71, 1359, 71, 71, + 71, 1348, 71, 1354, 1349, 71, 1350, 1342, 71, 1351, + 71, 1357, 1361, 1352, 1360, 71, 1358, 2630, 1353, 71, + 71, 1362, 1363, 1364, 1359, 1365, 1369, 1366, 2630, 1367, + + 1354, 1368, 71, 1371, 71, 1370, 71, 1372, 1357, 1375, + 71, 1360, 1379, 71, 71, 1374, 71, 71, 71, 71, + 1364, 71, 1365, 1369, 1366, 71, 1367, 71, 1368, 71, + 1371, 1373, 1370, 1376, 1372, 71, 1375, 1377, 1378, 71, + 1380, 1381, 1374, 71, 1382, 1384, 71, 1383, 71, 2630, + 71, 1387, 71, 1385, 1386, 1388, 1390, 1389, 1373, 71, + 1376, 71, 71, 71, 1377, 1378, 71, 1380, 1381, 71, + 71, 1382, 1384, 71, 1383, 1393, 71, 1394, 1387, 71, + 1385, 1386, 71, 1390, 1389, 1391, 1392, 1396, 71, 1395, + 1397, 1398, 1399, 71, 2630, 1402, 1401, 71, 71, 1400, + + 2630, 1404, 1393, 71, 1394, 1403, 1406, 1408, 1411, 71, + 71, 71, 1391, 1392, 1396, 71, 1395, 1397, 1398, 1399, + 71, 71, 1402, 1401, 1405, 1410, 1400, 71, 1407, 1409, + 1414, 71, 1403, 71, 71, 1411, 1412, 71, 71, 1413, + 1415, 71, 1416, 71, 1417, 1419, 71, 1418, 1424, 71, + 2630, 1405, 1410, 2630, 71, 1407, 1409, 1414, 1430, 1425, + 71, 1421, 71, 1412, 1422, 71, 1413, 1415, 71, 1416, + 1420, 1417, 1419, 71, 1418, 1426, 1423, 71, 1427, 1433, + 71, 71, 1428, 1429, 71, 71, 1425, 1431, 1421, 1432, + 71, 1422, 2630, 71, 1434, 1435, 1438, 1420, 1439, 1441, + + 71, 71, 1426, 1423, 71, 1427, 1433, 71, 71, 1428, + 1429, 1436, 1440, 71, 1431, 71, 1432, 1437, 1443, 71, + 1444, 1434, 1435, 1442, 71, 1453, 1445, 71, 71, 1447, + 71, 71, 1446, 1449, 71, 1448, 71, 2630, 1436, 1440, + 71, 71, 71, 1451, 1437, 1443, 71, 71, 71, 1452, + 1442, 1450, 1458, 1445, 1454, 1456, 1447, 71, 71, 1446, + 1449, 71, 1448, 71, 71, 1455, 1460, 1457, 71, 1461, + 1451, 1462, 71, 71, 1463, 2630, 1452, 1459, 1450, 71, + 1468, 1454, 1456, 71, 71, 1466, 1464, 71, 71, 71, + 1465, 2630, 1455, 1460, 1457, 71, 1461, 1467, 1462, 71, + + 71, 1463, 1469, 71, 1459, 1470, 1472, 1468, 1471, 71, + 1475, 1473, 1466, 1464, 1474, 1476, 71, 1465, 71, 71, + 71, 1477, 1478, 1480, 1467, 1479, 1483, 1488, 1487, 1469, + 2630, 71, 1470, 1472, 1481, 1471, 1482, 71, 1473, 71, + 1489, 1474, 71, 1484, 71, 71, 71, 71, 1477, 71, + 1480, 71, 1479, 1483, 1485, 1487, 71, 1486, 1490, 71, + 1491, 1481, 1492, 1482, 1493, 71, 1497, 71, 1494, 2630, + 1484, 71, 71, 1495, 71, 71, 1496, 71, 71, 71, + 1498, 1485, 1502, 1499, 1486, 1490, 1500, 1491, 71, 1492, + 1501, 1493, 2630, 1497, 71, 1494, 1503, 2630, 1504, 1507, + + 1495, 1505, 1506, 1496, 71, 71, 71, 1498, 71, 1502, + 1499, 71, 71, 1500, 1509, 1508, 71, 1501, 1511, 1510, + 1512, 1513, 1514, 1503, 71, 1504, 1507, 1515, 1505, 1506, + 71, 71, 1517, 1516, 1519, 1518, 1521, 2630, 1520, 1522, + 1531, 71, 1508, 2630, 1537, 1511, 71, 1533, 1513, 71, + 1525, 71, 71, 71, 71, 71, 71, 1523, 71, 71, + 1516, 1519, 1518, 1524, 71, 1520, 1522, 1526, 71, 1527, + 1529, 1528, 71, 1530, 1533, 71, 71, 1525, 1532, 1535, + 1534, 71, 2630, 71, 1523, 71, 71, 71, 71, 71, + 1524, 1538, 71, 1540, 1526, 1536, 1527, 1529, 1528, 1539, + + 1530, 1542, 71, 1541, 1548, 1532, 1535, 1534, 71, 71, + 71, 1543, 1544, 1545, 1546, 1547, 71, 1549, 1538, 71, + 71, 1550, 1536, 1553, 71, 2630, 1539, 1555, 1542, 71, + 1541, 1548, 71, 71, 71, 71, 1551, 1552, 1543, 1544, + 1545, 1546, 1547, 1554, 71, 71, 1556, 71, 1550, 1558, + 71, 71, 1557, 1559, 1555, 1560, 71, 71, 1564, 1561, + 71, 71, 1562, 1551, 1552, 2630, 1566, 71, 1565, 1563, + 1554, 71, 1567, 1556, 71, 1569, 1558, 1572, 1571, 1557, + 1559, 1573, 1568, 1570, 2630, 71, 1561, 71, 71, 1562, + 71, 1577, 71, 71, 71, 1565, 1563, 1578, 71, 1567, + + 71, 71, 71, 71, 1572, 1571, 1574, 1575, 1573, 1568, + 1570, 71, 1576, 71, 1579, 71, 71, 1582, 1577, 1580, + 1581, 71, 1586, 1587, 1578, 1584, 1585, 1593, 2630, 71, + 1583, 71, 71, 1574, 1575, 71, 1591, 1588, 71, 1576, + 1589, 1579, 71, 71, 1582, 1592, 1580, 1581, 71, 71, + 1594, 1590, 1584, 1585, 71, 71, 1596, 1583, 71, 1595, + 1599, 71, 1597, 1591, 1588, 1600, 71, 1589, 71, 1598, + 1601, 71, 1592, 1602, 1603, 71, 1604, 71, 1590, 1605, + 1606, 1607, 71, 71, 1610, 71, 1595, 71, 71, 1597, + 1608, 1615, 1600, 1609, 1617, 2630, 1598, 71, 71, 2630, + + 1602, 1625, 71, 1604, 2630, 71, 71, 1606, 1607, 1619, + 1622, 71, 2630, 2630, 1620, 2630, 71, 71, 1615, 71, + 1609, 1611, 1612, 1613, 1616, 1618, 71, 1621, 1614, 1623, + 1624, 71, 71, 71, 2630, 71, 71, 1622, 1628, 1627, + 71, 71, 71, 1626, 71, 71, 71, 1629, 1611, 1612, + 1613, 1616, 1618, 1631, 1621, 1614, 1623, 1624, 1630, 71, + 1632, 71, 1634, 1633, 1635, 1628, 1627, 71, 71, 1639, + 1626, 1638, 1640, 2630, 71, 1636, 1637, 71, 2630, 71, + 1631, 1641, 1642, 1648, 71, 1630, 1644, 1632, 71, 1634, + 1633, 71, 1647, 71, 71, 1651, 71, 1650, 1638, 1640, + + 71, 71, 1636, 1637, 1643, 71, 1645, 71, 1641, 1642, + 1646, 1649, 71, 1644, 71, 71, 1652, 71, 71, 1647, + 1653, 71, 1654, 1655, 1650, 1656, 1657, 71, 1658, 2630, + 1659, 1643, 71, 1645, 71, 1662, 1660, 1646, 1649, 1661, + 71, 71, 1663, 71, 71, 71, 1672, 71, 71, 1654, + 1655, 1664, 1656, 1657, 71, 1658, 1665, 1659, 71, 1666, + 1668, 71, 1662, 1660, 1669, 1670, 1661, 71, 71, 71, + 2630, 1671, 71, 1672, 71, 1667, 1673, 71, 1664, 71, + 1675, 1674, 71, 1665, 2630, 1677, 1666, 1668, 1676, 1679, + 1678, 1669, 1670, 1681, 1680, 1684, 1685, 71, 1671, 71, + + 71, 71, 1667, 1673, 1686, 1687, 71, 71, 1674, 1690, + 1691, 71, 1677, 2630, 2630, 1676, 71, 1678, 1682, 1683, + 1681, 1680, 1694, 71, 1688, 71, 71, 71, 71, 1689, + 71, 1686, 1687, 1692, 1695, 1697, 71, 71, 1693, 1698, + 71, 1696, 71, 1699, 2630, 1682, 1683, 1703, 1701, 1700, + 71, 1688, 1705, 1702, 71, 71, 1689, 1715, 71, 1704, + 1712, 2630, 1697, 71, 71, 71, 71, 1706, 1696, 1708, + 1699, 71, 71, 1707, 1710, 1701, 1700, 71, 1711, 71, + 1702, 1709, 71, 1713, 71, 1714, 1704, 71, 71, 71, + 1716, 1717, 71, 1718, 1706, 1721, 1708, 1719, 71, 1720, + + 1707, 1710, 1726, 71, 71, 1711, 1725, 2630, 1709, 1727, + 71, 71, 1714, 71, 71, 71, 1722, 1716, 1717, 71, + 1718, 71, 1721, 1723, 1719, 1724, 1720, 71, 71, 71, + 1730, 71, 1728, 1725, 1729, 1731, 1727, 1732, 71, 1733, + 71, 1734, 71, 1722, 1735, 1737, 2630, 1736, 71, 71, + 1723, 1746, 1724, 2630, 71, 71, 71, 71, 2630, 1728, + 1738, 1729, 1731, 1741, 1732, 1739, 1733, 71, 1734, 71, + 1742, 1735, 71, 71, 1736, 1743, 1740, 71, 71, 1744, + 1754, 1745, 2630, 1751, 1753, 1747, 1749, 1738, 71, 1748, + 1741, 71, 1739, 71, 71, 71, 71, 1742, 71, 1752, + + 71, 1750, 1743, 1740, 1755, 71, 1744, 1754, 1745, 71, + 71, 1753, 1747, 1749, 71, 71, 1748, 1756, 1757, 1760, + 1758, 2630, 1759, 1761, 1762, 1763, 1752, 71, 1750, 71, + 1766, 71, 1765, 71, 2630, 1771, 71, 71, 71, 71, + 71, 1764, 71, 1770, 1756, 1757, 1760, 1758, 71, 1759, + 1761, 1762, 1763, 1767, 1769, 1772, 71, 1766, 71, 1765, + 1773, 71, 71, 1775, 71, 1774, 1768, 71, 1764, 1776, + 1770, 2630, 1777, 1778, 71, 1779, 71, 1781, 1786, 1780, + 1767, 1769, 1772, 1784, 71, 71, 2630, 1773, 1783, 71, + 1775, 1782, 1774, 1768, 71, 1788, 1776, 71, 71, 1777, + + 1778, 71, 1779, 71, 1781, 71, 1780, 1785, 71, 71, + 1784, 1787, 71, 1790, 1789, 1783, 2630, 71, 1782, 1792, + 71, 1791, 1788, 1793, 1794, 1795, 1800, 2630, 71, 1804, + 71, 1796, 1797, 2630, 1785, 71, 1798, 2630, 1787, 71, + 1790, 1789, 1799, 71, 71, 71, 1792, 71, 1791, 1801, + 1793, 71, 1795, 71, 1802, 71, 71, 1803, 1796, 1797, + 1805, 71, 2630, 1798, 71, 1806, 71, 1809, 1810, 1799, + 1807, 2630, 1811, 2630, 1812, 71, 1801, 1816, 1808, 2630, + 1817, 1802, 71, 71, 1803, 1813, 71, 1805, 1814, 71, + 71, 1815, 1806, 1818, 71, 1810, 1819, 1807, 71, 1811, + + 71, 1812, 71, 71, 1816, 1808, 71, 1817, 1822, 1820, + 1821, 1823, 1813, 1824, 71, 1814, 2630, 1828, 1815, 1825, + 71, 1831, 1826, 1819, 71, 71, 71, 71, 71, 1832, + 71, 71, 1827, 71, 1833, 1822, 1820, 1821, 1823, 1829, + 1824, 71, 1830, 71, 1828, 1840, 1825, 1834, 1831, 1826, + 1835, 71, 1837, 1842, 71, 71, 1832, 71, 1836, 1827, + 1839, 1833, 71, 1838, 71, 71, 1829, 1843, 1841, 1830, + 1844, 71, 71, 1849, 1834, 71, 1845, 1835, 71, 1837, + 71, 1850, 1846, 1847, 1851, 1836, 71, 1839, 1848, 1854, + 1838, 1852, 1853, 71, 1843, 1841, 71, 1844, 71, 71, + + 1855, 1859, 1858, 1845, 1860, 71, 1861, 1863, 71, 1846, + 71, 1851, 2630, 71, 1856, 71, 71, 2630, 1852, 1853, + 71, 71, 1864, 1862, 1865, 1857, 71, 1855, 71, 1858, + 71, 1860, 71, 1861, 1866, 1867, 1868, 1870, 1869, 71, + 2630, 1856, 2630, 1874, 71, 71, 1871, 1872, 71, 1864, + 1862, 71, 1857, 1873, 1875, 71, 71, 71, 1878, 71, + 71, 1866, 1876, 1868, 1870, 1869, 1877, 71, 1879, 71, + 1874, 71, 1880, 1871, 1872, 1881, 71, 71, 1882, 71, + 1873, 1875, 1883, 1885, 71, 71, 1884, 2630, 1886, 1876, + 71, 71, 1887, 1877, 1888, 1879, 71, 71, 71, 1880, + + 71, 1889, 1881, 1890, 71, 1882, 1891, 1892, 71, 1883, + 71, 71, 71, 1884, 1893, 1886, 1895, 1894, 1896, 1887, + 71, 1888, 71, 1897, 1901, 1898, 1899, 1902, 1889, 71, + 1890, 1900, 1904, 1891, 1892, 1903, 2630, 71, 71, 1905, + 71, 1893, 71, 71, 1894, 1896, 71, 71, 1908, 1909, + 1897, 71, 1898, 1899, 71, 1910, 1914, 71, 1900, 1904, + 1906, 1911, 1903, 1907, 1913, 71, 1905, 1912, 71, 1915, + 1917, 71, 1916, 1919, 71, 71, 1909, 71, 71, 71, + 71, 1920, 1910, 71, 1918, 1921, 1925, 1906, 1911, 1922, + 1907, 1913, 1924, 71, 1912, 1923, 71, 71, 1926, 1916, + + 71, 1927, 71, 71, 2630, 1929, 71, 1930, 71, 1928, + 1933, 1918, 71, 71, 71, 1931, 1922, 1937, 71, 1924, + 1938, 1934, 1923, 1935, 1942, 1926, 71, 71, 71, 71, + 1932, 71, 1929, 1940, 1930, 71, 1928, 71, 1936, 1939, + 1941, 71, 1931, 71, 71, 71, 71, 1938, 1934, 1946, + 1935, 71, 1944, 1943, 1948, 1947, 1945, 1932, 1949, 1952, + 1940, 71, 71, 71, 71, 1936, 1939, 1941, 71, 1950, + 71, 71, 1951, 2630, 71, 1953, 71, 71, 1954, 1944, + 1943, 1948, 1947, 1945, 1955, 1949, 1952, 1956, 1957, 1958, + 71, 1959, 1964, 71, 2630, 1960, 1950, 71, 71, 1951, + + 71, 1961, 1953, 71, 1962, 1954, 71, 1963, 1965, 71, + 1966, 1955, 71, 1967, 1956, 1957, 1958, 71, 1959, 71, + 1968, 1969, 1960, 71, 71, 1970, 71, 71, 1961, 1972, + 71, 1962, 1971, 1973, 1963, 1965, 1976, 1966, 71, 71, + 1967, 1974, 71, 71, 1975, 1978, 1977, 1968, 1969, 1979, + 71, 71, 1970, 1981, 71, 1982, 1972, 1980, 1983, 1971, + 71, 1985, 1986, 1976, 71, 71, 1988, 1984, 1974, 71, + 2630, 1975, 71, 1977, 71, 71, 1979, 71, 71, 1987, + 1981, 71, 1982, 1990, 1980, 1983, 1991, 1989, 71, 1986, + 1993, 1992, 1994, 1988, 1984, 71, 1995, 71, 71, 71, + + 1996, 71, 1997, 1999, 1998, 2000, 1987, 2001, 2002, 2003, + 1990, 71, 71, 1991, 1989, 71, 2004, 1993, 1992, 1994, + 2006, 2009, 71, 1995, 2007, 71, 2005, 71, 71, 71, + 1999, 1998, 71, 71, 2008, 71, 2003, 71, 2010, 71, + 2011, 71, 71, 2004, 71, 2013, 2012, 2006, 2009, 2015, + 2630, 2007, 71, 2005, 2014, 2018, 71, 2016, 2017, 2019, + 71, 2008, 71, 2021, 71, 2010, 71, 71, 71, 2020, + 2025, 71, 2013, 2012, 2023, 2026, 2015, 71, 71, 2022, + 2035, 2014, 2018, 71, 2016, 2017, 2019, 2024, 2028, 2027, + 2029, 71, 71, 2030, 2031, 71, 2020, 2025, 71, 2033, + + 71, 2023, 2037, 71, 2032, 71, 2022, 71, 71, 2034, + 2045, 2039, 71, 71, 2024, 2028, 2027, 2029, 71, 71, + 2030, 2031, 2036, 2038, 2040, 71, 2033, 2043, 2044, 71, + 2041, 2032, 71, 71, 2042, 2047, 2034, 71, 71, 2046, + 2048, 71, 71, 2051, 2052, 71, 71, 2049, 2054, 2036, + 2038, 2040, 71, 2630, 71, 71, 71, 2041, 71, 2053, + 2050, 2042, 2047, 2055, 2056, 71, 2046, 2048, 71, 71, + 2051, 71, 71, 2057, 2049, 2058, 71, 71, 2060, 2059, + 71, 2061, 2065, 71, 2630, 2062, 2053, 2050, 71, 2063, + 2055, 2056, 2064, 2067, 2068, 71, 2069, 2066, 2070, 2071, + + 71, 2074, 2058, 2072, 71, 2060, 2059, 71, 71, 2065, + 71, 71, 2062, 2073, 2078, 71, 2063, 71, 71, 2064, + 2067, 71, 71, 71, 2066, 71, 71, 71, 2074, 2075, + 2072, 2076, 2077, 2079, 2080, 2081, 2083, 2082, 2084, 2630, + 2073, 71, 2086, 71, 2085, 71, 71, 2087, 2630, 71, + 71, 71, 2088, 2089, 71, 71, 2075, 71, 2076, 2077, + 71, 71, 2081, 2083, 2082, 2084, 71, 2091, 2090, 2086, + 71, 2085, 2093, 2092, 71, 71, 71, 2094, 2095, 2088, + 2089, 71, 2098, 2099, 2101, 71, 2096, 2630, 71, 2097, + 2103, 71, 2104, 2100, 2091, 2090, 71, 71, 71, 2093, + + 2092, 71, 2102, 71, 2094, 2095, 2105, 2106, 71, 2098, + 2099, 2101, 71, 2096, 71, 71, 2097, 2103, 2107, 2104, + 2100, 2108, 2109, 2110, 2111, 2114, 2630, 2113, 2112, 2102, + 71, 71, 71, 71, 71, 71, 71, 2630, 2116, 71, + 2630, 2630, 2119, 2120, 71, 2107, 2115, 71, 2108, 2109, + 2110, 2111, 2114, 71, 2113, 2112, 71, 2117, 2118, 2121, + 2122, 2125, 2123, 2124, 71, 2116, 2126, 71, 71, 2119, + 71, 71, 71, 2115, 2127, 2630, 2133, 71, 71, 2131, + 2132, 71, 2128, 71, 2117, 2118, 2121, 71, 2125, 2123, + 2124, 71, 2129, 2126, 2130, 2134, 2137, 2136, 2135, 2630, + + 2142, 2127, 71, 71, 71, 71, 71, 71, 71, 2128, + 71, 2141, 2140, 2138, 2630, 2144, 2143, 2146, 71, 2129, + 71, 2130, 2134, 2137, 2136, 2135, 2139, 71, 2630, 2145, + 2151, 2154, 2630, 71, 71, 71, 71, 71, 2141, 2140, + 2138, 71, 71, 2143, 2146, 2147, 2148, 2150, 2149, 2152, + 2153, 2156, 71, 2139, 71, 71, 2145, 71, 71, 71, + 2155, 71, 2157, 71, 2158, 2159, 2630, 2162, 2164, 2163, + 2166, 71, 2147, 2148, 2150, 2149, 2152, 2153, 2156, 71, + 2167, 2160, 2165, 71, 71, 71, 2161, 2155, 71, 2157, + 71, 71, 2159, 71, 71, 71, 2163, 71, 2168, 2630, + + 2169, 2170, 71, 2171, 2172, 2173, 71, 2167, 2160, 2165, + 2174, 2175, 2177, 2161, 2630, 2630, 2176, 71, 71, 2630, + 2182, 2178, 71, 71, 2183, 71, 71, 2169, 2170, 71, + 2171, 2172, 2173, 71, 71, 2180, 2179, 2174, 2175, 2177, + 71, 2181, 71, 2176, 71, 2184, 71, 2182, 2178, 2185, + 2186, 2183, 2188, 71, 71, 2187, 2189, 71, 2190, 2191, + 2193, 2630, 2180, 2179, 2630, 71, 2192, 71, 2181, 2194, + 2195, 2196, 2184, 2197, 71, 71, 71, 71, 2199, 2188, + 2198, 71, 2187, 2189, 2200, 2190, 71, 2193, 71, 2201, + 2202, 71, 71, 2192, 71, 2204, 2194, 2195, 71, 2203, + + 71, 2205, 71, 2206, 2207, 2199, 2208, 2198, 2630, 2630, + 2209, 2630, 71, 2210, 2212, 2630, 71, 2202, 71, 2211, + 2213, 71, 71, 2214, 71, 71, 2203, 71, 2205, 71, + 2206, 2207, 2219, 2208, 71, 71, 2217, 2209, 71, 2215, + 2210, 2212, 71, 2216, 2218, 71, 2211, 2213, 71, 2220, + 2214, 2224, 2221, 2228, 71, 2630, 2223, 71, 71, 2219, + 71, 2222, 71, 2217, 71, 2225, 2215, 71, 71, 2226, + 2216, 2218, 2227, 71, 2229, 2232, 2220, 2230, 71, 2221, + 71, 2234, 71, 2223, 71, 2233, 2231, 71, 2222, 71, + 2630, 2235, 2225, 71, 2236, 2238, 2226, 2237, 71, 2227, + + 2239, 2229, 2232, 2242, 2230, 2243, 2240, 2244, 71, 71, + 71, 2245, 2246, 2231, 2241, 71, 71, 71, 2235, 71, + 2249, 2236, 2238, 71, 2237, 2250, 71, 2239, 2247, 71, + 2242, 2251, 71, 2240, 71, 71, 2248, 2252, 71, 71, + 2253, 2241, 2254, 71, 2255, 2256, 71, 2249, 2257, 71, + 2258, 2261, 71, 2259, 2262, 2247, 2630, 2630, 71, 2263, + 71, 71, 71, 2248, 2252, 2260, 2270, 2253, 2264, 71, + 71, 2255, 71, 2265, 2269, 2257, 2272, 71, 71, 2273, + 2259, 71, 71, 71, 2266, 2274, 2263, 2267, 71, 2268, + 2275, 2271, 2260, 71, 71, 71, 71, 2276, 71, 71, + + 71, 2269, 2277, 2272, 71, 2630, 71, 71, 2278, 71, + 2630, 2266, 2274, 2282, 2267, 2281, 2268, 2275, 2271, 2285, + 2284, 71, 71, 2283, 2276, 2287, 2279, 2280, 2630, 2277, + 71, 2286, 71, 71, 2289, 2278, 71, 71, 2290, 71, + 2282, 2288, 2281, 2291, 71, 2292, 71, 2284, 2293, 71, + 2283, 2294, 2287, 2279, 2280, 2295, 2296, 71, 2286, 71, + 71, 2289, 71, 2297, 71, 2290, 2300, 2298, 2288, 71, + 2291, 71, 2292, 71, 71, 2293, 2301, 2299, 2294, 2302, + 2303, 71, 2295, 2296, 71, 2304, 2305, 2306, 71, 2308, + 2297, 2309, 2307, 71, 2298, 2630, 2312, 2310, 71, 2311, + + 71, 2315, 2630, 2301, 2299, 71, 2302, 71, 71, 71, + 71, 2316, 2304, 71, 2306, 71, 2308, 71, 71, 2307, + 71, 2317, 2313, 2312, 2310, 2318, 2311, 2314, 2315, 71, + 2319, 2320, 2321, 71, 2322, 2323, 2330, 2630, 2316, 71, + 2325, 71, 2324, 71, 2331, 71, 2327, 2326, 71, 71, + 2328, 2332, 2318, 2329, 71, 2630, 2630, 2319, 2320, 2321, + 2336, 2322, 2323, 71, 71, 71, 71, 2325, 71, 2324, + 2333, 71, 2334, 2327, 2326, 2335, 71, 2328, 71, 71, + 2329, 2337, 71, 71, 2338, 2339, 2630, 2336, 71, 2340, + 2342, 2341, 2343, 2345, 2344, 2347, 71, 2333, 2630, 2334, + + 71, 2348, 2335, 71, 2350, 2630, 71, 71, 2346, 71, + 71, 2338, 2339, 71, 71, 2349, 71, 2342, 2341, 2343, + 2351, 2344, 71, 2352, 2356, 71, 2353, 71, 2348, 2355, + 2354, 71, 71, 2357, 71, 2346, 2358, 71, 2359, 71, + 71, 2360, 2349, 2362, 2363, 2365, 2361, 2351, 71, 71, + 2352, 2356, 71, 2353, 71, 2364, 2355, 2354, 71, 2367, + 2357, 71, 2368, 2358, 2366, 2359, 2372, 2369, 71, 2371, + 71, 71, 71, 2361, 71, 71, 2370, 71, 2374, 2375, + 71, 71, 2364, 71, 2373, 2376, 2367, 2377, 2388, 71, + 2378, 2366, 71, 2372, 2369, 71, 2371, 71, 2381, 2383, + + 2379, 2380, 2389, 2370, 2385, 2374, 71, 71, 71, 71, + 2384, 2373, 71, 71, 2377, 2382, 2387, 2378, 2386, 2630, + 71, 2391, 71, 71, 2390, 2381, 71, 2379, 2380, 71, + 71, 2385, 2392, 71, 71, 2393, 2394, 2384, 2395, 2396, + 2399, 71, 2382, 2387, 2630, 2386, 71, 2400, 71, 2402, + 2403, 2390, 2401, 71, 2397, 2398, 2404, 71, 71, 2392, + 71, 2630, 2393, 2394, 71, 2395, 2406, 71, 2407, 2408, + 2409, 71, 2405, 2411, 71, 2630, 71, 71, 71, 2401, + 2410, 2397, 2398, 2404, 2412, 71, 2413, 2415, 71, 2414, + 2416, 71, 71, 2406, 2417, 71, 71, 71, 2419, 2405, + + 71, 71, 71, 71, 2418, 2420, 2421, 2410, 2423, 2424, + 2422, 2412, 2425, 2413, 71, 71, 2414, 2416, 2630, 2426, + 2630, 2417, 71, 71, 2630, 71, 2429, 71, 71, 2430, + 2431, 2418, 2420, 71, 2630, 2427, 2424, 2422, 2428, 71, + 71, 71, 71, 2443, 71, 71, 2426, 2432, 71, 2437, + 2433, 71, 2434, 2429, 2435, 2436, 2430, 2431, 71, 71, + 71, 71, 2427, 2441, 71, 2428, 71, 2440, 2438, 2439, + 71, 2444, 2446, 71, 2432, 2447, 2437, 2433, 71, 2434, + 2442, 2435, 2436, 2445, 2451, 71, 2450, 71, 2448, 2449, + 2441, 2452, 2453, 2454, 2440, 2438, 2439, 2459, 71, 71, + + 71, 2455, 71, 2456, 2457, 71, 71, 2442, 2460, 71, + 2445, 71, 2461, 2450, 2458, 71, 71, 71, 2452, 2453, + 71, 71, 2462, 71, 2459, 2463, 71, 2467, 2455, 2464, + 2456, 2457, 2468, 2469, 71, 2460, 2470, 71, 71, 71, + 2465, 2458, 2471, 2466, 2472, 2476, 2473, 2475, 2630, 71, + 71, 71, 2463, 2474, 71, 71, 2464, 2477, 71, 71, + 2478, 2479, 2480, 2470, 2481, 71, 2482, 2465, 71, 2471, + 2466, 2472, 71, 2473, 2475, 71, 2483, 2485, 2484, 2488, + 2474, 2486, 71, 2487, 71, 2489, 2495, 71, 71, 71, + 71, 2481, 71, 71, 71, 71, 2490, 2491, 71, 2492, + + 2493, 2496, 2630, 71, 2485, 2484, 71, 71, 2486, 71, + 2487, 2494, 2489, 2498, 71, 2497, 2503, 2501, 71, 2500, + 71, 71, 2499, 2490, 2491, 71, 2492, 2493, 2496, 2502, + 71, 71, 2506, 71, 2505, 71, 71, 71, 2494, 71, + 2498, 71, 2497, 2503, 2501, 2504, 2500, 71, 2507, 2499, + 2510, 2508, 71, 2512, 2509, 2513, 2502, 2511, 2517, 2506, + 2514, 2505, 71, 71, 71, 2515, 2516, 71, 71, 71, + 71, 2520, 2504, 71, 2522, 2507, 71, 2510, 2508, 71, + 2512, 2509, 2513, 71, 2511, 2517, 2519, 2514, 2518, 2521, + 2533, 2523, 2515, 2516, 2524, 71, 2525, 2526, 71, 71, + + 2630, 71, 2527, 2528, 2529, 71, 2530, 71, 2531, 71, + 71, 2535, 2534, 2519, 2539, 2518, 2521, 71, 2523, 2543, + 2532, 71, 71, 71, 2526, 71, 71, 71, 71, 2527, + 2528, 2529, 71, 2530, 2536, 2531, 2537, 2538, 71, 2534, + 2540, 71, 71, 2541, 2542, 2544, 71, 2532, 71, 2547, + 2630, 71, 71, 2548, 2630, 2545, 2549, 71, 2546, 2630, + 71, 2536, 71, 2537, 2538, 2550, 71, 2540, 71, 71, + 2541, 2542, 71, 2552, 2551, 2554, 2547, 71, 2553, 2555, + 2548, 71, 2545, 2549, 2561, 2546, 71, 2557, 71, 71, + 2556, 2558, 2550, 71, 2559, 71, 2560, 2562, 71, 2563, + + 2552, 2551, 2554, 71, 71, 2553, 2555, 2564, 2565, 71, + 2566, 71, 2568, 71, 2557, 2569, 2567, 2556, 2558, 71, + 71, 2559, 2570, 2560, 2562, 2571, 2574, 2572, 2573, 2577, + 71, 71, 71, 71, 2564, 2565, 71, 2566, 71, 2568, + 2575, 2630, 2580, 2567, 71, 2581, 71, 71, 71, 2570, + 71, 2576, 71, 2574, 2572, 2573, 2578, 2579, 2585, 71, + 2584, 71, 2582, 2587, 71, 2583, 71, 2575, 71, 2580, + 2588, 71, 71, 2586, 2590, 2630, 2589, 71, 2576, 2592, + 71, 71, 71, 2578, 2579, 2585, 2594, 2584, 71, 2582, + 2587, 2593, 2583, 2591, 71, 2595, 71, 2588, 71, 71, + + 2586, 2590, 2596, 2589, 2599, 71, 2592, 2597, 2598, 2630, + 2600, 2601, 71, 2594, 2602, 2608, 71, 2605, 2593, 2603, + 2591, 71, 2595, 2604, 71, 71, 2606, 71, 2630, 2596, + 2630, 71, 71, 2630, 2597, 2598, 71, 2600, 2601, 71, + 2610, 71, 71, 71, 2605, 2614, 2603, 2607, 71, 2609, + 2604, 2611, 2612, 2606, 2615, 71, 2613, 71, 2616, 2619, + 71, 2617, 71, 2618, 71, 2621, 71, 2610, 2630, 71, + 2622, 71, 2614, 71, 2607, 2620, 2609, 2624, 2611, 2612, + 2623, 71, 2628, 2613, 2625, 2616, 71, 2629, 2617, 71, + 2618, 2630, 71, 2626, 2630, 71, 2630, 71, 2630, 71, + + 71, 71, 2620, 2630, 2624, 2627, 71, 2623, 2630, 71, + 2630, 2625, 2630, 71, 71, 2630, 2630, 2630, 2630, 2630, + 2626, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2627, 43, 43, 43, 43, 43, 43, 43, + 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, + 53, 53, 53, 53, 59, 59, 59, 59, 59, 59, + 59, 64, 64, 64, 64, 64, 64, 64, 74, 74, + 2630, 74, 74, 74, 74, 140, 140, 2630, 2630, 2630, + 140, 140, 142, 142, 2630, 2630, 142, 2630, 142, 144, + 2630, 2630, 2630, 2630, 2630, 144, 147, 147, 2630, 2630, + + 2630, 147, 147, 149, 2630, 2630, 2630, 2630, 2630, 149, + 151, 151, 2630, 151, 151, 151, 151, 75, 75, 2630, + 75, 75, 75, 75, 13, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630 } ; -static yyconst flex_int16_t yy_chk[7501] = +static yyconst flex_int16_t yy_chk[7592] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2128,10 +2148,10 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 5, 28, 6, 7, - 7, 7, 7, 2604, 7, 8, 8, 8, 8, 28, + 7, 7, 7, 2636, 7, 8, 8, 8, 8, 28, 8, 9, 9, 9, 10, 10, 10, 15, 21, 24, - 898, 15, 30, 3, 28, 149, 4, 47, 47, 5, + 906, 15, 30, 3, 28, 149, 4, 47, 47, 5, 19, 6, 19, 19, 30, 19, 72, 7, 147, 24, 72, 19, 24, 8, 21, 21, 24, 29, 9, 30, 25, 10, 11, 11, 11, 11, 11, 11, 12, 12, @@ -2241,709 +2261,720 @@ 296, 300, 303, 302, 306, 307, 309, 297, 300, 297, 297, 301, 302, 305, 308, 310, 304, 307, 305, 308, - 303, 309, 890, 310, 312, 300, 313, 311, 300, 303, + 303, 309, 898, 310, 312, 300, 313, 311, 300, 303, 306, 306, 307, 309, 311, 315, 312, 314, 316, 317, 320, 318, 310, 0, 314, 0, 0, 318, 319, 323, - 319, 312, 890, 320, 311, 0, 0, 315, 313, 0, + 319, 312, 898, 320, 311, 345, 345, 315, 313, 0, 321, 317, 315, 318, 314, 322, 317, 320, 318, 324, 316, 325, 319, 321, 318, 319, 321, 319, 321, 325, - 0, 323, 327, 322, 321, 325, 326, 321, 328, 327, - 346, 324, 322, 476, 328, 329, 324, 346, 325, 326, - 321, 330, 326, 321, 326, 321, 325, 329, 332, 327, - 326, 335, 333, 326, 330, 328, 336, 346, 341, 338, - - 476, 339, 329, 335, 332, 333, 326, 339, 330, 326, - 341, 326, 332, 349, 336, 332, 337, 349, 335, 333, - 338, 337, 0, 336, 0, 341, 338, 340, 339, 342, - 344, 332, 334, 334, 350, 340, 345, 345, 0, 347, - 349, 350, 334, 343, 334, 334, 334, 342, 337, 334, - 355, 343, 347, 353, 340, 348, 342, 334, 351, 334, - 334, 350, 344, 345, 348, 351, 347, 352, 357, 334, - 343, 334, 334, 334, 354, 353, 334, 356, 359, 352, - 353, 361, 355, 357, 356, 351, 354, 348, 360, 358, - 360, 348, 361, 364, 352, 357, 362, 363, 363, 0, - - 364, 354, 358, 365, 356, 0, 366, 368, 361, 367, - 359, 371, 369, 0, 365, 360, 358, 366, 362, 372, - 364, 0, 367, 362, 0, 370, 363, 377, 381, 0, - 365, 372, 368, 366, 368, 369, 367, 371, 371, 369, - 370, 374, 373, 375, 376, 377, 372, 380, 370, 379, - 374, 378, 370, 373, 377, 376, 375, 376, 382, 383, - 381, 385, 376, 388, 382, 380, 384, 370, 374, 373, - 375, 376, 379, 378, 380, 387, 379, 388, 378, 392, - 383, 389, 376, 385, 376, 382, 383, 386, 385, 384, - 388, 390, 393, 384, 386, 391, 0, 397, 394, 396, - - 398, 387, 387, 389, 394, 390, 395, 398, 389, 401, - 0, 392, 397, 402, 386, 393, 400, 396, 390, 393, - 399, 391, 391, 403, 397, 394, 396, 398, 395, 399, - 405, 400, 401, 395, 407, 404, 401, 410, 408, 402, - 402, 404, 411, 400, 408, 403, 415, 399, 409, 411, - 403, 412, 417, 415, 418, 410, 405, 405, 416, 419, - 407, 407, 404, 421, 410, 408, 412, 409, 414, 411, - 414, 416, 418, 415, 420, 409, 421, 414, 412, 422, - 423, 418, 422, 425, 417, 416, 424, 427, 426, 0, - 421, 419, 431, 424, 428, 414, 420, 414, 422, 429, - - 427, 420, 430, 432, 429, 433, 422, 425, 430, 422, - 425, 426, 423, 424, 427, 431, 428, 433, 434, 431, - 426, 428, 435, 436, 0, 432, 429, 438, 439, 430, - 432, 436, 433, 435, 438, 440, 439, 441, 426, 0, - 434, 442, 0, 0, 0, 434, 440, 0, 0, 435, - 436, 437, 443, 442, 438, 439, 437, 445, 437, 441, - 444, 446, 440, 465, 441, 449, 437, 445, 442, 437, - 437, 444, 446, 448, 443, 447, 437, 437, 437, 443, - 448, 451, 450, 437, 450, 437, 452, 444, 446, 445, - 453, 449, 449, 437, 445, 465, 437, 437, 452, 447, - - 448, 457, 447, 437, 454, 453, 455, 451, 451, 450, - 456, 458, 459, 452, 455, 456, 454, 453, 460, 461, - 459, 464, 467, 457, 463, 0, 466, 468, 457, 458, - 460, 454, 477, 455, 467, 468, 479, 456, 458, 459, - 461, 466, 463, 469, 464, 460, 461, 470, 464, 467, - 472, 463, 471, 466, 468, 473, 469, 475, 474, 470, - 478, 471, 481, 480, 477, 0, 483, 484, 479, 473, - 469, 491, 0, 472, 470, 478, 475, 472, 480, 471, - 482, 0, 473, 474, 475, 474, 481, 478, 483, 481, - 480, 484, 482, 483, 484, 485, 487, 486, 485, 488, - - 489, 487, 490, 491, 492, 493, 485, 482, 486, 494, - 495, 496, 497, 488, 0, 498, 495, 500, 503, 499, - 497, 500, 485, 508, 486, 485, 488, 489, 487, 490, - 502, 492, 493, 496, 498, 504, 505, 495, 496, 497, - 501, 494, 498, 499, 500, 505, 499, 506, 501, 507, - 503, 509, 510, 502, 513, 508, 507, 502, 504, 511, - 515, 512, 504, 505, 511, 510, 514, 501, 511, 506, - 512, 517, 516, 509, 506, 514, 507, 518, 509, 510, - 513, 513, 515, 511, 517, 519, 511, 515, 512, 518, - 0, 511, 520, 514, 516, 511, 521, 0, 517, 516, - - 523, 0, 522, 525, 518, 528, 524, 526, 529, 527, - 520, 533, 528, 0, 525, 0, 0, 519, 535, 520, - 521, 526, 523, 521, 522, 522, 530, 523, 524, 522, - 525, 527, 528, 524, 526, 529, 527, 531, 534, 532, - 537, 538, 535, 533, 530, 535, 536, 539, 531, 540, - 538, 522, 542, 530, 532, 541, 543, 549, 0, 534, - 539, 546, 537, 544, 531, 534, 532, 537, 538, 554, - 536, 545, 547, 536, 539, 546, 545, 541, 551, 550, - 543, 540, 541, 543, 542, 544, 547, 550, 546, 549, - 544, 552, 548, 548, 0, 555, 551, 553, 560, 547, - - 548, 554, 557, 545, 556, 551, 550, 557, 0, 558, - 555, 0, 553, 552, 559, 562, 559, 0, 552, 548, - 548, 553, 555, 560, 553, 560, 556, 0, 0, 561, - 0, 556, 569, 782, 557, 558, 558, 561, 563, 553, - 562, 559, 562, 564, 565, 568, 566, 563, 567, 570, - 569, 571, 564, 565, 566, 567, 561, 574, 572, 569, - 571, 570, 573, 575, 782, 563, 572, 0, 568, 574, - 564, 565, 568, 566, 576, 567, 570, 573, 571, 577, - 583, 578, 576, 579, 574, 572, 581, 577, 580, 573, - 578, 582, 579, 585, 581, 575, 584, 580, 589, 586, - - 587, 576, 591, 583, 584, 615, 577, 583, 578, 585, - 579, 587, 589, 581, 588, 580, 590, 582, 582, 592, - 585, 586, 588, 584, 591, 589, 586, 587, 593, 591, - 594, 595, 598, 596, 600, 0, 590, 615, 597, 592, - 595, 588, 601, 590, 599, 598, 592, 603, 602, 600, - 593, 606, 594, 596, 604, 593, 597, 594, 595, 598, - 596, 600, 599, 606, 601, 597, 605, 604, 609, 601, - 603, 599, 602, 607, 603, 602, 608, 611, 606, 610, - 612, 604, 608, 614, 605, 616, 607, 610, 617, 621, - 619, 614, 616, 605, 618, 609, 620, 648, 612, 619, - - 607, 0, 641, 608, 611, 610, 610, 612, 621, 618, - 614, 617, 616, 622, 610, 617, 621, 619, 623, 624, - 623, 618, 622, 627, 648, 633, 624, 0, 620, 630, - 0, 636, 634, 638, 641, 627, 637, 0, 992, 630, - 622, 0, 0, 633, 635, 623, 624, 625, 643, 638, - 627, 625, 633, 634, 625, 639, 630, 636, 636, 634, - 638, 625, 637, 637, 625, 640, 992, 635, 639, 625, - 643, 635, 640, 644, 625, 643, 645, 0, 625, 644, - 653, 625, 639, 2382, 2382, 645, 649, 646, 625, 646, - 650, 625, 640, 642, 642, 0, 642, 651, 647, 642, - - 644, 652, 653, 645, 642, 654, 649, 653, 655, 651, - 642, 642, 2382, 649, 646, 656, 650, 650, 657, 642, - 642, 642, 647, 642, 651, 647, 642, 652, 652, 654, - 655, 642, 654, 657, 659, 655, 658, 642, 642, 660, - 656, 661, 656, 662, 658, 657, 660, 663, 664, 661, - 666, 665, 667, 669, 668, 0, 673, 659, 674, 666, - 664, 659, 662, 658, 665, 675, 660, 667, 661, 672, - 662, 683, 676, 663, 663, 664, 668, 666, 665, 667, - 669, 668, 670, 677, 678, 679, 680, 670, 673, 675, - 674, 672, 675, 676, 679, 681, 672, 682, 683, 676, - - 684, 685, 677, 678, 686, 682, 693, 0, 680, 0, - 677, 678, 679, 680, 670, 681, 689, 687, 684, 690, - 685, 692, 681, 691, 682, 687, 0, 684, 685, 694, - 693, 697, 0, 693, 689, 701, 686, 690, 701, 692, - 695, 700, 698, 689, 687, 691, 690, 696, 692, 696, - 691, 694, 699, 695, 698, 704, 694, 697, 697, 700, - 699, 705, 701, 702, 706, 0, 709, 695, 700, 698, - 706, 702, 707, 709, 696, 708, 710, 713, 712, 699, - 704, 708, 704, 710, 711, 712, 714, 702, 705, 711, - 702, 706, 715, 709, 707, 713, 717, 718, 702, 707, - - 716, 715, 708, 710, 713, 712, 722, 719, 716, 714, - 721, 711, 718, 714, 717, 719, 720, 726, 723, 715, - 729, 724, 726, 717, 718, 723, 731, 716, 724, 720, - 732, 721, 725, 722, 719, 727, 728, 721, 733, 725, - 730, 738, 727, 720, 726, 723, 733, 730, 724, 728, - 735, 739, 729, 732, 736, 741, 734, 732, 731, 725, - 736, 737, 727, 728, 734, 733, 742, 730, 744, 741, - 740, 734, 735, 738, 746, 739, 747, 735, 739, 740, - 745, 736, 741, 734, 750, 743, 749, 737, 737, 745, - 748, 734, 743, 752, 751, 744, 746, 740, 742, 751, - - 752, 746, 748, 747, 753, 756, 754, 745, 756, 749, - 750, 750, 743, 749, 754, 757, 759, 748, 760, 0, - 752, 751, 764, 759, 760, 0, 753, 0, 757, 762, - 763, 753, 756, 754, 764, 765, 768, 765, 766, 767, - 0, 0, 757, 759, 0, 760, 761, 769, 761, 764, - 0, 767, 761, 763, 761, 762, 762, 763, 768, 761, - 769, 766, 765, 768, 761, 766, 767, 770, 773, 771, - 761, 772, 770, 761, 769, 761, 776, 777, 774, 761, - 773, 761, 771, 777, 775, 780, 761, 779, 774, 776, - 783, 761, 781, 784, 772, 773, 771, 778, 772, 770, - - 774, 784, 791, 776, 777, 774, 775, 785, 779, 788, - 778, 775, 787, 0, 779, 774, 785, 780, 790, 781, - 784, 792, 783, 0, 778, 789, 800, 787, 791, 791, - 793, 788, 0, 790, 785, 786, 788, 794, 789, 787, - 786, 797, 786, 792, 804, 790, 801, 795, 792, 793, - 794, 796, 789, 786, 786, 795, 798, 793, 800, 796, - 786, 786, 786, 802, 794, 810, 805, 786, 797, 786, - 801, 802, 803, 801, 795, 0, 804, 806, 796, 798, - 786, 786, 807, 798, 808, 806, 803, 786, 805, 811, - 802, 813, 809, 805, 814, 815, 817, 810, 812, 803, - - 807, 814, 808, 809, 806, 816, 812, 811, 815, 807, - 818, 808, 816, 813, 817, 819, 811, 823, 813, 809, - 832, 814, 815, 817, 821, 812, 824, 825, 818, 826, - 823, 830, 816, 827, 824, 821, 825, 818, 831, 828, - 829, 826, 0, 833, 823, 836, 0, 819, 835, 830, - 836, 821, 832, 824, 825, 827, 826, 833, 830, 835, - 827, 828, 829, 838, 831, 831, 828, 829, 837, 839, - 833, 837, 840, 843, 841, 835, 844, 836, 842, 840, - 846, 0, 839, 841, 845, 843, 847, 838, 0, 859, - 838, 845, 842, 849, 837, 837, 839, 848, 837, 840, - - 843, 841, 0, 848, 850, 842, 851, 852, 844, 0, - 847, 845, 846, 847, 853, 849, 857, 851, 856, 858, - 849, 859, 854, 860, 848, 0, 850, 857, 863, 852, - 861, 850, 868, 851, 852, 862, 853, 854, 864, 856, - 858, 853, 867, 857, 862, 856, 858, 864, 861, 854, - 860, 865, 863, 866, 869, 863, 867, 861, 0, 865, - 866, 870, 862, 871, 868, 864, 873, 874, 875, 867, - 877, 876, 0, 882, 883, 873, 878, 881, 865, 877, - 866, 886, 884, 870, 0, 871, 869, 880, 870, 876, - 871, 879, 881, 873, 884, 875, 880, 877, 876, 874, - - 878, 885, 887, 878, 881, 882, 883, 879, 886, 884, - 887, 888, 889, 891, 880, 892, 897, 893, 879, 894, - 0, 894, 891, 885, 888, 893, 896, 889, 885, 887, - 902, 903, 899, 892, 896, 900, 901, 904, 888, 889, - 891, 905, 892, 897, 893, 899, 894, 900, 905, 903, - 906, 901, 902, 896, 907, 0, 908, 902, 903, 899, - 909, 0, 900, 901, 904, 914, 910, 911, 905, 913, - 916, 912, 919, 915, 0, 0, 959, 914, 908, 938, - 911, 915, 906, 908, 912, 909, 907, 909, 910, 917, - 916, 913, 914, 910, 911, 918, 913, 916, 912, 919, - - 915, 917, 920, 918, 921, 922, 938, 923, 959, 926, - 929, 0, 0, 921, 923, 920, 917, 927, 928, 924, - 933, 0, 918, 929, 930, 932, 922, 0, 924, 920, - 924, 921, 922, 924, 923, 926, 926, 929, 928, 927, - 931, 924, 933, 932, 927, 928, 924, 933, 930, 931, - 934, 930, 932, 935, 936, 924, 939, 924, 934, 940, - 924, 942, 936, 941, 943, 945, 940, 931, 0, 0, - 0, 0, 0, 945, 946, 935, 948, 934, 939, 949, - 935, 936, 943, 939, 942, 941, 940, 944, 942, 946, - 941, 943, 945, 947, 949, 953, 948, 954, 951, 944, - - 950, 946, 952, 948, 951, 947, 949, 961, 950, 954, - 955, 952, 956, 957, 944, 960, 953, 955, 964, 956, - 947, 963, 953, 962, 954, 951, 961, 950, 960, 952, - 962, 957, 969, 964, 961, 968, 965, 955, 966, 956, - 957, 965, 960, 963, 967, 964, 966, 971, 963, 968, - 962, 972, 973, 986, 0, 974, 0, 967, 969, 969, - 0, 971, 968, 0, 0, 966, 975, 0, 965, 972, - 977, 967, 970, 976, 971, 970, 970, 982, 972, 978, - 970, 974, 974, 979, 973, 986, 970, 980, 975, 981, - 970, 976, 977, 975, 970, 982, 981, 977, 983, 970, - - 976, 978, 970, 970, 982, 984, 978, 970, 987, 979, - 979, 980, 985, 970, 980, 988, 981, 970, 984, 993, - 983, 985, 989, 0, 995, 983, 991, 997, 999, 996, - 0, 1014, 984, 999, 0, 993, 997, 988, 1000, 985, - 987, 996, 988, 1000, 998, 989, 993, 995, 1001, 989, - 990, 995, 991, 991, 997, 990, 996, 990, 1014, 990, - 999, 990, 998, 1002, 1004, 1000, 1005, 1003, 990, 0, - 1001, 998, 1004, 1006, 1005, 1001, 1002, 990, 1011, 1008, - 1010, 1013, 990, 1007, 990, 1003, 990, 1011, 990, 1009, - 1002, 1004, 1006, 1005, 1003, 1012, 1007, 1012, 1010, 1015, - - 1006, 1008, 1009, 1013, 1016, 1011, 1008, 1010, 1013, 1017, - 1007, 1015, 0, 1019, 1022, 1021, 1009, 1020, 1023, 1024, - 1028, 1025, 1012, 1021, 1026, 1023, 1015, 1027, 1029, 1033, - 1026, 1016, 1031, 1027, 1017, 1029, 1017, 1019, 1030, 1020, - 1019, 1022, 1021, 1025, 1020, 1023, 1024, 1028, 1025, 1034, - 1035, 1026, 1036, 1033, 1027, 1029, 1033, 1031, 1037, 1031, - 1030, 1038, 1040, 1039, 1041, 1030, 1044, 1042, 1045, 1035, - 1046, 1034, 1039, 1047, 1036, 1048, 1034, 1035, 1056, 1036, - 1037, 1042, 1051, 1040, 1041, 1037, 1057, 1038, 1038, 1040, - 1039, 1041, 1046, 1048, 1042, 1049, 1050, 1046, 1044, 1052, - - 1045, 1054, 1048, 1049, 1058, 1047, 1052, 1055, 1054, 1051, - 1056, 1055, 1050, 1060, 1061, 1063, 1064, 1062, 1057, 0, - 1061, 0, 1049, 1050, 1062, 1058, 1052, 1061, 1054, 1064, - 1063, 1058, 1066, 1067, 1055, 1070, 1068, 1065, 1068, 1069, - 1067, 1061, 1063, 1064, 1062, 1060, 1065, 1061, 1069, 1071, - 1072, 1073, 1078, 1075, 1072, 1079, 1077, 1070, 1066, 1066, - 1067, 1075, 1070, 1068, 1065, 1076, 1069, 1083, 1079, 1080, - 1076, 1078, 1081, 1073, 1077, 1081, 1071, 1072, 1073, 1078, - 1075, 1080, 1079, 1077, 1081, 1082, 1085, 1084, 1082, 1087, - 1086, 1117, 1083, 1088, 1083, 0, 1080, 1076, 0, 1081, - - 1084, 1088, 1081, 1089, 1089, 1087, 1091, 1082, 1095, 1118, - 1090, 1098, 1082, 1086, 1084, 1082, 1087, 1086, 1085, 1090, - 1088, 1095, 1092, 1117, 1097, 1093, 0, 1096, 1091, 1101, - 1089, 1092, 1093, 1091, 1098, 1095, 1096, 1090, 1098, 1099, - 1107, 1118, 0, 0, 1101, 1100, 1103, 1102, 1099, 1092, - 1097, 1097, 1093, 1100, 1096, 1102, 1101, 1104, 1105, 1103, - 1106, 1108, 1107, 1112, 1109, 1111, 1099, 1107, 1106, 1104, - 1105, 1110, 1100, 1103, 1102, 1114, 0, 1119, 1116, 1122, - 1110, 1108, 1113, 1111, 1104, 1105, 1109, 1106, 1108, 1112, - 1112, 1109, 1111, 1115, 1113, 1120, 1114, 0, 1110, 1115, - - 1116, 1123, 1114, 1119, 1119, 1116, 1122, 1124, 1125, 1113, - 1126, 1128, 0, 1129, 1127, 0, 0, 1125, 0, 0, - 1115, 1120, 1120, 1126, 1123, 1124, 1127, 1131, 1123, 1130, - 1132, 1128, 1133, 1142, 1124, 1125, 1130, 1126, 1128, 1129, - 1129, 1127, 1134, 1135, 1136, 1133, 1131, 1138, 1135, 1136, - 1134, 1137, 1132, 1139, 1131, 1138, 1130, 1132, 1137, 1133, - 1140, 1139, 1145, 1141, 1144, 1142, 1143, 1143, 1140, 1134, - 1141, 1146, 1144, 1147, 1138, 1135, 1136, 1148, 1137, 1154, - 1139, 1147, 1151, 1145, 1149, 1148, 1150, 1140, 1155, 1145, - 1141, 1144, 1149, 1143, 1150, 1151, 1152, 1157, 1153, 1156, - - 1147, 1161, 1152, 1146, 1148, 1154, 1154, 1158, 1159, 1151, - 1153, 1149, 1155, 1150, 1156, 1155, 1160, 1165, 1162, 1161, - 1167, 0, 0, 1152, 1157, 1153, 1156, 1167, 1161, 1158, - 1160, 1159, 1162, 1163, 1158, 1159, 1166, 1163, 1168, 1165, - 1169, 0, 1175, 1160, 1165, 1162, 1170, 1167, 1166, 1168, - 1163, 1175, 1171, 1172, 1174, 1173, 1177, 1178, 1163, 1176, - 1163, 1174, 1180, 1166, 1163, 1168, 1176, 1169, 1170, 1175, - 1183, 1180, 1184, 1170, 1171, 1185, 1172, 1163, 1173, 1171, - 1172, 1174, 1173, 1187, 1178, 1182, 1176, 1189, 1177, 1180, - 1190, 1182, 1183, 1191, 1193, 0, 1194, 1183, 1184, 1184, - - 1195, 1190, 1196, 1198, 1191, 1197, 1195, 1185, 1200, 1199, - 1187, 1199, 1182, 1201, 1189, 1198, 1202, 1190, 1193, 1204, - 1191, 1193, 1194, 1194, 1196, 1203, 1201, 1195, 1205, 1196, - 1198, 1197, 1197, 1207, 1200, 1200, 1199, 1203, 1202, 1208, - 1201, 1206, 1209, 1202, 1208, 1211, 1204, 1210, 1206, 1212, - 1214, 1205, 1203, 1211, 1215, 1205, 1217, 1217, 1209, 1207, - 1207, 1220, 1216, 1215, 1217, 1218, 1208, 1224, 1206, 1209, - 1210, 1212, 1211, 1221, 1210, 1216, 1212, 1214, 1218, 1222, - 1219, 1215, 1219, 1217, 1217, 1224, 1222, 1220, 1220, 1216, - 1223, 1225, 1218, 1228, 1224, 1221, 1226, 1223, 1229, 1227, - - 1221, 1230, 1231, 1226, 1234, 0, 1222, 1219, 1230, 1233, - 0, 1235, 1236, 1225, 1239, 1228, 1240, 1223, 1225, 1235, - 1228, 0, 1233, 1226, 1227, 1244, 1227, 1245, 1230, 1238, - 1229, 1234, 1238, 1236, 1231, 1241, 1233, 1242, 1235, 1236, - 1239, 1239, 1240, 1240, 1246, 1243, 1242, 1249, 1241, 1244, - 0, 1247, 1244, 1245, 1245, 1250, 1238, 1243, 1247, 1246, - 1248, 0, 1241, 1248, 1242, 1251, 1252, 1253, 0, 1253, - 0, 1246, 1243, 1254, 1255, 1248, 1258, 1250, 1247, 1249, - 0, 1256, 1250, 1251, 1248, 1257, 1260, 1248, 1252, 1263, - 1248, 1259, 1251, 1252, 1253, 1260, 1261, 1254, 1258, 1264, - - 1254, 1266, 1248, 1258, 1261, 1259, 1255, 1256, 1256, 1262, - 1265, 1257, 1257, 1260, 1269, 1267, 1262, 1268, 1259, 1267, - 1271, 1263, 0, 1261, 1270, 1274, 1277, 1272, 1273, 1271, - 1275, 1264, 1265, 1266, 1272, 1273, 1262, 1265, 1274, 1268, - 1277, 1269, 1267, 1275, 1268, 1276, 1270, 1271, 1278, 1279, - 1281, 1270, 1274, 1277, 1272, 1273, 1279, 1275, 1280, 1284, - 1276, 1282, 1285, 1281, 1291, 1280, 1287, 1282, 1286, 1285, - 1288, 1289, 1276, 1291, 0, 1290, 1279, 1281, 1290, 0, - 1278, 1292, 1288, 1294, 1289, 1280, 1284, 1301, 1282, 1285, - 1286, 1291, 1287, 1287, 1293, 1286, 1296, 1288, 1289, 1292, - - 1298, 1295, 1290, 1294, 1295, 1298, 1293, 1296, 1292, 1300, - 1294, 1300, 1298, 1302, 1301, 1303, 1304, 1305, 1307, 1295, - 1308, 1293, 1309, 1296, 1306, 1305, 1312, 1298, 1295, 1307, - 1309, 1295, 1298, 1313, 1310, 1311, 1300, 1310, 1308, 1303, - 1302, 1314, 1303, 1304, 1305, 1307, 1306, 1308, 1314, 1309, - 1316, 1306, 1310, 1311, 1317, 1315, 1319, 1322, 1312, 1316, - 1313, 1310, 1311, 1318, 1310, 1323, 1322, 1317, 1314, 1315, - 1321, 1319, 1321, 1326, 1318, 1324, 1325, 1316, 0, 1327, - 1329, 1317, 1315, 1319, 1322, 1335, 1324, 1338, 1337, 1329, - 1318, 1323, 1323, 1327, 1325, 1326, 1328, 1321, 1330, 1328, - - 1326, 1331, 1324, 1325, 1330, 1327, 1327, 1329, 1332, 1334, - 1331, 1339, 1336, 1332, 1328, 1337, 1340, 1335, 1345, 1338, - 1327, 1336, 1334, 1328, 1341, 1330, 1328, 1343, 1331, 1344, - 1346, 1347, 0, 1339, 1343, 1350, 1334, 1347, 1339, 1336, - 1332, 1351, 1344, 1350, 1346, 1341, 1352, 1353, 1340, 1351, - 1345, 1341, 1355, 1354, 1343, 1347, 1344, 1346, 1347, 1358, - 1357, 1353, 1350, 1356, 1347, 1352, 1354, 1358, 1351, 1357, - 1360, 1359, 1361, 1352, 1353, 0, 1364, 1356, 1366, 1362, - 1354, 1374, 1365, 1361, 1355, 1359, 1358, 1357, 1362, 1365, - 1356, 1367, 1368, 1369, 1370, 1373, 1371, 1385, 1359, 1361, - - 1371, 1366, 1360, 1364, 1378, 1366, 1362, 1373, 1374, 1365, - 1376, 1389, 1370, 1367, 1368, 1369, 1375, 1379, 1367, 1368, - 1369, 1370, 1373, 1371, 1375, 1376, 1377, 1380, 1383, 1385, - 1379, 1378, 1384, 1381, 1377, 1382, 1383, 1376, 1389, 1384, - 1387, 1386, 1388, 1375, 1379, 1391, 1390, 1380, 1381, 1387, - 1382, 1395, 1393, 1377, 1380, 1383, 1386, 1394, 1397, 1384, - 1381, 1396, 1382, 1388, 1399, 1398, 0, 1387, 1386, 1388, - 1390, 1399, 1391, 1390, 1393, 1394, 1396, 1400, 1395, 1393, - 1403, 1401, 1400, 1397, 1394, 1397, 1402, 1404, 1396, 1398, - 1401, 1399, 1398, 1407, 1405, 1402, 1409, 1411, 1406, 1408, - - 1412, 0, 1403, 1409, 1400, 1404, 1410, 1403, 1401, 1405, - 1406, 1414, 1408, 1402, 1404, 1407, 1413, 1408, 1410, 1414, - 1407, 1405, 1413, 1409, 1411, 1406, 1408, 1415, 1416, 1426, - 1417, 1418, 1412, 1410, 1415, 1419, 1421, 1420, 1414, 1408, - 1422, 1423, 1424, 1413, 1420, 1429, 1422, 1423, 1425, 1427, - 1431, 1430, 1434, 1416, 1415, 1416, 1417, 1417, 1418, 1433, - 1430, 1426, 1419, 1421, 1420, 1435, 1436, 1422, 1423, 1424, - 1432, 1425, 1432, 1427, 1438, 1425, 1427, 1429, 1430, 1434, - 1440, 1438, 1431, 1433, 1445, 1443, 1433, 1437, 1437, 1437, - 1443, 1435, 1435, 1439, 1437, 1444, 1441, 1432, 1436, 1448, - - 1439, 1438, 1437, 1441, 0, 1452, 1447, 1449, 1444, 1445, - 1446, 1445, 1440, 1451, 1437, 1437, 1437, 1443, 1447, 1451, - 1439, 1437, 1444, 1441, 1454, 1449, 1446, 1457, 1450, 1453, - 1453, 1448, 1452, 1447, 1449, 1450, 1455, 1446, 1458, 1456, - 1451, 1461, 1463, 1455, 1456, 1464, 1465, 1466, 1463, 1469, - 1454, 1454, 1467, 1457, 1457, 1450, 1453, 0, 1465, 1461, - 1468, 1468, 1473, 1455, 1474, 1458, 1456, 1466, 1461, 1463, - 1467, 1471, 1464, 1465, 1466, 1469, 1469, 1470, 1470, 1467, - 1476, 1475, 1471, 1477, 1473, 1478, 1479, 1468, 1475, 1473, - 0, 1481, 1480, 1486, 1482, 1483, 1474, 1484, 1471, 1485, - - 1476, 1482, 1486, 1483, 1470, 1487, 1487, 1476, 1475, 1481, - 1488, 1489, 1484, 1479, 1480, 1477, 0, 1478, 1481, 1480, - 1486, 1482, 1483, 1485, 1484, 1492, 1485, 1490, 1491, 0, - 1496, 1494, 1487, 1499, 1490, 1502, 1488, 1488, 1494, 1495, - 1491, 1492, 1496, 1489, 1500, 1498, 1501, 1495, 1492, 1505, - 1507, 1503, 1492, 1498, 1490, 1491, 1499, 1496, 1494, 1510, - 1499, 1506, 1502, 1507, 1501, 1500, 1495, 1506, 1492, 1511, - 1504, 1500, 1498, 1501, 1503, 1504, 1505, 1507, 1503, 1513, - 1508, 1512, 1509, 1514, 1513, 1515, 1504, 1508, 1506, 1509, - 1515, 1510, 1516, 1517, 0, 1513, 1511, 1504, 1520, 1518, - - 1518, 1519, 1504, 0, 1512, 1522, 1513, 1508, 1512, 1509, - 1514, 1513, 1523, 1525, 1524, 1525, 1519, 1515, 1526, 1528, - 1522, 1529, 1527, 0, 1516, 1517, 1518, 1527, 1519, 1524, - 1520, 1531, 1522, 1533, 1532, 1523, 1529, 1536, 1535, 1523, - 1525, 1524, 1532, 1537, 1538, 1539, 1531, 1540, 1529, 1527, - 1526, 1528, 1539, 1541, 1542, 1533, 1543, 1544, 1531, 0, - 1533, 1532, 1535, 1536, 1536, 1535, 1546, 1548, 1553, 1554, - 1537, 1538, 1539, 0, 1541, 1544, 1542, 1543, 0, 1540, - 1541, 1542, 1549, 1543, 1544, 1551, 1552, 1555, 1546, 1556, - 1553, 1548, 1558, 1546, 1548, 1553, 1554, 1549, 1557, 1559, - - 1551, 1552, 1562, 1560, 1563, 1555, 1559, 1565, 1561, 1549, - 1562, 1556, 1551, 1552, 1555, 1564, 1556, 1561, 1576, 1558, - 1557, 1560, 1568, 1566, 0, 1557, 1559, 1563, 1570, 1562, - 1560, 1563, 1569, 1568, 1571, 1561, 1566, 1564, 1572, 1565, - 1573, 1569, 1564, 1583, 1581, 1576, 1570, 1578, 1568, 1568, - 1566, 1579, 1571, 1572, 1573, 1570, 1581, 1582, 1578, 1569, - 1568, 1571, 1579, 1584, 1586, 1572, 1585, 1573, 1587, 1588, - 1582, 1581, 1591, 1584, 1578, 1583, 1592, 1590, 1579, 1591, - 1593, 1594, 0, 0, 1582, 1595, 1596, 1594, 1588, 1586, - 1584, 1586, 1585, 1585, 1597, 1587, 1588, 1590, 1593, 1591, - - 1595, 1596, 1592, 1592, 1590, 1598, 1598, 1593, 1594, 1597, - 1599, 1602, 1595, 1596, 1600, 1603, 1604, 1605, 1602, 1613, - 0, 1597, 1599, 1607, 1606, 1615, 1605, 1600, 1613, 1609, - 1603, 1606, 1598, 1608, 0, 1600, 1609, 1599, 1602, 1611, - 1612, 1600, 1603, 1604, 1605, 1615, 1613, 1607, 1614, 1618, - 1607, 1606, 1615, 1617, 1600, 1608, 1609, 1621, 1624, 1620, - 1608, 1611, 1622, 1622, 0, 1612, 1611, 1612, 1623, 1625, - 1614, 1617, 1620, 1627, 1618, 1614, 1618, 1626, 1629, 1630, - 1617, 1628, 1627, 1624, 1621, 1624, 1620, 1636, 1628, 1622, - 1623, 1625, 1632, 1631, 1634, 1623, 1625, 1637, 1644, 1626, - - 1627, 1630, 1634, 1635, 1626, 1638, 1630, 1631, 1628, 1640, - 1629, 1632, 1641, 1642, 1636, 1639, 1635, 1638, 1643, 1632, - 1631, 1634, 1639, 1637, 1637, 1644, 1643, 1650, 1645, 1648, - 1635, 1646, 1638, 1647, 1641, 1652, 1654, 1643, 1642, 1641, - 1642, 1640, 1639, 1645, 1651, 1643, 1649, 1648, 1653, 1649, - 1651, 1654, 1650, 1643, 1650, 1645, 1648, 1646, 1646, 1647, - 1647, 1657, 1652, 1654, 1649, 1656, 1653, 1658, 1660, 1662, - 1661, 1651, 1663, 1649, 1664, 1653, 1649, 1661, 1662, 0, - 1656, 1663, 1660, 1657, 1667, 1664, 1668, 1666, 1657, 1658, - 0, 1670, 1656, 1674, 1658, 1660, 1662, 1661, 1672, 1663, - - 0, 1664, 1666, 1673, 1670, 1674, 1667, 1673, 1668, 1676, - 1677, 1667, 1670, 1668, 1666, 1675, 1678, 1675, 1670, 1672, - 1674, 1679, 1681, 0, 1680, 1672, 1683, 1676, 1682, 1685, - 1673, 1670, 1680, 1684, 1678, 1686, 1676, 1677, 1684, 1687, - 1683, 1688, 1675, 1678, 1692, 1681, 1694, 1689, 1679, 1681, - 1682, 1680, 1695, 1683, 1689, 1682, 1693, 0, 1696, 1699, - 1688, 1685, 1697, 1687, 1694, 1684, 1687, 1686, 1688, 1698, - 1693, 1692, 1700, 1694, 1689, 1701, 1702, 1697, 1698, 1695, - 1703, 1693, 1693, 1693, 1696, 1696, 1705, 1707, 1706, 1697, - 1709, 1699, 1709, 0, 1700, 1706, 1698, 1693, 1702, 1700, - - 1710, 1711, 1701, 1702, 1712, 1711, 1716, 1713, 1693, 1705, - 1707, 1714, 1703, 1705, 1707, 1706, 1712, 1709, 1717, 1715, - 1714, 1719, 1710, 1718, 1720, 1720, 1723, 1710, 1711, 1713, - 1715, 1712, 1721, 1716, 1713, 1718, 1722, 0, 1714, 1725, - 1721, 1717, 1814, 1719, 1726, 1717, 1715, 1725, 1719, 1730, - 1718, 1720, 1726, 1723, 1728, 1730, 1727, 1728, 1722, 1721, - 1727, 1729, 1731, 1722, 1732, 1735, 1725, 1734, 1737, 1729, - 1732, 1726, 1736, 1738, 1814, 1740, 1730, 1731, 1741, 1734, - 1742, 1728, 1737, 1727, 1739, 1743, 1738, 1745, 1729, 1731, - 1744, 1732, 1735, 1747, 1734, 1737, 1736, 1743, 1739, 1736, - - 1738, 1740, 1740, 1746, 1744, 1741, 1746, 1742, 1751, 1748, - 1750, 1739, 1743, 1745, 1745, 1751, 1752, 1744, 1754, 1753, - 1747, 1746, 1755, 1752, 1757, 1759, 1760, 1761, 1765, 1758, - 1746, 1748, 1750, 1746, 1753, 1751, 1748, 1750, 1758, 1756, - 1761, 1764, 1762, 1752, 1767, 1754, 1753, 1756, 1770, 1755, - 1762, 1757, 1759, 1760, 1761, 1765, 1758, 1766, 1768, 1769, - 0, 1771, 1772, 1764, 0, 1766, 1756, 1768, 1764, 1762, - 1773, 1767, 1770, 1775, 1776, 1770, 1771, 1782, 1773, 1774, - 1769, 1775, 1780, 1778, 1766, 1768, 1769, 1771, 1771, 1772, - 1778, 1774, 1779, 1781, 1780, 1787, 1779, 1773, 1789, 1783, - - 1775, 1776, 1784, 1771, 1782, 1785, 1774, 1783, 1788, 1780, - 1778, 1790, 1791, 1791, 1784, 1788, 1781, 1785, 1789, 1779, - 1781, 1792, 1787, 1793, 1790, 1789, 1783, 1794, 1796, 1784, - 1800, 1797, 1785, 0, 1798, 1788, 0, 1802, 1790, 1791, - 1799, 1793, 1799, 1796, 1800, 1801, 1803, 1792, 1792, 1804, - 1793, 1801, 1794, 1797, 1794, 1796, 1798, 1800, 1797, 1802, - 1806, 1798, 1805, 1807, 1802, 1807, 1808, 1799, 1803, 0, - 1809, 1804, 1801, 1803, 1805, 1815, 1804, 1810, 1811, 1813, - 1808, 1812, 1806, 1819, 1817, 1821, 1820, 1806, 1809, 1805, - 1807, 1817, 1813, 1808, 0, 1810, 1811, 1809, 1815, 1812, - - 1827, 1819, 1815, 0, 1810, 1811, 1813, 1822, 1812, 1825, - 1819, 1817, 1820, 1820, 1823, 1822, 1823, 1821, 1826, 1828, - 1825, 1823, 1829, 1831, 1832, 1833, 1837, 1827, 0, 1826, - 1836, 1828, 1834, 1822, 1822, 1832, 1825, 1833, 1831, 1840, - 1829, 1823, 1822, 1823, 1845, 1826, 1828, 1834, 1837, 1829, - 1831, 1832, 1833, 1837, 1836, 1838, 1839, 1836, 1842, 1834, - 1843, 1846, 1838, 1847, 1844, 1848, 1840, 0, 1849, 1852, - 0, 1839, 1853, 1850, 1855, 0, 1845, 1852, 1848, 1856, - 1857, 1868, 1838, 1839, 1843, 1842, 1844, 1843, 1850, 1851, - 1847, 1844, 1848, 1846, 1849, 1849, 1852, 1855, 1853, 1853, - - 1850, 1855, 1851, 1856, 1858, 1859, 1856, 1857, 1862, 1864, - 1860, 1863, 1859, 1868, 1866, 1862, 1851, 1865, 1863, 1870, - 1867, 1866, 1864, 1872, 1869, 1874, 1858, 1873, 1870, 1875, - 1886, 1858, 1859, 1860, 1872, 1862, 1864, 1860, 1863, 1876, - 1865, 1866, 1867, 1880, 1865, 1869, 1870, 1867, 1875, 1873, - 1872, 1869, 1879, 1881, 1873, 1883, 1875, 1874, 1882, 1882, - 1885, 1887, 1886, 1888, 1876, 1879, 1876, 1892, 1889, 1880, - 1880, 1897, 1899, 1901, 1898, 1894, 1887, 1881, 1903, 1879, - 1881, 1883, 1883, 1885, 1894, 1882, 1889, 1885, 1887, 1904, - 1888, 1907, 1905, 1897, 1892, 1889, 1898, 1909, 1897, 1899, - - 1901, 1898, 1894, 1905, 1906, 1909, 1910, 1911, 1913, 1906, - 1903, 1914, 1918, 1907, 1915, 1904, 1904, 1916, 1907, 1905, - 1919, 1910, 1922, 1915, 1909, 1923, 1913, 1920, 1919, 1916, - 1926, 1906, 0, 1910, 1911, 1913, 1920, 1924, 1925, 1918, - 1927, 1915, 1930, 1914, 1916, 1928, 1929, 1919, 1922, 1922, - 1931, 1932, 1923, 1927, 1920, 1926, 1933, 1926, 1928, 1924, - 1925, 1934, 1935, 1999, 1924, 1925, 1936, 1927, 1929, 1930, - 1937, 1935, 1928, 1929, 1939, 1938, 1934, 1931, 1932, 1940, - 1941, 1946, 0, 1933, 1942, 1943, 1948, 0, 1934, 1935, - 1938, 1945, 1936, 1936, 1944, 1999, 1937, 1937, 1945, 1942, - - 0, 1939, 1938, 1946, 1949, 1943, 1940, 1941, 1946, 1944, - 1947, 1942, 1943, 1948, 1950, 1950, 1951, 1947, 1945, 1952, - 1957, 1944, 1949, 1951, 1953, 1954, 1956, 1953, 1955, 1961, - 1958, 1949, 1957, 1952, 1961, 1962, 1960, 1947, 1954, 1962, - 1963, 1950, 1958, 1951, 1956, 1960, 1952, 1957, 1964, 1965, - 1966, 1953, 1954, 1956, 1955, 1955, 1961, 1958, 1967, 1968, - 1973, 1964, 1962, 1960, 1963, 1969, 1974, 1963, 1972, 1973, - 1975, 1965, 1966, 1977, 1978, 1964, 1965, 1966, 1975, 1979, - 1977, 1980, 1974, 1978, 1979, 1967, 1968, 1973, 1980, 1981, - 1983, 1969, 1969, 1974, 1972, 1972, 1982, 1975, 1984, 1983, - - 1977, 1978, 1986, 1982, 1987, 1988, 1979, 1981, 1980, 1989, - 1990, 1993, 1994, 1991, 1992, 1997, 1981, 1983, 1989, 1990, - 1993, 1994, 1987, 1982, 1984, 1984, 1992, 1996, 1998, 1986, - 0, 1987, 1988, 1991, 1995, 1996, 1989, 1990, 1993, 1994, - 1991, 1992, 1997, 2000, 2001, 1995, 2003, 2006, 0, 2002, - 2007, 2004, 2000, 2005, 1996, 1998, 2001, 2002, 2004, 2008, - 2005, 1995, 2009, 2010, 2012, 2014, 0, 0, 2003, 2006, - 2000, 2001, 2012, 2003, 2006, 2007, 2002, 2007, 2004, 2020, - 2005, 2015, 2021, 2014, 2022, 2016, 2008, 2009, 2015, 2009, - 2010, 2012, 2014, 2016, 2019, 2023, 2022, 2024, 2027, 2029, - - 2025, 2019, 2030, 2020, 2023, 2028, 2020, 2032, 2015, 2021, - 2027, 2022, 2016, 2033, 2032, 2034, 2030, 2037, 2036, 2039, - 2033, 2019, 2023, 2025, 2024, 2027, 2029, 2025, 2028, 2030, - 2038, 2040, 2028, 2036, 2032, 2041, 0, 2046, 2038, 2055, - 2033, 2048, 2034, 2047, 2037, 2036, 2039, 2049, 2047, 2050, - 2054, 2056, 2055, 2040, 0, 2048, 2057, 2038, 2040, 2065, - 2062, 2049, 2041, 2046, 2046, 2059, 2055, 2050, 2048, 2061, - 2047, 2058, 2054, 2056, 2049, 2057, 2050, 2054, 2056, 2058, - 2063, 2061, 2062, 2057, 2059, 2064, 2065, 2062, 2066, 2067, - 2069, 2068, 2059, 2071, 2070, 0, 2061, 2064, 2058, 2069, - - 2072, 2075, 2063, 2070, 2073, 2076, 2077, 2063, 2074, 2067, - 2080, 2085, 2064, 2068, 2081, 2066, 2067, 2069, 2068, 2086, - 2074, 2070, 2072, 2075, 2080, 2071, 2083, 2072, 2075, 2082, - 2073, 2073, 2076, 2077, 2082, 2074, 2084, 2080, 2081, 2088, - 2087, 2081, 2086, 2085, 2089, 2090, 2086, 2091, 2083, 2094, - 2092, 0, 0, 2083, 0, 0, 2089, 2088, 2084, 2096, - 2097, 2082, 2087, 2084, 2090, 2092, 2088, 2087, 2102, 2091, - 2098, 2089, 2090, 2094, 2091, 2099, 2094, 2092, 2100, 2098, - 2101, 2096, 2097, 2103, 2106, 2109, 2096, 2097, 0, 2099, - 2111, 2108, 2106, 2107, 2102, 2102, 2100, 2098, 2101, 2108, - - 2107, 2103, 2099, 2112, 2113, 2100, 2110, 2101, 2111, 2119, - 2103, 2106, 2109, 2114, 2110, 2112, 2116, 2111, 2108, 2118, - 2107, 2114, 2120, 2121, 0, 2122, 2118, 0, 2116, 2123, - 2112, 2113, 2119, 2110, 2126, 2125, 2119, 2128, 0, 2132, - 2114, 2133, 2129, 2116, 2122, 2130, 2118, 2134, 2126, 2136, - 2121, 2123, 2122, 2125, 2120, 2129, 2123, 2130, 2138, 2144, - 2128, 2126, 2125, 2140, 2128, 2132, 2132, 2143, 2133, 2129, - 2140, 2142, 2130, 2145, 2134, 2146, 2136, 2147, 2142, 2148, - 2149, 2151, 2152, 2150, 2153, 2138, 2144, 2154, 2155, 2156, - 2140, 2152, 0, 2143, 2143, 2150, 2159, 2153, 2142, 2146, - - 2145, 2159, 2146, 2163, 2147, 2148, 2148, 2149, 2151, 2152, - 2150, 2153, 2156, 2160, 2161, 2155, 2156, 2160, 2162, 2154, - 2164, 2161, 2167, 2166, 2163, 2162, 2170, 2165, 2159, 2165, - 2163, 2172, 2171, 2174, 0, 2174, 0, 2175, 0, 0, - 2160, 2161, 2181, 2177, 0, 2162, 2166, 0, 2170, 2167, - 2166, 2171, 2164, 2170, 2165, 2172, 2176, 2176, 2172, 2171, - 2174, 2175, 2178, 2180, 2175, 2177, 2176, 2179, 2183, 2181, - 2177, 2178, 2182, 2184, 2179, 2185, 2180, 2186, 0, 2187, - 2182, 2184, 2188, 2176, 2176, 2189, 2191, 2183, 2190, 2178, - 2180, 2192, 2192, 2191, 2179, 2183, 2189, 0, 2193, 2182, - - 2184, 2185, 2185, 2186, 2186, 2187, 2187, 2194, 2188, 2188, - 2190, 2197, 2189, 2191, 2194, 2190, 2193, 2195, 2192, 2198, - 2199, 2201, 2202, 2203, 2195, 2193, 2207, 2205, 2208, 2199, - 2204, 2212, 0, 2209, 2194, 2207, 2212, 2219, 2197, 2211, - 2210, 0, 2202, 2198, 2195, 2205, 2198, 2199, 2201, 2202, - 2203, 2211, 2204, 2207, 2205, 2208, 2209, 2204, 2210, 2213, - 2209, 2214, 2220, 2212, 2219, 2230, 2211, 2210, 2221, 2224, - 2226, 2224, 2228, 2213, 2231, 2232, 2234, 2237, 2228, 2214, - 2220, 2235, 2238, 2221, 2235, 2226, 2213, 2230, 2214, 2220, - 2239, 2245, 2230, 2232, 2240, 2221, 2224, 2226, 2234, 2228, - - 2231, 2231, 2232, 2234, 2237, 2243, 2241, 2235, 2235, 2238, - 2242, 2235, 2240, 2241, 2246, 2248, 2247, 2239, 2242, 2249, - 2250, 2240, 2251, 2245, 2253, 2252, 2250, 2243, 2249, 0, - 2255, 2257, 2243, 2241, 2252, 2259, 2246, 2242, 2247, 2257, - 2260, 2246, 2248, 2247, 2251, 2261, 2249, 2250, 2254, 2251, - 2254, 2258, 2252, 2262, 2260, 2263, 2253, 2255, 2257, 2261, - 2264, 2265, 2259, 2258, 2266, 2268, 2268, 2260, 2267, 2265, - 2269, 2264, 2261, 2263, 2272, 2254, 2262, 2270, 2258, 2273, - 2262, 2277, 2263, 2266, 2281, 2270, 2284, 2264, 2265, 2278, - 2267, 2266, 2268, 2275, 2284, 2267, 2279, 2269, 2282, 2275, - - 2278, 2272, 2286, 2283, 2270, 2282, 2273, 2283, 2277, 2287, - 2289, 2281, 2290, 2284, 2291, 2289, 2278, 2292, 2279, 2293, - 2275, 2297, 2287, 2279, 2294, 2282, 2293, 2295, 2286, 2286, - 2283, 2296, 2294, 2298, 2303, 2292, 2287, 2289, 2296, 2290, - 2299, 2291, 2295, 2304, 2292, 2305, 2293, 2306, 2297, 2303, - 2304, 2294, 2307, 2308, 2295, 2309, 2311, 2298, 2296, 2312, - 2298, 2303, 2314, 2313, 2309, 2316, 2299, 2299, 2318, 2321, - 2304, 2313, 2319, 2322, 2306, 0, 2307, 2305, 2311, 2307, - 2319, 2312, 2309, 2311, 2323, 2308, 2312, 2315, 2315, 2324, - 2313, 2325, 2316, 2326, 2314, 2318, 2321, 2315, 2327, 2319, - - 2322, 2328, 2324, 2331, 2329, 2336, 2323, 2337, 2339, 2334, - 2336, 2323, 2341, 2325, 2315, 2315, 2324, 2334, 2325, 2341, - 2326, 2343, 2342, 2344, 2340, 2327, 2329, 2348, 2328, 2347, - 2331, 2329, 2336, 2337, 2337, 2339, 2334, 2340, 2349, 2341, - 2342, 2350, 2347, 2356, 2351, 2344, 2353, 2354, 2343, 2342, - 2344, 2340, 2364, 2353, 2354, 2355, 2347, 2349, 2356, 2348, - 2357, 2359, 2361, 2364, 2360, 2349, 2351, 2373, 2350, 2361, - 2356, 2351, 2360, 2353, 2354, 2363, 2362, 2355, 2367, 2364, - 2359, 2357, 2355, 2362, 2363, 2365, 2365, 2357, 2359, 2361, - 2366, 2360, 2370, 2374, 2373, 2365, 2366, 2379, 2375, 2370, - - 2367, 2381, 2363, 2362, 2383, 2367, 2385, 2386, 2389, 2387, - 2390, 0, 2365, 2365, 2392, 2391, 2386, 2366, 2396, 2370, - 2374, 2375, 2387, 2394, 2379, 2375, 2392, 2383, 2381, 2395, - 2390, 2383, 2394, 2385, 2386, 2389, 2387, 2390, 2391, 2397, - 2398, 2392, 2391, 2399, 2396, 2396, 2400, 2395, 2402, 2405, - 2394, 2401, 2403, 2402, 2401, 2399, 2395, 0, 2404, 2406, - 2404, 2405, 2410, 2413, 2416, 2406, 2397, 2398, 2400, 2401, - 2399, 2407, 2408, 2400, 2409, 2417, 2405, 2418, 2401, 2420, - 2402, 2401, 2409, 2421, 2403, 2404, 2406, 2423, 2424, 2410, - 2413, 2416, 2425, 2407, 2408, 2426, 2427, 2420, 2407, 2408, - - 2424, 2409, 2417, 2428, 2418, 2432, 2420, 2425, 2427, 2431, - 2421, 2433, 2433, 2434, 2423, 2424, 2435, 2437, 2431, 2425, - 2438, 2426, 2426, 2427, 2439, 2435, 2440, 2441, 0, 2432, - 2428, 2449, 2432, 2442, 2443, 2441, 2431, 2439, 2433, 2434, - 2434, 2437, 2442, 2435, 2437, 2443, 2452, 2453, 2440, 2454, - 2452, 2439, 2438, 2440, 2441, 2449, 2454, 2460, 2449, 2455, - 2442, 2443, 2457, 2458, 2463, 2459, 2457, 2462, 2461, 2464, - 2453, 0, 2455, 2452, 2453, 2471, 2454, 2464, 2463, 2458, - 2461, 2467, 2460, 2467, 2460, 2472, 2455, 2459, 2465, 2457, - 2458, 2463, 2459, 2462, 2462, 2461, 2464, 2465, 2466, 2468, - - 2469, 2470, 2471, 2472, 2473, 0, 2474, 2469, 2467, 2466, - 2475, 2468, 2472, 2476, 2470, 2465, 2477, 2479, 0, 2482, - 2480, 2482, 2478, 2481, 2477, 2466, 2468, 2469, 2470, 2478, - 2484, 2473, 2474, 2474, 2486, 0, 2483, 2475, 2485, 2498, - 2476, 2479, 2480, 2477, 2479, 2481, 2482, 2480, 2483, 2478, - 2481, 2485, 2487, 2494, 2489, 2491, 2499, 2495, 2496, 2497, - 2487, 2486, 2484, 2483, 2491, 2485, 2489, 2497, 2502, 2506, - 0, 2498, 2509, 0, 2500, 2501, 2502, 2496, 2505, 2487, - 2494, 2489, 2491, 2495, 2495, 2496, 2497, 2500, 2499, 2501, - 2504, 2505, 2506, 2508, 2509, 2502, 2506, 2504, 2510, 2509, - - 2508, 2500, 2501, 2513, 2511, 2505, 2510, 2512, 0, 2518, - 2514, 2513, 2521, 2515, 2516, 2520, 2517, 2504, 2511, 2525, - 2508, 2512, 2519, 2516, 2517, 2510, 2522, 2525, 2523, 2524, - 2513, 2511, 2514, 2526, 2512, 2515, 2518, 2514, 2521, 2521, - 2515, 2516, 2527, 2517, 2519, 2528, 2525, 2520, 2522, 2519, - 2523, 2524, 2530, 2522, 2531, 2523, 2524, 2532, 2533, 2534, - 2535, 2538, 2531, 2536, 2527, 2526, 2533, 2534, 2537, 2527, - 2540, 2536, 2528, 2541, 2542, 2530, 2541, 2532, 2546, 2530, - 0, 2531, 2537, 0, 2532, 2533, 2534, 2538, 2538, 2547, - 2536, 2541, 2535, 2545, 2543, 2537, 2542, 2540, 2544, 2548, - - 2541, 2542, 2543, 2541, 2546, 2546, 2544, 2545, 2550, 2550, - 2551, 2547, 2553, 2548, 2552, 2557, 2547, 2554, 2555, 2558, - 2545, 2543, 2552, 2557, 2560, 2544, 2548, 2556, 2559, 2561, - 0, 0, 2562, 2563, 2568, 2550, 2551, 2551, 2553, 2553, - 2555, 2552, 2557, 2554, 2554, 2555, 2558, 2556, 2565, 2560, - 2559, 2560, 2562, 2563, 2556, 2559, 2561, 2564, 2566, 2562, - 2563, 2568, 0, 2569, 2571, 2564, 2566, 2572, 2573, 2574, - 2565, 2569, 2575, 2577, 2578, 2565, 2573, 2574, 2580, 2579, - 2581, 2584, 2578, 2582, 2564, 2566, 2571, 2579, 2585, 2572, - 2569, 2571, 2586, 2594, 2572, 2573, 2574, 0, 2575, 2575, - - 2577, 2578, 2588, 2582, 2580, 2580, 2579, 2581, 2584, 2591, - 2582, 2595, 2586, 2592, 2593, 2585, 0, 0, 0, 2586, - 2594, 2592, 2593, 0, 2588, 0, 0, 0, 0, 2588, - 0, 2591, 0, 0, 0, 0, 2591, 0, 2595, 0, - 2592, 2593, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2600, - 2600, 2600, 2600, 2600, 2600, 2600, 2601, 2601, 2601, 2601, - 2601, 2601, 2601, 2602, 2602, 2602, 2602, 2602, 2602, 2602, - 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2605, 2605, 0, - 2605, 2605, 2605, 2605, 2606, 2606, 0, 0, 0, 2606, - 2606, 2607, 2607, 0, 0, 2607, 0, 2607, 2608, 0, - - 0, 0, 0, 0, 2608, 2609, 2609, 0, 0, 0, - 2609, 2609, 2610, 0, 0, 0, 0, 0, 2610, 2611, - 2611, 0, 2611, 2611, 2611, 2611, 2612, 2612, 0, 2612, - 2612, 2612, 2612, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, - 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598 + 788, 323, 345, 322, 321, 325, 327, 321, 328, 329, + 335, 324, 322, 327, 328, 0, 324, 330, 325, 333, + 321, 329, 335, 321, 332, 321, 325, 326, 347, 326, + 330, 788, 333, 327, 336, 328, 329, 335, 337, 338, + + 332, 347, 326, 337, 330, 326, 333, 326, 332, 326, + 344, 332, 336, 326, 326, 347, 326, 339, 349, 341, + 338, 336, 349, 339, 0, 340, 338, 332, 346, 326, + 337, 341, 326, 340, 326, 346, 326, 334, 334, 342, + 343, 0, 344, 355, 339, 349, 341, 334, 343, 334, + 334, 334, 340, 350, 334, 346, 351, 342, 352, 348, + 350, 354, 334, 351, 334, 334, 342, 343, 348, 357, + 352, 353, 356, 354, 334, 355, 334, 334, 334, 356, + 350, 334, 362, 351, 357, 352, 359, 358, 354, 369, + 360, 348, 360, 353, 361, 348, 357, 365, 353, 356, + + 358, 363, 363, 0, 362, 361, 364, 367, 365, 362, + 368, 366, 369, 364, 358, 371, 369, 360, 359, 372, + 367, 361, 366, 374, 365, 370, 377, 381, 373, 0, + 363, 372, 374, 364, 367, 368, 375, 368, 366, 373, + 370, 371, 371, 376, 377, 379, 372, 378, 370, 375, + 374, 385, 370, 377, 376, 373, 376, 380, 382, 381, + 0, 376, 392, 375, 382, 383, 384, 370, 379, 378, + 376, 387, 379, 385, 378, 380, 388, 389, 385, 391, + 386, 376, 390, 376, 380, 382, 383, 386, 393, 384, + 388, 395, 383, 384, 392, 394, 390, 387, 387, 389, + + 402, 394, 396, 388, 389, 391, 391, 386, 397, 390, + 398, 393, 399, 395, 403, 393, 400, 398, 395, 401, + 396, 399, 394, 397, 404, 409, 402, 402, 405, 396, + 404, 400, 407, 412, 408, 397, 403, 398, 410, 399, + 408, 403, 401, 400, 409, 1000, 401, 417, 412, 418, + 411, 404, 409, 416, 405, 405, 410, 411, 407, 407, + 412, 408, 414, 415, 414, 410, 416, 418, 419, 421, + 415, 414, 420, 1000, 423, 427, 418, 411, 422, 417, + 416, 422, 421, 425, 0, 424, 426, 467, 427, 414, + 415, 414, 424, 428, 420, 430, 421, 422, 429, 420, + + 419, 430, 427, 429, 431, 422, 423, 425, 422, 426, + 425, 432, 424, 434, 433, 428, 436, 435, 426, 467, + 428, 439, 430, 0, 436, 429, 433, 431, 435, 439, + 438, 431, 441, 432, 442, 434, 426, 438, 432, 443, + 434, 433, 440, 436, 435, 437, 444, 445, 439, 446, + 437, 443, 437, 440, 448, 441, 442, 438, 445, 441, + 437, 442, 449, 437, 437, 448, 443, 446, 444, 440, + 437, 437, 437, 444, 445, 447, 446, 437, 451, 437, + 0, 448, 452, 455, 452, 447, 449, 437, 450, 449, + 437, 437, 453, 457, 454, 450, 456, 437, 455, 460, + + 459, 457, 462, 0, 451, 451, 454, 447, 456, 452, + 455, 458, 447, 463, 462, 450, 458, 460, 453, 453, + 457, 454, 459, 456, 461, 465, 460, 459, 470, 462, + 466, 468, 461, 469, 463, 471, 470, 472, 458, 478, + 463, 473, 474, 465, 477, 469, 468, 475, 471, 472, + 473, 461, 465, 466, 476, 470, 479, 466, 468, 481, + 469, 475, 471, 477, 472, 474, 478, 480, 473, 474, + 482, 477, 483, 485, 475, 484, 493, 486, 488, 476, + 496, 476, 480, 491, 492, 482, 494, 484, 479, 488, + 495, 481, 531, 489, 480, 485, 483, 482, 489, 483, + + 485, 486, 484, 487, 486, 488, 487, 490, 493, 497, + 491, 492, 496, 494, 487, 497, 498, 495, 499, 531, + 500, 490, 501, 502, 503, 489, 499, 502, 505, 504, + 487, 506, 503, 487, 490, 507, 497, 508, 498, 500, + 510, 509, 512, 498, 507, 499, 501, 500, 509, 501, + 502, 503, 504, 511, 506, 512, 504, 515, 506, 508, + 505, 513, 507, 522, 508, 514, 513, 516, 509, 512, + 513, 521, 510, 517, 514, 511, 516, 518, 519, 0, + 511, 522, 523, 515, 515, 513, 520, 528, 513, 524, + 522, 519, 514, 513, 516, 517, 525, 513, 520, 518, + + 517, 528, 526, 521, 518, 519, 523, 532, 527, 523, + 529, 524, 524, 520, 528, 530, 524, 533, 525, 527, + 535, 534, 530, 525, 526, 532, 536, 537, 533, 526, + 541, 538, 529, 542, 532, 527, 534, 529, 524, 539, + 540, 543, 530, 541, 533, 544, 545, 536, 534, 540, + 551, 537, 535, 536, 537, 538, 546, 541, 538, 547, + 548, 539, 549, 543, 547, 542, 539, 540, 543, 556, + 545, 550, 550, 545, 548, 553, 549, 544, 546, 550, + 552, 554, 551, 546, 558, 555, 0, 548, 552, 549, + 557, 547, 559, 553, 560, 0, 0, 559, 550, 550, + + 555, 556, 553, 554, 562, 557, 558, 552, 554, 555, + 563, 558, 555, 561, 564, 561, 565, 557, 563, 566, + 560, 560, 568, 567, 559, 565, 569, 555, 566, 562, + 568, 562, 567, 569, 570, 572, 571, 563, 577, 564, + 561, 564, 573, 565, 574, 575, 566, 572, 578, 568, + 567, 573, 574, 569, 571, 576, 578, 570, 579, 581, + 575, 570, 572, 571, 580, 582, 579, 576, 581, 573, + 577, 574, 575, 584, 582, 578, 585, 0, 586, 583, + 0, 584, 576, 589, 587, 579, 581, 580, 583, 585, + 588, 580, 582, 590, 592, 593, 594, 591, 588, 589, + + 584, 601, 592, 585, 586, 586, 583, 587, 591, 593, + 589, 587, 595, 596, 597, 590, 594, 588, 599, 601, + 590, 592, 593, 594, 591, 598, 600, 599, 601, 602, + 603, 606, 605, 596, 595, 604, 597, 607, 608, 595, + 596, 597, 602, 609, 613, 599, 600, 598, 603, 615, + 604, 608, 598, 600, 605, 606, 602, 603, 606, 605, + 607, 609, 604, 610, 607, 608, 611, 612, 619, 614, + 609, 613, 618, 612, 616, 610, 615, 614, 620, 611, + 618, 624, 622, 621, 625, 620, 0, 0, 0, 623, + 610, 645, 616, 611, 612, 614, 614, 622, 623, 618, + + 619, 616, 637, 625, 614, 620, 621, 631, 626, 622, + 621, 625, 627, 624, 627, 628, 623, 626, 634, 631, + 637, 639, 628, 645, 642, 638, 0, 640, 634, 637, + 0, 0, 641, 0, 631, 626, 643, 651, 0, 627, + 642, 652, 628, 629, 639, 634, 638, 629, 639, 643, + 629, 642, 638, 640, 640, 644, 647, 629, 641, 641, + 629, 651, 644, 643, 651, 629, 648, 0, 652, 0, + 629, 649, 648, 650, 629, 650, 653, 629, 647, 677, + 649, 654, 644, 647, 629, 655, 658, 629, 646, 646, + 0, 646, 0, 648, 646, 657, 653, 655, 649, 646, + + 650, 656, 659, 653, 661, 646, 646, 654, 654, 660, + 658, 677, 655, 658, 646, 646, 646, 657, 646, 661, + 663, 646, 657, 667, 659, 666, 646, 656, 656, 659, + 662, 661, 646, 646, 660, 664, 660, 665, 662, 668, + 669, 671, 664, 663, 666, 665, 670, 663, 672, 667, + 667, 668, 666, 669, 673, 670, 671, 662, 674, 678, + 676, 679, 664, 674, 665, 680, 668, 669, 671, 683, + 672, 686, 684, 670, 681, 672, 682, 685, 683, 686, + 687, 673, 676, 690, 688, 679, 680, 676, 679, 689, + 674, 678, 680, 681, 684, 682, 683, 685, 686, 684, + + 693, 681, 688, 682, 685, 691, 694, 687, 689, 695, + 696, 688, 698, 691, 697, 690, 689, 699, 693, 700, + 0, 700, 701, 702, 694, 0, 709, 693, 696, 704, + 699, 695, 691, 694, 698, 702, 695, 696, 697, 698, + 708, 697, 705, 703, 699, 705, 700, 704, 701, 701, + 702, 703, 706, 709, 0, 710, 704, 712, 711, 713, + 706, 710, 0, 712, 714, 708, 713, 708, 715, 705, + 703, 714, 717, 715, 716, 718, 706, 0, 722, 706, + 711, 716, 710, 719, 712, 711, 713, 706, 720, 721, + 717, 714, 719, 722, 726, 715, 720, 725, 718, 717, + + 723, 716, 718, 733, 724, 722, 727, 721, 723, 731, + 719, 728, 729, 727, 731, 720, 721, 724, 725, 729, + 738, 726, 735, 730, 725, 732, 737, 723, 734, 728, + 730, 724, 732, 727, 739, 733, 731, 736, 728, 729, + 741, 734, 739, 738, 736, 740, 745, 738, 743, 744, + 730, 742, 732, 740, 735, 734, 746, 742, 737, 748, + 740, 739, 741, 747, 736, 746, 750, 741, 753, 749, + 745, 755, 740, 745, 743, 743, 749, 747, 742, 751, + 740, 744, 752, 746, 756, 754, 759, 757, 751, 0, + 747, 748, 757, 750, 755, 753, 749, 754, 755, 762, + + 758, 785, 762, 763, 752, 768, 751, 758, 759, 752, + 756, 756, 754, 759, 757, 760, 763, 765, 769, 766, + 0, 770, 785, 760, 765, 766, 762, 758, 785, 772, + 763, 768, 768, 770, 771, 774, 771, 775, 776, 773, + 0, 769, 760, 776, 765, 769, 766, 767, 770, 767, + 775, 773, 772, 767, 777, 767, 772, 774, 0, 0, + 767, 771, 774, 778, 775, 767, 773, 777, 0, 780, + 776, 767, 779, 781, 767, 782, 767, 783, 786, 780, + 767, 777, 767, 783, 779, 784, 778, 767, 782, 787, + 778, 780, 767, 789, 791, 781, 780, 790, 784, 779, + + 781, 794, 782, 791, 783, 790, 780, 793, 0, 797, + 786, 806, 784, 0, 795, 796, 787, 0, 0, 799, + 0, 791, 793, 794, 790, 789, 792, 795, 794, 803, + 796, 792, 798, 792, 793, 797, 797, 800, 799, 801, + 802, 795, 796, 806, 792, 792, 799, 801, 802, 807, + 800, 792, 792, 792, 798, 808, 803, 804, 792, 798, + 792, 809, 810, 808, 800, 811, 801, 802, 813, 812, + 816, 792, 792, 807, 815, 809, 807, 812, 792, 814, + 804, 817, 808, 818, 804, 815, 813, 811, 809, 819, + 821, 818, 811, 820, 810, 813, 812, 814, 822, 817, + + 820, 815, 816, 821, 823, 822, 814, 825, 817, 824, + 818, 819, 838, 827, 831, 829, 819, 821, 830, 836, + 820, 832, 823, 831, 827, 822, 830, 824, 829, 833, + 834, 823, 835, 832, 837, 839, 824, 836, 842, 825, + 827, 831, 829, 842, 838, 830, 836, 841, 832, 839, + 843, 833, 834, 843, 835, 844, 833, 834, 841, 835, + 837, 837, 839, 847, 846, 845, 850, 848, 851, 852, + 842, 846, 847, 849, 841, 851, 843, 843, 845, 844, + 843, 848, 844, 853, 855, 849, 856, 854, 857, 860, + 847, 846, 845, 854, 848, 851, 858, 859, 850, 857, + + 849, 852, 865, 866, 860, 862, 855, 853, 856, 863, + 853, 855, 864, 856, 854, 857, 860, 867, 858, 859, + 863, 869, 868, 858, 859, 874, 862, 873, 870, 875, + 866, 868, 862, 864, 865, 867, 863, 870, 871, 864, + 872, 873, 876, 879, 867, 869, 871, 872, 869, 868, + 877, 880, 879, 881, 873, 870, 882, 874, 880, 884, + 885, 875, 883, 890, 876, 871, 886, 872, 884, 876, + 879, 891, 877, 888, 893, 887, 0, 877, 880, 889, + 883, 894, 888, 882, 885, 881, 884, 885, 0, 883, + 886, 887, 892, 886, 889, 890, 893, 895, 896, 897, + + 888, 893, 887, 891, 892, 895, 889, 899, 894, 900, + 901, 896, 904, 902, 897, 902, 899, 905, 901, 892, + 904, 908, 907, 909, 895, 896, 897, 900, 911, 910, + 912, 914, 915, 908, 899, 907, 900, 901, 909, 904, + 902, 917, 0, 916, 905, 913, 911, 918, 908, 907, + 909, 910, 913, 921, 919, 911, 910, 912, 920, 924, + 927, 922, 0, 914, 915, 916, 917, 919, 917, 918, + 916, 920, 913, 922, 918, 921, 923, 925, 928, 924, + 921, 919, 926, 929, 923, 920, 924, 927, 922, 925, + 926, 928, 929, 930, 931, 0, 934, 932, 936, 937, + + 967, 931, 0, 923, 925, 928, 932, 935, 932, 926, + 929, 932, 937, 938, 930, 0, 946, 941, 936, 932, + 930, 931, 934, 934, 932, 936, 937, 939, 940, 935, + 943, 947, 967, 932, 935, 932, 939, 938, 932, 941, + 938, 942, 944, 946, 941, 949, 940, 950, 951, 942, + 944, 0, 943, 947, 939, 940, 948, 943, 947, 952, + 956, 954, 0, 948, 957, 953, 951, 949, 942, 944, + 950, 952, 949, 953, 950, 951, 954, 955, 959, 957, + 956, 961, 958, 948, 959, 960, 952, 956, 954, 955, + 958, 957, 953, 963, 960, 962, 964, 965, 968, 969, + + 963, 972, 961, 964, 955, 959, 970, 962, 961, 958, + 971, 968, 960, 970, 973, 965, 972, 975, 969, 973, + 963, 974, 962, 964, 965, 968, 969, 976, 972, 974, + 975, 977, 971, 970, 981, 0, 994, 971, 979, 0, + 0, 976, 980, 984, 975, 982, 973, 995, 974, 0, + 0, 0, 979, 983, 976, 0, 985, 977, 977, 978, + 980, 984, 978, 978, 0, 979, 981, 978, 994, 980, + 984, 982, 982, 978, 986, 983, 987, 978, 985, 995, + 983, 978, 988, 985, 988, 989, 978, 990, 991, 978, + 978, 996, 989, 997, 978, 992, 986, 999, 993, 0, + + 978, 986, 987, 987, 978, 990, 988, 993, 992, 988, + 991, 988, 989, 996, 990, 991, 997, 0, 996, 1003, + 997, 1005, 992, 999, 999, 993, 998, 1001, 1004, 1006, + 1005, 998, 1011, 998, 1007, 998, 1008, 998, 1010, 1007, + 1004, 1008, 1003, 1001, 998, 1009, 1003, 1006, 1005, 1012, + 1011, 1010, 1014, 998, 1001, 1004, 1006, 1012, 998, 1011, + 998, 1013, 998, 1008, 998, 1010, 1007, 1009, 1015, 1013, + 1016, 1014, 1009, 1017, 1019, 1018, 1012, 1021, 1020, 1014, + 1020, 1015, 1022, 1019, 1023, 1024, 1017, 0, 1013, 1025, + 1030, 1027, 1016, 1018, 0, 1015, 1023, 1016, 1028, 1021, + + 1017, 1019, 1018, 1031, 1021, 1020, 1032, 1033, 1036, 1022, + 1031, 1023, 1024, 1029, 1025, 1027, 1025, 1030, 1027, 1038, + 1028, 1029, 1034, 1040, 1037, 1028, 1035, 1039, 1034, 1033, + 1031, 1037, 1035, 1032, 1033, 1036, 1042, 1043, 1045, 1044, + 1029, 1038, 0, 1054, 1048, 1039, 1038, 1046, 1040, 1034, + 1040, 1037, 1050, 1035, 1039, 1047, 1051, 1045, 1049, 1043, + 1042, 1044, 1055, 1042, 1043, 1045, 1044, 1049, 1056, 1046, + 1048, 1048, 1052, 1050, 1046, 1054, 1051, 1047, 1057, 1050, + 1058, 1059, 1047, 1051, 1060, 1049, 1052, 1061, 1065, 1059, + 1056, 1068, 1065, 1066, 1055, 1056, 1062, 1064, 1058, 1052, + + 1060, 1067, 1070, 1062, 1064, 1073, 0, 1058, 1059, 1072, + 1057, 1060, 1068, 1071, 1061, 1065, 1072, 1074, 1068, 1071, + 1073, 1076, 1075, 1062, 1064, 1066, 1071, 1078, 1077, 1078, + 1074, 1075, 1073, 1067, 1070, 1077, 1072, 1080, 1081, 1082, + 1071, 1079, 1088, 1082, 1074, 1083, 1071, 1076, 1076, 1075, + 1079, 1086, 1085, 1087, 1078, 1077, 1086, 1089, 0, 1080, + 1085, 1088, 1090, 1093, 1080, 1081, 1082, 1083, 1079, 1088, + 1089, 1087, 1083, 1091, 1090, 1092, 1091, 1095, 1092, 1085, + 1087, 1094, 0, 1086, 1089, 1091, 0, 1096, 1093, 1090, + 1093, 1097, 1127, 1098, 1094, 1099, 1099, 1092, 1105, 1101, + + 1091, 1098, 1092, 1091, 1100, 1092, 1102, 1097, 1094, 1095, + 1096, 1105, 1103, 1100, 1096, 1102, 1107, 1108, 1097, 1103, + 1098, 1101, 1099, 1106, 1127, 1105, 1101, 1109, 1113, 1110, + 1111, 1100, 1106, 1102, 0, 1114, 1109, 1110, 1112, 1103, + 1108, 1113, 1107, 1107, 1108, 1111, 1112, 1114, 1115, 1117, + 1106, 1116, 1118, 0, 1109, 1113, 1110, 1111, 1119, 1116, + 1115, 1120, 1114, 1121, 0, 1112, 1122, 1125, 1124, 1126, + 1120, 1117, 1118, 1125, 1123, 1115, 1117, 1128, 1116, 1118, + 1119, 1121, 0, 0, 1129, 1119, 1123, 1130, 1120, 1124, + 1121, 1126, 1122, 1122, 1125, 1124, 1126, 1132, 1133, 1134, + + 1138, 1123, 1136, 1135, 1137, 0, 1139, 0, 0, 1128, + 1129, 1129, 1135, 1130, 1130, 1136, 1137, 1134, 1141, 1142, + 1138, 1133, 0, 1143, 1132, 1133, 1134, 1138, 1140, 1136, + 1135, 1137, 1139, 1139, 1144, 1140, 1143, 1141, 1145, 1146, + 1147, 1142, 1144, 1145, 1146, 1141, 1142, 1147, 1148, 1149, + 1143, 1150, 1153, 1151, 1152, 1140, 1148, 1149, 1155, 1150, + 1151, 1144, 1156, 1152, 1154, 1154, 1155, 1147, 1157, 1158, + 1145, 1146, 1168, 0, 1159, 1148, 1149, 1158, 1150, 1160, + 1151, 1152, 1159, 1156, 1153, 1155, 1161, 1160, 1165, 1156, + 1162, 1154, 1163, 1164, 1161, 1167, 1158, 1166, 1163, 1168, + + 1157, 1159, 1170, 1162, 1169, 1164, 1160, 0, 0, 1171, + 1167, 0, 1172, 1161, 1165, 1165, 1176, 1162, 1173, 1163, + 1164, 1166, 1167, 1171, 1166, 1170, 1169, 1178, 1177, 1170, + 1172, 1169, 1173, 1174, 1178, 1179, 1171, 1174, 1176, 1172, + 1177, 1180, 0, 1176, 1181, 1173, 1179, 1182, 0, 1183, + 1174, 1189, 1184, 1188, 1178, 1177, 1185, 0, 1174, 1193, + 1174, 1186, 1179, 1185, 1174, 1193, 1181, 1194, 1180, 1182, + 1186, 1181, 1183, 1187, 1182, 1184, 1183, 1174, 1189, 1184, + 1187, 1191, 1196, 1185, 1195, 1188, 1193, 0, 1186, 1194, + 1191, 1198, 1200, 1201, 1194, 1202, 1207, 1204, 0, 1205, + + 1187, 1206, 1207, 1209, 1201, 1208, 1202, 1210, 1191, 1213, + 1195, 1195, 1217, 1206, 1196, 1212, 1210, 1212, 1198, 1200, + 1201, 1204, 1202, 1207, 1204, 1205, 1205, 1208, 1206, 1209, + 1209, 1211, 1208, 1214, 1210, 1213, 1213, 1215, 1216, 1217, + 1218, 1219, 1212, 1211, 1220, 1222, 1214, 1221, 1219, 0, + 1216, 1225, 1221, 1223, 1224, 1227, 1229, 1228, 1211, 1215, + 1214, 1222, 1224, 1218, 1215, 1216, 1228, 1218, 1219, 1229, + 1220, 1220, 1222, 1225, 1221, 1231, 1223, 1232, 1225, 1232, + 1223, 1224, 1227, 1229, 1228, 1230, 1230, 1234, 1231, 1233, + 1235, 1236, 1237, 1230, 0, 1240, 1239, 1235, 1236, 1238, + + 0, 1242, 1231, 1239, 1232, 1241, 1244, 1247, 1251, 1234, + 1237, 1251, 1230, 1230, 1234, 1233, 1233, 1235, 1236, 1237, + 1240, 1238, 1240, 1239, 1243, 1249, 1238, 1241, 1246, 1248, + 1254, 1243, 1241, 1242, 1247, 1251, 1252, 1248, 1244, 1253, + 1255, 1246, 1256, 1254, 1257, 1259, 1249, 1258, 1262, 1255, + 0, 1243, 1249, 0, 1256, 1246, 1248, 1254, 1268, 1263, + 1259, 1261, 1252, 1252, 1261, 1253, 1253, 1255, 1257, 1256, + 1260, 1257, 1259, 1258, 1258, 1264, 1261, 1260, 1265, 1271, + 1262, 1263, 1266, 1267, 1266, 1261, 1263, 1269, 1261, 1270, + 1268, 1261, 0, 1264, 1272, 1273, 1276, 1260, 1277, 1279, + + 1265, 1271, 1264, 1261, 1273, 1265, 1271, 1267, 1272, 1266, + 1267, 1274, 1278, 1269, 1269, 1270, 1270, 1275, 1281, 1274, + 1282, 1272, 1273, 1280, 1275, 1291, 1283, 1280, 1276, 1285, + 1277, 1279, 1284, 1287, 1278, 1286, 1285, 0, 1274, 1278, + 1281, 1284, 1286, 1289, 1275, 1281, 1287, 1282, 1283, 1290, + 1280, 1288, 1297, 1283, 1292, 1294, 1285, 1291, 1289, 1284, + 1287, 1292, 1286, 1290, 1288, 1293, 1299, 1295, 1294, 1300, + 1289, 1301, 1293, 1295, 1302, 0, 1290, 1298, 1288, 1297, + 1307, 1292, 1294, 1301, 1298, 1305, 1303, 1302, 1299, 1303, + 1304, 0, 1293, 1299, 1295, 1300, 1300, 1306, 1301, 1304, + + 1307, 1302, 1308, 1305, 1298, 1308, 1311, 1307, 1309, 1306, + 1314, 1311, 1305, 1303, 1313, 1315, 1313, 1304, 1311, 1309, + 1308, 1316, 1317, 1319, 1306, 1318, 1322, 1326, 1325, 1308, + 0, 1319, 1308, 1311, 1320, 1309, 1321, 1314, 1311, 1318, + 1327, 1313, 1315, 1323, 1322, 1316, 1325, 1321, 1316, 1317, + 1319, 1323, 1318, 1322, 1324, 1325, 1320, 1324, 1328, 1326, + 1329, 1320, 1330, 1321, 1331, 1328, 1336, 1327, 1332, 0, + 1323, 1330, 1324, 1333, 1329, 1336, 1335, 1331, 1335, 1332, + 1337, 1324, 1341, 1338, 1324, 1328, 1339, 1329, 1333, 1330, + 1340, 1331, 0, 1336, 1338, 1332, 1341, 0, 1342, 1344, + + 1333, 1342, 1343, 1335, 1339, 1344, 1337, 1337, 1341, 1341, + 1338, 1343, 1340, 1339, 1346, 1345, 1342, 1340, 1348, 1346, + 1349, 1350, 1351, 1341, 1345, 1342, 1344, 1352, 1342, 1343, + 1350, 1348, 1354, 1353, 1357, 1355, 1359, 0, 1358, 1360, + 1370, 1357, 1345, 0, 1376, 1348, 1346, 1372, 1350, 1351, + 1364, 1358, 1349, 1360, 1372, 1353, 1355, 1361, 1364, 1352, + 1353, 1357, 1355, 1361, 1354, 1358, 1360, 1365, 1359, 1366, + 1368, 1367, 1370, 1369, 1372, 1365, 1376, 1364, 1371, 1374, + 1373, 1361, 0, 1368, 1361, 1367, 1369, 1374, 1366, 1373, + 1361, 1377, 1371, 1380, 1365, 1375, 1366, 1368, 1367, 1378, + + 1369, 1382, 1377, 1381, 1389, 1371, 1374, 1373, 1378, 1375, + 1381, 1383, 1384, 1385, 1386, 1387, 1389, 1390, 1377, 1387, + 1380, 1391, 1375, 1394, 1382, 0, 1378, 1396, 1382, 1391, + 1381, 1389, 1386, 1383, 1384, 1385, 1392, 1393, 1383, 1384, + 1385, 1386, 1387, 1395, 1390, 1393, 1397, 1396, 1391, 1399, + 1394, 1392, 1398, 1400, 1396, 1401, 1395, 1399, 1405, 1402, + 1400, 1397, 1403, 1392, 1393, 0, 1407, 1398, 1406, 1404, + 1395, 1403, 1409, 1397, 1402, 1411, 1399, 1414, 1413, 1398, + 1400, 1415, 1410, 1412, 0, 1405, 1402, 1401, 1415, 1403, + 1404, 1419, 1406, 1407, 1409, 1406, 1404, 1420, 1412, 1409, + + 1410, 1414, 1411, 1413, 1414, 1413, 1416, 1417, 1415, 1410, + 1412, 1416, 1418, 1419, 1421, 1420, 1417, 1424, 1419, 1422, + 1423, 1418, 1427, 1428, 1420, 1425, 1426, 1434, 0, 1421, + 1424, 1422, 1425, 1416, 1417, 1424, 1432, 1429, 1426, 1418, + 1430, 1421, 1423, 1429, 1424, 1433, 1422, 1423, 1430, 1427, + 1435, 1431, 1425, 1426, 1434, 1428, 1437, 1424, 1431, 1436, + 1440, 1432, 1438, 1432, 1429, 1441, 1436, 1430, 1438, 1439, + 1442, 1433, 1433, 1443, 1445, 1439, 1446, 1435, 1431, 1447, + 1448, 1449, 1448, 1437, 1452, 1446, 1436, 1440, 1441, 1438, + 1450, 1454, 1441, 1451, 1456, 0, 1439, 1443, 1454, 0, + + 1443, 1464, 1442, 1446, 0, 1449, 1445, 1448, 1449, 1459, + 1461, 1447, 0, 0, 1459, 0, 1452, 1450, 1454, 1451, + 1451, 1453, 1453, 1453, 1455, 1457, 1456, 1460, 1453, 1462, + 1463, 1455, 1457, 1464, 0, 1461, 1453, 1461, 1467, 1466, + 1460, 1459, 1463, 1465, 1467, 1462, 1466, 1468, 1453, 1453, + 1453, 1455, 1457, 1470, 1460, 1453, 1462, 1463, 1469, 1469, + 1471, 1465, 1473, 1472, 1474, 1467, 1466, 1471, 1472, 1481, + 1465, 1480, 1482, 0, 1468, 1477, 1479, 1480, 0, 1470, + 1470, 1483, 1484, 1491, 1482, 1469, 1486, 1471, 1473, 1473, + 1472, 1474, 1490, 1477, 1479, 1494, 1481, 1493, 1480, 1482, + + 1484, 1483, 1477, 1479, 1485, 1485, 1487, 1487, 1483, 1484, + 1488, 1492, 1486, 1486, 1490, 1491, 1495, 1493, 1492, 1490, + 1496, 1488, 1497, 1498, 1493, 1499, 1500, 1494, 1501, 0, + 1502, 1485, 1499, 1487, 1500, 1505, 1503, 1488, 1492, 1504, + 1504, 1498, 1506, 1501, 1497, 1503, 1516, 1496, 1495, 1497, + 1498, 1507, 1499, 1500, 1502, 1501, 1508, 1502, 1507, 1509, + 1511, 1505, 1505, 1503, 1512, 1513, 1504, 1511, 1508, 1516, + 0, 1515, 1512, 1516, 1506, 1509, 1517, 1513, 1507, 1515, + 1519, 1518, 1509, 1508, 0, 1521, 1509, 1511, 1520, 1522, + 1521, 1512, 1513, 1524, 1523, 1527, 1528, 1517, 1515, 1518, + + 1523, 1521, 1509, 1517, 1529, 1530, 1524, 1519, 1518, 1532, + 1533, 1520, 1521, 0, 0, 1520, 1522, 1521, 1525, 1526, + 1524, 1523, 1535, 1528, 1531, 1525, 1526, 1527, 1530, 1531, + 1529, 1529, 1530, 1534, 1536, 1538, 1532, 1533, 1534, 1539, + 1531, 1537, 1537, 1541, 0, 1525, 1526, 1545, 1543, 1542, + 1538, 1531, 1547, 1544, 1535, 1544, 1531, 1559, 1541, 1546, + 1556, 0, 1538, 1543, 1546, 1534, 1536, 1548, 1537, 1551, + 1541, 1539, 1542, 1550, 1554, 1543, 1542, 1551, 1555, 1545, + 1544, 1552, 1548, 1557, 1547, 1558, 1546, 1556, 1550, 1559, + 1560, 1561, 1558, 1562, 1548, 1567, 1551, 1563, 1554, 1565, + + 1550, 1554, 1573, 1552, 1555, 1555, 1572, 0, 1552, 1574, + 1557, 1560, 1558, 1561, 1562, 1563, 1568, 1560, 1561, 1567, + 1562, 1565, 1567, 1570, 1563, 1571, 1565, 1574, 1572, 1573, + 1577, 1568, 1575, 1572, 1576, 1578, 1574, 1579, 1570, 1580, + 1571, 1581, 1578, 1568, 1582, 1584, 0, 1583, 1580, 1581, + 1570, 1595, 1571, 0, 1575, 1579, 1576, 1577, 0, 1575, + 1585, 1576, 1578, 1588, 1579, 1587, 1580, 1582, 1581, 1583, + 1589, 1582, 1588, 1585, 1583, 1590, 1587, 1584, 1595, 1591, + 1605, 1592, 0, 1602, 1604, 1597, 1600, 1585, 1589, 1598, + 1588, 1587, 1587, 1590, 1591, 1592, 1597, 1589, 1600, 1603, + + 1598, 1601, 1590, 1587, 1606, 1605, 1591, 1605, 1592, 1603, + 1604, 1604, 1597, 1600, 1601, 1602, 1598, 1607, 1609, 1612, + 1610, 0, 1611, 1613, 1614, 1615, 1603, 1610, 1601, 1613, + 1618, 1606, 1617, 1617, 0, 1623, 1607, 1612, 1609, 1614, + 1615, 1616, 1618, 1622, 1607, 1609, 1612, 1610, 1611, 1611, + 1613, 1614, 1615, 1619, 1621, 1624, 1616, 1618, 1622, 1617, + 1625, 1621, 1623, 1627, 1624, 1626, 1619, 1625, 1616, 1628, + 1622, 0, 1630, 1631, 1619, 1632, 1628, 1634, 1641, 1633, + 1619, 1621, 1624, 1638, 1632, 1627, 0, 1625, 1637, 1626, + 1627, 1636, 1626, 1619, 1630, 1643, 1628, 1634, 1631, 1630, + + 1631, 1633, 1632, 1637, 1634, 1641, 1633, 1640, 1638, 1636, + 1638, 1642, 1642, 1645, 1644, 1637, 0, 1643, 1636, 1647, + 1640, 1646, 1643, 1648, 1649, 1650, 1656, 0, 1647, 1660, + 1648, 1651, 1652, 0, 1640, 1645, 1654, 0, 1642, 1644, + 1645, 1644, 1655, 1646, 1654, 1651, 1647, 1650, 1646, 1657, + 1648, 1652, 1650, 1656, 1658, 1655, 1649, 1659, 1651, 1652, + 1661, 1660, 0, 1654, 1659, 1662, 1658, 1664, 1665, 1655, + 1663, 0, 1666, 0, 1667, 1657, 1657, 1670, 1663, 0, + 1671, 1658, 1661, 1665, 1659, 1668, 1671, 1661, 1669, 1663, + 1662, 1669, 1662, 1672, 1664, 1665, 1673, 1663, 1666, 1666, + + 1667, 1667, 1670, 1668, 1670, 1663, 1669, 1671, 1677, 1674, + 1676, 1678, 1668, 1680, 1673, 1669, 0, 1684, 1669, 1681, + 1672, 1688, 1682, 1673, 1674, 1676, 1681, 1680, 1684, 1689, + 1677, 1682, 1683, 1678, 1692, 1677, 1674, 1676, 1678, 1686, + 1680, 1683, 1687, 1688, 1684, 1699, 1681, 1692, 1688, 1682, + 1694, 1689, 1696, 1701, 1686, 1692, 1689, 1687, 1695, 1683, + 1698, 1692, 1695, 1697, 1696, 1697, 1686, 1702, 1700, 1687, + 1703, 1694, 1699, 1707, 1692, 1702, 1704, 1694, 1698, 1696, + 1701, 1708, 1705, 1706, 1709, 1695, 1700, 1698, 1706, 1714, + 1697, 1710, 1711, 1703, 1702, 1700, 1705, 1703, 1704, 1711, + + 1715, 1717, 1716, 1704, 1718, 1707, 1719, 1721, 1709, 1705, + 1710, 1709, 0, 1708, 1715, 1706, 1714, 0, 1710, 1711, + 1716, 1719, 1722, 1720, 1723, 1715, 1715, 1715, 1717, 1716, + 1718, 1718, 1720, 1719, 1724, 1725, 1727, 1729, 1728, 1721, + 0, 1715, 0, 1734, 1722, 1728, 1731, 1732, 1731, 1722, + 1720, 1723, 1715, 1733, 1735, 1734, 1724, 1733, 1738, 1727, + 1729, 1724, 1736, 1727, 1729, 1728, 1737, 1725, 1739, 1732, + 1734, 1736, 1740, 1731, 1732, 1741, 1735, 1737, 1742, 1742, + 1733, 1735, 1743, 1745, 1740, 1738, 1744, 0, 1747, 1736, + 1743, 1739, 1748, 1737, 1749, 1739, 1747, 1741, 1749, 1740, + + 1748, 1750, 1741, 1751, 1750, 1742, 1752, 1753, 1744, 1743, + 1745, 1751, 1752, 1744, 1754, 1747, 1757, 1756, 1758, 1748, + 1754, 1749, 1753, 1759, 1763, 1760, 1761, 1764, 1750, 1756, + 1751, 1762, 1766, 1752, 1753, 1765, 0, 1759, 1760, 1767, + 1761, 1754, 1758, 1757, 1756, 1758, 1766, 1765, 1769, 1770, + 1759, 1763, 1760, 1761, 1764, 1772, 1776, 1762, 1762, 1766, + 1768, 1773, 1765, 1768, 1775, 1767, 1767, 1774, 1773, 1777, + 1779, 1770, 1778, 1781, 1774, 1769, 1770, 1772, 1768, 1775, + 1778, 1782, 1772, 1776, 1780, 1783, 1788, 1768, 1773, 1784, + 1768, 1775, 1787, 1780, 1774, 1785, 1777, 1779, 1789, 1778, + + 1781, 1790, 1784, 1785, 0, 1792, 1789, 1793, 1782, 1791, + 1795, 1780, 1783, 1788, 1787, 1794, 1784, 1799, 1791, 1787, + 1801, 1796, 1785, 1797, 1805, 1789, 1792, 1801, 1790, 1796, + 1794, 1793, 1792, 1803, 1793, 1797, 1791, 1795, 1798, 1802, + 1804, 1794, 1794, 1802, 1799, 1803, 1798, 1801, 1796, 1810, + 1797, 1805, 1807, 1806, 1812, 1811, 1808, 1794, 1813, 1816, + 1803, 1806, 1811, 1804, 1807, 1798, 1802, 1804, 1808, 1814, + 1814, 1813, 1815, 0, 1812, 1817, 1810, 1816, 1819, 1807, + 1806, 1812, 1811, 1808, 1820, 1813, 1816, 1821, 1822, 1823, + 1822, 1824, 1829, 1819, 0, 1825, 1814, 1824, 1815, 1815, + + 1817, 1826, 1817, 1823, 1827, 1819, 1820, 1828, 1830, 1821, + 1831, 1820, 1831, 1832, 1821, 1822, 1823, 1825, 1824, 1828, + 1833, 1834, 1825, 1826, 1829, 1835, 1827, 1832, 1826, 1837, + 1830, 1827, 1836, 1838, 1828, 1830, 1843, 1831, 1833, 1834, + 1832, 1839, 1837, 1835, 1841, 1845, 1844, 1833, 1834, 1846, + 1836, 1841, 1835, 1847, 1843, 1847, 1837, 1846, 1849, 1836, + 1847, 1851, 1852, 1843, 1839, 1838, 1855, 1850, 1839, 1849, + 0, 1841, 1844, 1844, 1852, 1846, 1846, 1845, 1850, 1853, + 1847, 1855, 1847, 1857, 1846, 1849, 1858, 1856, 1851, 1852, + 1861, 1860, 1862, 1855, 1850, 1857, 1863, 1853, 1856, 1862, + + 1864, 1858, 1866, 1868, 1867, 1869, 1853, 1870, 1871, 1872, + 1857, 1863, 1861, 1858, 1856, 1860, 1873, 1861, 1860, 1862, + 1875, 1879, 1872, 1863, 1876, 1868, 1874, 1864, 1867, 1866, + 1868, 1867, 1876, 1875, 1877, 1871, 1872, 1869, 1880, 1870, + 1881, 1874, 1873, 1873, 1879, 1883, 1882, 1875, 1879, 1886, + 0, 1876, 1883, 1874, 1884, 1889, 1886, 1887, 1888, 1890, + 1877, 1877, 1880, 1892, 1887, 1880, 1890, 1881, 1882, 1891, + 1897, 1888, 1883, 1882, 1894, 1898, 1886, 1884, 1889, 1893, + 1910, 1884, 1889, 1894, 1887, 1888, 1890, 1896, 1900, 1899, + 1903, 1891, 1897, 1904, 1905, 1892, 1891, 1897, 1896, 1907, + + 1893, 1894, 1912, 1903, 1906, 1906, 1893, 1898, 1899, 1909, + 1928, 1916, 1910, 1900, 1896, 1900, 1899, 1903, 1905, 1904, + 1904, 1905, 1911, 1913, 1918, 1907, 1907, 1924, 1926, 1912, + 1922, 1906, 1909, 1918, 1923, 1930, 1909, 1911, 1916, 1929, + 1931, 1913, 1928, 1935, 1936, 1931, 1930, 1932, 1939, 1911, + 1913, 1918, 1922, 0, 1924, 1926, 1923, 1922, 1935, 1938, + 1934, 1923, 1930, 1940, 1941, 1929, 1929, 1931, 1934, 1932, + 1935, 1936, 1940, 1943, 1932, 1944, 1941, 1938, 1947, 1945, + 1939, 1948, 1952, 1944, 0, 1949, 1938, 1934, 1945, 1950, + 1940, 1941, 1951, 1954, 1955, 1952, 1956, 1953, 1957, 1958, + + 1943, 1961, 1944, 1959, 1947, 1947, 1945, 1949, 1948, 1952, + 1953, 1950, 1949, 1960, 1965, 1954, 1950, 1951, 1959, 1951, + 1954, 1955, 1960, 1956, 1953, 1957, 1958, 1961, 1961, 1962, + 1959, 1963, 1964, 1966, 1967, 1968, 1970, 1969, 1971, 0, + 1960, 1965, 1973, 1964, 1972, 1971, 1963, 1974, 0, 1973, + 1968, 1970, 1975, 1976, 1976, 1962, 1962, 1969, 1963, 1964, + 1966, 1967, 1968, 1970, 1969, 1971, 1972, 1978, 1977, 1973, + 1975, 1972, 1980, 1979, 1974, 1977, 1979, 1981, 1982, 1975, + 1976, 1978, 1986, 1987, 1989, 1980, 1983, 0, 1987, 1984, + 1991, 1986, 1992, 1988, 1978, 1977, 1982, 1988, 1983, 1980, + + 1979, 1984, 1990, 1981, 1981, 1982, 1993, 1994, 1989, 1986, + 1987, 1989, 1991, 1983, 1992, 1990, 1984, 1991, 1995, 1992, + 1988, 1998, 1999, 2000, 2001, 2005, 0, 2004, 2003, 1990, + 2005, 1999, 2001, 1993, 1994, 2003, 2004, 0, 2007, 2000, + 0, 0, 2010, 2012, 1995, 1995, 2006, 1998, 1998, 1999, + 2000, 2001, 2005, 2006, 2004, 2003, 2007, 2008, 2009, 2013, + 2014, 2017, 2015, 2016, 2008, 2007, 2018, 2009, 2010, 2010, + 2012, 2015, 2016, 2006, 2019, 0, 2025, 2013, 2018, 2023, + 2024, 2017, 2020, 2019, 2008, 2009, 2013, 2014, 2017, 2015, + 2016, 2020, 2021, 2018, 2022, 2026, 2029, 2028, 2027, 0, + + 2034, 2019, 2022, 2021, 2026, 2028, 2023, 2024, 2025, 2020, + 2027, 2033, 2032, 2030, 0, 2036, 2035, 2040, 2029, 2021, + 2030, 2022, 2026, 2029, 2028, 2027, 2031, 2034, 0, 2038, + 2047, 2050, 0, 2031, 2032, 2040, 2033, 2038, 2033, 2032, + 2030, 2035, 2036, 2035, 2040, 2041, 2042, 2046, 2045, 2048, + 2049, 2053, 2041, 2031, 2042, 2045, 2038, 2047, 2050, 2049, + 2051, 2048, 2054, 2053, 2055, 2056, 0, 2060, 2063, 2062, + 2065, 2046, 2041, 2042, 2046, 2045, 2048, 2049, 2053, 2056, + 2066, 2058, 2064, 2051, 2062, 2054, 2059, 2051, 2058, 2054, + 2064, 2055, 2056, 2059, 2060, 2063, 2062, 2065, 2067, 0, + + 2072, 2073, 2066, 2074, 2075, 2076, 2073, 2066, 2058, 2064, + 2077, 2081, 2083, 2059, 0, 0, 2082, 2074, 2075, 0, + 2089, 2084, 2077, 2076, 2090, 2067, 2072, 2072, 2073, 2082, + 2074, 2075, 2076, 2081, 2083, 2086, 2085, 2077, 2081, 2083, + 2084, 2088, 2089, 2082, 2085, 2091, 2090, 2089, 2084, 2092, + 2093, 2090, 2095, 2088, 2086, 2094, 2096, 2091, 2097, 2098, + 2100, 0, 2086, 2085, 0, 2096, 2099, 2097, 2088, 2101, + 2102, 2103, 2091, 2104, 2095, 2094, 2092, 2093, 2108, 2095, + 2107, 2101, 2094, 2096, 2109, 2097, 2100, 2100, 2099, 2109, + 2110, 2098, 2102, 2099, 2107, 2112, 2101, 2102, 2103, 2111, + + 2104, 2113, 2108, 2114, 2115, 2108, 2116, 2107, 0, 0, + 2117, 0, 2110, 2118, 2121, 0, 2109, 2110, 2116, 2119, + 2123, 2111, 2115, 2124, 2113, 2114, 2111, 2112, 2113, 2117, + 2114, 2115, 2129, 2116, 2119, 2118, 2127, 2117, 2121, 2125, + 2118, 2121, 2123, 2126, 2128, 2124, 2119, 2123, 2125, 2130, + 2124, 2136, 2133, 2140, 2127, 0, 2135, 2126, 2129, 2129, + 2133, 2134, 2128, 2127, 2135, 2137, 2125, 2130, 2134, 2138, + 2126, 2128, 2139, 2137, 2141, 2146, 2130, 2143, 2136, 2133, + 2140, 2148, 2141, 2135, 2139, 2147, 2145, 2138, 2134, 2143, + 0, 2149, 2137, 2145, 2150, 2153, 2138, 2152, 2146, 2139, + + 2155, 2141, 2146, 2159, 2143, 2160, 2156, 2161, 2148, 2153, + 2149, 2163, 2165, 2145, 2157, 2152, 2150, 2147, 2149, 2156, + 2170, 2150, 2153, 2155, 2152, 2171, 2157, 2155, 2167, 2159, + 2159, 2172, 2160, 2156, 2161, 2167, 2169, 2173, 2163, 2165, + 2174, 2157, 2175, 2169, 2176, 2177, 2170, 2170, 2178, 2174, + 2179, 2182, 2171, 2180, 2183, 2167, 0, 0, 2172, 2184, + 2178, 2173, 2180, 2169, 2173, 2181, 2192, 2174, 2187, 2175, + 2176, 2176, 2177, 2187, 2191, 2178, 2194, 2179, 2181, 2195, + 2180, 2183, 2184, 2182, 2188, 2198, 2184, 2189, 2188, 2190, + 2199, 2193, 2181, 2193, 2189, 2191, 2190, 2200, 2192, 2194, + + 2187, 2191, 2202, 2194, 2202, 0, 2195, 2198, 2203, 2199, + 0, 2188, 2198, 2206, 2189, 2205, 2190, 2199, 2193, 2209, + 2208, 2200, 2206, 2207, 2200, 2211, 2204, 2204, 0, 2202, + 2207, 2210, 2203, 2208, 2213, 2203, 2204, 2205, 2214, 2210, + 2206, 2212, 2205, 2215, 2211, 2216, 2209, 2208, 2217, 2212, + 2207, 2218, 2211, 2204, 2204, 2219, 2220, 2220, 2210, 2217, + 2213, 2213, 2219, 2221, 2214, 2214, 2225, 2222, 2212, 2215, + 2215, 2216, 2216, 2218, 2222, 2217, 2226, 2223, 2218, 2227, + 2229, 2221, 2219, 2220, 2223, 2230, 2231, 2232, 2227, 2235, + 2221, 2236, 2233, 2225, 2222, 0, 2239, 2237, 2235, 2238, + + 2226, 2241, 0, 2226, 2223, 2230, 2227, 2229, 2239, 2232, + 2233, 2242, 2230, 2231, 2232, 2241, 2235, 2238, 2236, 2233, + 2237, 2247, 2240, 2239, 2237, 2248, 2238, 2240, 2241, 2242, + 2249, 2252, 2253, 2252, 2255, 2257, 2266, 0, 2242, 2253, + 2260, 2257, 2259, 2248, 2267, 2249, 2263, 2261, 2247, 2255, + 2264, 2268, 2248, 2264, 2240, 0, 0, 2249, 2252, 2253, + 2272, 2255, 2257, 2266, 2259, 2261, 2260, 2260, 2263, 2259, + 2269, 2267, 2270, 2263, 2261, 2271, 2264, 2264, 2268, 2270, + 2264, 2274, 2272, 2271, 2275, 2276, 0, 2272, 2269, 2277, + 2279, 2278, 2280, 2282, 2281, 2284, 2279, 2269, 0, 2270, + + 2278, 2286, 2271, 2281, 2288, 0, 2275, 2276, 2283, 2286, + 2283, 2275, 2276, 2274, 2280, 2287, 2277, 2279, 2278, 2280, + 2289, 2281, 2284, 2290, 2294, 2282, 2291, 2287, 2286, 2293, + 2292, 2288, 2294, 2295, 2289, 2283, 2296, 2290, 2297, 2297, + 2293, 2298, 2287, 2301, 2302, 2306, 2299, 2289, 2292, 2291, + 2290, 2294, 2295, 2291, 2299, 2304, 2293, 2292, 2296, 2308, + 2295, 2304, 2310, 2296, 2307, 2297, 2315, 2311, 2298, 2313, + 2301, 2302, 2306, 2299, 2311, 2307, 2312, 2313, 2318, 2319, + 2312, 2308, 2304, 2318, 2316, 2320, 2308, 2321, 2335, 2310, + 2322, 2307, 2315, 2315, 2311, 2321, 2313, 2316, 2325, 2327, + + 2323, 2324, 2336, 2312, 2329, 2318, 2319, 2323, 2322, 2324, + 2328, 2316, 2320, 2325, 2321, 2326, 2334, 2322, 2333, 0, + 2335, 2338, 2326, 2334, 2337, 2325, 2327, 2323, 2324, 2336, + 2329, 2329, 2339, 2333, 2328, 2341, 2342, 2328, 2343, 2344, + 2346, 2339, 2326, 2334, 0, 2333, 2343, 2348, 2337, 2351, + 2352, 2337, 2349, 2338, 2345, 2345, 2353, 2341, 2342, 2339, + 2349, 0, 2341, 2342, 2345, 2343, 2355, 2346, 2356, 2357, + 2358, 2344, 2354, 2361, 2348, 0, 2351, 2352, 2353, 2349, + 2359, 2345, 2345, 2353, 2364, 2354, 2366, 2369, 2355, 2367, + 2370, 2366, 2364, 2355, 2371, 2356, 2357, 2358, 2373, 2354, + + 2361, 2371, 2359, 2370, 2372, 2374, 2377, 2359, 2379, 2380, + 2378, 2364, 2381, 2366, 2369, 2367, 2367, 2370, 0, 2382, + 0, 2371, 2372, 2378, 0, 2373, 2386, 2374, 2380, 2387, + 2388, 2372, 2374, 2377, 0, 2384, 2380, 2378, 2385, 2381, + 2379, 2382, 2384, 2404, 2387, 2385, 2382, 2390, 2386, 2395, + 2391, 2388, 2392, 2386, 2393, 2394, 2387, 2388, 2391, 2392, + 2395, 2393, 2384, 2398, 2394, 2385, 2390, 2397, 2396, 2396, + 2404, 2405, 2410, 2397, 2390, 2412, 2395, 2391, 2396, 2392, + 2401, 2393, 2394, 2406, 2416, 2398, 2414, 2401, 2413, 2413, + 2398, 2417, 2418, 2420, 2397, 2396, 2396, 2427, 2405, 2410, + + 2417, 2422, 2412, 2423, 2424, 2418, 2406, 2401, 2428, 2414, + 2406, 2416, 2429, 2414, 2426, 2427, 2424, 2413, 2417, 2418, + 2420, 2422, 2430, 2426, 2427, 2431, 2423, 2434, 2422, 2432, + 2423, 2424, 2434, 2435, 2428, 2428, 2436, 2431, 2436, 2429, + 2433, 2426, 2437, 2433, 2438, 2442, 2439, 2441, 0, 2430, + 2438, 2432, 2431, 2440, 2437, 2441, 2432, 2445, 2433, 2434, + 2448, 2449, 2450, 2436, 2452, 2435, 2453, 2433, 2439, 2437, + 2433, 2438, 2442, 2439, 2441, 2440, 2455, 2457, 2456, 2460, + 2440, 2458, 2452, 2459, 2445, 2463, 2470, 2448, 2449, 2450, + 2456, 2452, 2457, 2453, 2463, 2459, 2464, 2465, 2465, 2466, + + 2467, 2471, 0, 2455, 2457, 2456, 2460, 2458, 2458, 2467, + 2459, 2469, 2463, 2473, 2471, 2472, 2485, 2481, 2470, 2475, + 2464, 2473, 2474, 2464, 2465, 2466, 2466, 2467, 2471, 2484, + 2475, 2474, 2489, 2484, 2487, 2469, 2489, 2472, 2469, 2485, + 2473, 2481, 2472, 2485, 2481, 2486, 2475, 2487, 2490, 2474, + 2493, 2491, 2486, 2495, 2492, 2496, 2484, 2494, 2500, 2489, + 2497, 2487, 2493, 2496, 2490, 2498, 2499, 2495, 2499, 2497, + 2500, 2503, 2486, 2491, 2505, 2490, 2498, 2493, 2491, 2492, + 2495, 2492, 2496, 2494, 2494, 2500, 2502, 2497, 2501, 2504, + 2516, 2506, 2498, 2499, 2507, 2501, 2508, 2509, 2503, 2502, + + 0, 2505, 2510, 2511, 2512, 2509, 2513, 2504, 2514, 2510, + 2514, 2518, 2517, 2502, 2526, 2501, 2504, 2506, 2506, 2530, + 2515, 2507, 2516, 2508, 2509, 2517, 2512, 2511, 2513, 2510, + 2511, 2512, 2515, 2513, 2519, 2514, 2521, 2523, 2518, 2517, + 2527, 2526, 2519, 2528, 2529, 2531, 2523, 2515, 2521, 2534, + 0, 2530, 2529, 2536, 0, 2532, 2537, 2534, 2533, 0, + 2536, 2519, 2528, 2521, 2523, 2538, 2527, 2527, 2532, 2537, + 2528, 2529, 2533, 2541, 2540, 2543, 2534, 2531, 2542, 2544, + 2536, 2540, 2532, 2537, 2550, 2533, 2542, 2546, 2538, 2543, + 2545, 2547, 2538, 2544, 2548, 2541, 2549, 2551, 2545, 2552, + + 2541, 2540, 2543, 2548, 2549, 2542, 2544, 2553, 2554, 2546, + 2555, 2550, 2557, 2547, 2546, 2558, 2556, 2545, 2547, 2551, + 2557, 2548, 2559, 2549, 2551, 2560, 2564, 2562, 2563, 2567, + 2554, 2552, 2555, 2553, 2553, 2554, 2563, 2555, 2556, 2557, + 2565, 0, 2570, 2556, 2559, 2572, 2564, 2558, 2565, 2559, + 2562, 2566, 2560, 2564, 2562, 2563, 2568, 2569, 2575, 2566, + 2574, 2567, 2573, 2577, 2568, 2573, 2575, 2565, 2570, 2570, + 2578, 2569, 2572, 2576, 2580, 0, 2579, 2577, 2566, 2583, + 2573, 2576, 2574, 2568, 2569, 2575, 2585, 2574, 2580, 2573, + 2577, 2584, 2573, 2582, 2582, 2586, 2578, 2578, 2579, 2584, + + 2576, 2580, 2587, 2579, 2590, 2583, 2583, 2588, 2589, 0, + 2591, 2592, 2585, 2585, 2593, 2600, 2589, 2596, 2584, 2594, + 2582, 2586, 2586, 2595, 2587, 2596, 2597, 2588, 0, 2587, + 0, 2590, 2591, 0, 2588, 2589, 2592, 2591, 2592, 2594, + 2603, 2593, 2600, 2595, 2596, 2607, 2594, 2598, 2597, 2601, + 2595, 2604, 2605, 2597, 2609, 2598, 2606, 2601, 2610, 2613, + 2605, 2611, 2603, 2612, 2606, 2616, 2610, 2603, 0, 2611, + 2617, 2607, 2607, 2604, 2598, 2614, 2601, 2620, 2604, 2605, + 2618, 2609, 2626, 2606, 2623, 2610, 2613, 2627, 2611, 2612, + 2612, 0, 2616, 2624, 0, 2614, 0, 2617, 0, 2620, + + 2618, 2624, 2614, 0, 2620, 2625, 2623, 2618, 0, 2626, + 0, 2623, 0, 2625, 2627, 0, 0, 0, 0, 0, + 2624, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2625, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2633, 2633, 2633, + 2633, 2633, 2633, 2633, 2634, 2634, 2634, 2634, 2634, 2634, + 2634, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2637, 2637, + 0, 2637, 2637, 2637, 2637, 2638, 2638, 0, 0, 0, + 2638, 2638, 2639, 2639, 0, 0, 2639, 0, 2639, 2640, + 0, 0, 0, 0, 0, 2640, 2641, 2641, 0, 0, + + 0, 2641, 2641, 2642, 0, 0, 0, 0, 0, 2642, + 2643, 2643, 0, 2643, 2643, 2643, 2643, 2644, 2644, 0, + 2644, 2644, 2644, 2644, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, + 2630 } ; @@ -3154,7 +3185,7 @@ #define YY_NO_INPUT 1 #endif -#line 3156 "" +#line 3187 "" #define INITIAL 0 #define quotedstring 1 @@ -3377,7 +3408,7 @@ { #line 206 "util/configlexer.lex" -#line 3379 "" +#line 3410 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3410,13 +3441,13 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2599 ) + if ( yy_current_state >= 2631 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7434 ); + while ( yy_base[yy_current_state] != 7525 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3601,1102 +3632,1117 @@ case 32: YY_RULE_SETUP #line 241 "util/configlexer.lex" -{ YDVAR(1, VAR_ADDITIONAL_TLS_PORT) } +{ YDVAR(1, VAR_TLS_WIN_CERT) } YY_BREAK case 33: YY_RULE_SETUP #line 242 "util/configlexer.lex" -{ YDVAR(1, VAR_ADDITIONAL_TLS_PORT) } +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } YY_BREAK case 34: YY_RULE_SETUP #line 243 "util/configlexer.lex" +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 244 "util/configlexer.lex" +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 245 "util/configlexer.lex" { YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK -case 35: -YY_RULE_SETUP -#line 244 "util/configlexer.lex" +case 37: +YY_RULE_SETUP +#line 246 "util/configlexer.lex" { YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK -case 36: -YY_RULE_SETUP -#line 245 "util/configlexer.lex" +case 38: +YY_RULE_SETUP +#line 247 "util/configlexer.lex" { YDVAR(1, VAR_INTERFACE) } YY_BREAK -case 37: -YY_RULE_SETUP -#line 246 "util/configlexer.lex" +case 39: +YY_RULE_SETUP +#line 248 "util/configlexer.lex" { YDVAR(1, VAR_INTERFACE) } YY_BREAK -case 38: -YY_RULE_SETUP -#line 247 "util/configlexer.lex" +case 40: +YY_RULE_SETUP +#line 249 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK -case 39: -YY_RULE_SETUP -#line 248 "util/configlexer.lex" +case 41: +YY_RULE_SETUP +#line 250 "util/configlexer.lex" { YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK -case 40: -YY_RULE_SETUP -#line 249 "util/configlexer.lex" +case 42: +YY_RULE_SETUP +#line 251 "util/configlexer.lex" { YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK -case 41: -YY_RULE_SETUP -#line 250 "util/configlexer.lex" +case 43: +YY_RULE_SETUP +#line 252 "util/configlexer.lex" { YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK -case 42: -YY_RULE_SETUP -#line 251 "util/configlexer.lex" +case 44: +YY_RULE_SETUP +#line 253 "util/configlexer.lex" { YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK -case 43: -YY_RULE_SETUP -#line 252 "util/configlexer.lex" +case 45: +YY_RULE_SETUP +#line 254 "util/configlexer.lex" { YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK -case 44: -YY_RULE_SETUP -#line 253 "util/configlexer.lex" +case 46: +YY_RULE_SETUP +#line 255 "util/configlexer.lex" { YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK -case 45: -YY_RULE_SETUP -#line 254 "util/configlexer.lex" +case 47: +YY_RULE_SETUP +#line 256 "util/configlexer.lex" { YDVAR(1, VAR_CHROOT) } YY_BREAK -case 46: -YY_RULE_SETUP -#line 255 "util/configlexer.lex" +case 48: +YY_RULE_SETUP +#line 257 "util/configlexer.lex" { YDVAR(1, VAR_USERNAME) } YY_BREAK -case 47: -YY_RULE_SETUP -#line 256 "util/configlexer.lex" +case 49: +YY_RULE_SETUP +#line 258 "util/configlexer.lex" { YDVAR(1, VAR_DIRECTORY) } YY_BREAK -case 48: -YY_RULE_SETUP -#line 257 "util/configlexer.lex" +case 50: +YY_RULE_SETUP +#line 259 "util/configlexer.lex" { YDVAR(1, VAR_LOGFILE) } YY_BREAK -case 49: -YY_RULE_SETUP -#line 258 "util/configlexer.lex" +case 51: +YY_RULE_SETUP +#line 260 "util/configlexer.lex" { YDVAR(1, VAR_PIDFILE) } YY_BREAK -case 50: -YY_RULE_SETUP -#line 259 "util/configlexer.lex" +case 52: +YY_RULE_SETUP +#line 261 "util/configlexer.lex" { YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK -case 51: -YY_RULE_SETUP -#line 260 "util/configlexer.lex" +case 53: +YY_RULE_SETUP +#line 262 "util/configlexer.lex" { YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK -case 52: -YY_RULE_SETUP -#line 261 "util/configlexer.lex" +case 54: +YY_RULE_SETUP +#line 263 "util/configlexer.lex" { YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK -case 53: -YY_RULE_SETUP -#line 262 "util/configlexer.lex" +case 55: +YY_RULE_SETUP +#line 264 "util/configlexer.lex" { YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK -case 54: -YY_RULE_SETUP -#line 263 "util/configlexer.lex" +case 56: +YY_RULE_SETUP +#line 265 "util/configlexer.lex" { YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK -case 55: -YY_RULE_SETUP -#line 264 "util/configlexer.lex" +case 57: +YY_RULE_SETUP +#line 266 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK -case 56: -YY_RULE_SETUP -#line 265 "util/configlexer.lex" +case 58: +YY_RULE_SETUP +#line 267 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK -case 57: -YY_RULE_SETUP -#line 266 "util/configlexer.lex" +case 59: +YY_RULE_SETUP +#line 268 "util/configlexer.lex" { YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK -case 58: -YY_RULE_SETUP -#line 267 "util/configlexer.lex" +case 60: +YY_RULE_SETUP +#line 269 "util/configlexer.lex" { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK -case 59: -YY_RULE_SETUP -#line 268 "util/configlexer.lex" +case 61: +YY_RULE_SETUP +#line 270 "util/configlexer.lex" { YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK -case 60: -YY_RULE_SETUP -#line 269 "util/configlexer.lex" +case 62: +YY_RULE_SETUP +#line 271 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK -case 61: -YY_RULE_SETUP -#line 270 "util/configlexer.lex" +case 63: +YY_RULE_SETUP +#line 272 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK -case 62: -YY_RULE_SETUP -#line 271 "util/configlexer.lex" +case 64: +YY_RULE_SETUP +#line 273 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK -case 63: -YY_RULE_SETUP -#line 272 "util/configlexer.lex" +case 65: +YY_RULE_SETUP +#line 274 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK -case 64: -YY_RULE_SETUP -#line 273 "util/configlexer.lex" +case 66: +YY_RULE_SETUP +#line 275 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK -case 65: -YY_RULE_SETUP -#line 274 "util/configlexer.lex" +case 67: +YY_RULE_SETUP +#line 276 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK -case 66: -YY_RULE_SETUP -#line 275 "util/configlexer.lex" +case 68: +YY_RULE_SETUP +#line 277 "util/configlexer.lex" { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK -case 67: -YY_RULE_SETUP -#line 276 "util/configlexer.lex" +case 69: +YY_RULE_SETUP +#line 278 "util/configlexer.lex" { YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK -case 68: -YY_RULE_SETUP -#line 277 "util/configlexer.lex" +case 70: +YY_RULE_SETUP +#line 279 "util/configlexer.lex" { YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK -case 69: -YY_RULE_SETUP -#line 278 "util/configlexer.lex" +case 71: +YY_RULE_SETUP +#line 280 "util/configlexer.lex" { YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK -case 70: -YY_RULE_SETUP -#line 279 "util/configlexer.lex" +case 72: +YY_RULE_SETUP +#line 281 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK -case 71: -YY_RULE_SETUP -#line 280 "util/configlexer.lex" +case 73: +YY_RULE_SETUP +#line 282 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK -case 72: -YY_RULE_SETUP -#line 281 "util/configlexer.lex" +case 74: +YY_RULE_SETUP +#line 283 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK -case 73: -YY_RULE_SETUP -#line 282 "util/configlexer.lex" +case 75: +YY_RULE_SETUP +#line 284 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK -case 74: -YY_RULE_SETUP -#line 283 "util/configlexer.lex" +case 76: +YY_RULE_SETUP +#line 285 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK -case 75: -YY_RULE_SETUP -#line 284 "util/configlexer.lex" +case 77: +YY_RULE_SETUP +#line 286 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK -case 76: -YY_RULE_SETUP -#line 285 "util/configlexer.lex" +case 78: +YY_RULE_SETUP +#line 287 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK -case 77: -YY_RULE_SETUP -#line 286 "util/configlexer.lex" +case 79: +YY_RULE_SETUP +#line 288 "util/configlexer.lex" { YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK -case 78: -YY_RULE_SETUP -#line 287 "util/configlexer.lex" +case 80: +YY_RULE_SETUP +#line 289 "util/configlexer.lex" { YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK -case 79: -YY_RULE_SETUP -#line 288 "util/configlexer.lex" +case 81: +YY_RULE_SETUP +#line 290 "util/configlexer.lex" { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK -case 80: -YY_RULE_SETUP -#line 289 "util/configlexer.lex" +case 82: +YY_RULE_SETUP +#line 291 "util/configlexer.lex" { YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK -case 81: -YY_RULE_SETUP -#line 290 "util/configlexer.lex" +case 83: +YY_RULE_SETUP +#line 292 "util/configlexer.lex" { YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK -case 82: -YY_RULE_SETUP -#line 291 "util/configlexer.lex" +case 84: +YY_RULE_SETUP +#line 293 "util/configlexer.lex" { YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK -case 83: -YY_RULE_SETUP -#line 292 "util/configlexer.lex" +case 85: +YY_RULE_SETUP +#line 294 "util/configlexer.lex" { YDVAR(1, VAR_PREFETCH) } YY_BREAK -case 84: -YY_RULE_SETUP -#line 293 "util/configlexer.lex" +case 86: +YY_RULE_SETUP +#line 295 "util/configlexer.lex" { YDVAR(0, VAR_STUB_ZONE) } YY_BREAK -case 85: -YY_RULE_SETUP -#line 294 "util/configlexer.lex" +case 87: +YY_RULE_SETUP +#line 296 "util/configlexer.lex" { YDVAR(1, VAR_NAME) } YY_BREAK -case 86: -YY_RULE_SETUP -#line 295 "util/configlexer.lex" +case 88: +YY_RULE_SETUP +#line 297 "util/configlexer.lex" { YDVAR(1, VAR_STUB_ADDR) } YY_BREAK -case 87: -YY_RULE_SETUP -#line 296 "util/configlexer.lex" +case 89: +YY_RULE_SETUP +#line 298 "util/configlexer.lex" { YDVAR(1, VAR_STUB_HOST) } YY_BREAK -case 88: -YY_RULE_SETUP -#line 297 "util/configlexer.lex" +case 90: +YY_RULE_SETUP +#line 299 "util/configlexer.lex" { YDVAR(1, VAR_STUB_PRIME) } YY_BREAK -case 89: -YY_RULE_SETUP -#line 298 "util/configlexer.lex" +case 91: +YY_RULE_SETUP +#line 300 "util/configlexer.lex" { YDVAR(1, VAR_STUB_FIRST) } YY_BREAK -case 90: -YY_RULE_SETUP -#line 299 "util/configlexer.lex" +case 92: +YY_RULE_SETUP +#line 301 "util/configlexer.lex" { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK -case 91: -YY_RULE_SETUP -#line 300 "util/configlexer.lex" +case 93: +YY_RULE_SETUP +#line 302 "util/configlexer.lex" { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK -case 92: -YY_RULE_SETUP -#line 301 "util/configlexer.lex" +case 94: +YY_RULE_SETUP +#line 303 "util/configlexer.lex" { YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK -case 93: -YY_RULE_SETUP -#line 302 "util/configlexer.lex" +case 95: +YY_RULE_SETUP +#line 304 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK -case 94: -YY_RULE_SETUP -#line 303 "util/configlexer.lex" +case 96: +YY_RULE_SETUP +#line 305 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK -case 95: -YY_RULE_SETUP -#line 304 "util/configlexer.lex" +case 97: +YY_RULE_SETUP +#line 306 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK -case 96: -YY_RULE_SETUP -#line 305 "util/configlexer.lex" +case 98: +YY_RULE_SETUP +#line 307 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK -case 97: -YY_RULE_SETUP -#line 306 "util/configlexer.lex" +case 99: +YY_RULE_SETUP +#line 308 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK -case 98: -YY_RULE_SETUP -#line 307 "util/configlexer.lex" +case 100: +YY_RULE_SETUP +#line 309 "util/configlexer.lex" { YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK -case 99: -YY_RULE_SETUP -#line 308 "util/configlexer.lex" +case 101: +YY_RULE_SETUP +#line 310 "util/configlexer.lex" { YDVAR(1, VAR_ZONEFILE) } YY_BREAK -case 100: -YY_RULE_SETUP -#line 309 "util/configlexer.lex" +case 102: +YY_RULE_SETUP +#line 311 "util/configlexer.lex" { YDVAR(1, VAR_MASTER) } YY_BREAK -case 101: -YY_RULE_SETUP -#line 310 "util/configlexer.lex" +case 103: +YY_RULE_SETUP +#line 312 "util/configlexer.lex" { YDVAR(1, VAR_URL) } YY_BREAK -case 102: -YY_RULE_SETUP -#line 311 "util/configlexer.lex" +case 104: +YY_RULE_SETUP +#line 313 "util/configlexer.lex" { YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK -case 103: -YY_RULE_SETUP -#line 312 "util/configlexer.lex" +case 105: +YY_RULE_SETUP +#line 314 "util/configlexer.lex" { YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK -case 104: -YY_RULE_SETUP -#line 313 "util/configlexer.lex" +case 106: +YY_RULE_SETUP +#line 315 "util/configlexer.lex" { YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK -case 105: -YY_RULE_SETUP -#line 314 "util/configlexer.lex" +case 107: +YY_RULE_SETUP +#line 316 "util/configlexer.lex" { YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK -case 106: -YY_RULE_SETUP -#line 315 "util/configlexer.lex" +case 108: +YY_RULE_SETUP +#line 317 "util/configlexer.lex" { YDVAR(0, VAR_VIEW) } YY_BREAK -case 107: -YY_RULE_SETUP -#line 316 "util/configlexer.lex" +case 109: +YY_RULE_SETUP +#line 318 "util/configlexer.lex" { YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK -case 108: -YY_RULE_SETUP -#line 317 "util/configlexer.lex" +case 110: +YY_RULE_SETUP +#line 319 "util/configlexer.lex" { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK -case 109: -YY_RULE_SETUP -#line 318 "util/configlexer.lex" +case 111: +YY_RULE_SETUP +#line 320 "util/configlexer.lex" { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK -case 110: -YY_RULE_SETUP -#line 319 "util/configlexer.lex" +case 112: +YY_RULE_SETUP +#line 321 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK -case 111: -YY_RULE_SETUP -#line 320 "util/configlexer.lex" +case 113: +YY_RULE_SETUP +#line 322 "util/configlexer.lex" { YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK -case 112: -YY_RULE_SETUP -#line 321 "util/configlexer.lex" +case 114: +YY_RULE_SETUP +#line 323 "util/configlexer.lex" { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK -case 113: -YY_RULE_SETUP -#line 322 "util/configlexer.lex" +case 115: +YY_RULE_SETUP +#line 324 "util/configlexer.lex" { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK -case 114: -YY_RULE_SETUP -#line 323 "util/configlexer.lex" +case 116: +YY_RULE_SETUP +#line 325 "util/configlexer.lex" { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK -case 115: -YY_RULE_SETUP -#line 324 "util/configlexer.lex" +case 117: +YY_RULE_SETUP +#line 326 "util/configlexer.lex" { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK -case 116: -YY_RULE_SETUP -#line 325 "util/configlexer.lex" +case 118: +YY_RULE_SETUP +#line 327 "util/configlexer.lex" { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK -case 117: -YY_RULE_SETUP -#line 326 "util/configlexer.lex" +case 119: +YY_RULE_SETUP +#line 328 "util/configlexer.lex" { YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK -case 118: -YY_RULE_SETUP -#line 327 "util/configlexer.lex" +case 120: +YY_RULE_SETUP +#line 329 "util/configlexer.lex" { YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK -case 119: -YY_RULE_SETUP -#line 328 "util/configlexer.lex" +case 121: +YY_RULE_SETUP +#line 330 "util/configlexer.lex" { YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK -case 120: -YY_RULE_SETUP -#line 329 "util/configlexer.lex" +case 122: +YY_RULE_SETUP +#line 331 "util/configlexer.lex" { YDVAR(1, VAR_IDENTITY) } YY_BREAK -case 121: -YY_RULE_SETUP -#line 330 "util/configlexer.lex" +case 123: +YY_RULE_SETUP +#line 332 "util/configlexer.lex" { YDVAR(1, VAR_VERSION) } YY_BREAK -case 122: -YY_RULE_SETUP -#line 331 "util/configlexer.lex" +case 124: +YY_RULE_SETUP +#line 333 "util/configlexer.lex" { YDVAR(1, VAR_MODULE_CONF) } YY_BREAK -case 123: -YY_RULE_SETUP -#line 332 "util/configlexer.lex" +case 125: +YY_RULE_SETUP +#line 334 "util/configlexer.lex" { YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK -case 124: -YY_RULE_SETUP -#line 333 "util/configlexer.lex" +case 126: +YY_RULE_SETUP +#line 335 "util/configlexer.lex" { YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK -case 125: -YY_RULE_SETUP -#line 334 "util/configlexer.lex" +case 127: +YY_RULE_SETUP +#line 336 "util/configlexer.lex" { YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK -case 126: -YY_RULE_SETUP -#line 335 "util/configlexer.lex" +case 128: +YY_RULE_SETUP +#line 337 "util/configlexer.lex" { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK -case 127: -YY_RULE_SETUP -#line 336 "util/configlexer.lex" +case 129: +YY_RULE_SETUP +#line 338 "util/configlexer.lex" { YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK -case 128: -YY_RULE_SETUP -#line 337 "util/configlexer.lex" +case 130: +YY_RULE_SETUP +#line 339 "util/configlexer.lex" { YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK -case 129: -YY_RULE_SETUP -#line 338 "util/configlexer.lex" +case 131: +YY_RULE_SETUP +#line 340 "util/configlexer.lex" { YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK -case 130: -YY_RULE_SETUP -#line 339 "util/configlexer.lex" +case 132: +YY_RULE_SETUP +#line 341 "util/configlexer.lex" { YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK -case 131: -YY_RULE_SETUP -#line 340 "util/configlexer.lex" +case 133: +YY_RULE_SETUP +#line 342 "util/configlexer.lex" { YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK -case 132: -YY_RULE_SETUP -#line 341 "util/configlexer.lex" +case 134: +YY_RULE_SETUP +#line 343 "util/configlexer.lex" { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK -case 133: -YY_RULE_SETUP -#line 342 "util/configlexer.lex" +case 135: +YY_RULE_SETUP +#line 344 "util/configlexer.lex" { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK -case 134: -YY_RULE_SETUP -#line 343 "util/configlexer.lex" +case 136: +YY_RULE_SETUP +#line 345 "util/configlexer.lex" { YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK -case 135: -YY_RULE_SETUP -#line 344 "util/configlexer.lex" +case 137: +YY_RULE_SETUP +#line 346 "util/configlexer.lex" { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK -case 136: -YY_RULE_SETUP -#line 345 "util/configlexer.lex" +case 138: +YY_RULE_SETUP +#line 347 "util/configlexer.lex" { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK -case 137: -YY_RULE_SETUP -#line 346 "util/configlexer.lex" +case 139: +YY_RULE_SETUP +#line 348 "util/configlexer.lex" { YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK -case 138: -YY_RULE_SETUP -#line 347 "util/configlexer.lex" +case 140: +YY_RULE_SETUP +#line 349 "util/configlexer.lex" { YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK -case 139: -YY_RULE_SETUP -#line 348 "util/configlexer.lex" +case 141: +YY_RULE_SETUP +#line 350 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK -case 140: -YY_RULE_SETUP -#line 349 "util/configlexer.lex" +case 142: +YY_RULE_SETUP +#line 351 "util/configlexer.lex" { YDVAR(1, VAR_FAKE_DSA) } YY_BREAK -case 141: -YY_RULE_SETUP -#line 350 "util/configlexer.lex" +case 143: +YY_RULE_SETUP +#line 352 "util/configlexer.lex" { YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK -case 142: -YY_RULE_SETUP -#line 351 "util/configlexer.lex" +case 144: +YY_RULE_SETUP +#line 353 "util/configlexer.lex" { YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK -case 143: -YY_RULE_SETUP -#line 352 "util/configlexer.lex" +case 145: +YY_RULE_SETUP +#line 354 "util/configlexer.lex" { YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK -case 144: -YY_RULE_SETUP -#line 353 "util/configlexer.lex" +case 146: +YY_RULE_SETUP +#line 355 "util/configlexer.lex" { YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK -case 145: -YY_RULE_SETUP -#line 354 "util/configlexer.lex" +case 147: +YY_RULE_SETUP +#line 356 "util/configlexer.lex" { YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK -case 146: -YY_RULE_SETUP -#line 355 "util/configlexer.lex" +case 148: +YY_RULE_SETUP +#line 357 "util/configlexer.lex" { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK -case 147: -YY_RULE_SETUP -#line 357 "util/configlexer.lex" +case 149: +YY_RULE_SETUP +#line 359 "util/configlexer.lex" { YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK -case 148: -YY_RULE_SETUP -#line 358 "util/configlexer.lex" +case 150: +YY_RULE_SETUP +#line 360 "util/configlexer.lex" { YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK -case 149: -YY_RULE_SETUP -#line 359 "util/configlexer.lex" +case 151: +YY_RULE_SETUP +#line 361 "util/configlexer.lex" { YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK -case 150: -YY_RULE_SETUP -#line 360 "util/configlexer.lex" +case 152: +YY_RULE_SETUP +#line 362 "util/configlexer.lex" { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK -case 151: -YY_RULE_SETUP -#line 361 "util/configlexer.lex" +case 153: +YY_RULE_SETUP +#line 363 "util/configlexer.lex" { YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK -case 152: -YY_RULE_SETUP -#line 362 "util/configlexer.lex" +case 154: +YY_RULE_SETUP +#line 364 "util/configlexer.lex" { YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK -case 153: -YY_RULE_SETUP -#line 363 "util/configlexer.lex" +case 155: +YY_RULE_SETUP +#line 365 "util/configlexer.lex" { YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK -case 154: -YY_RULE_SETUP -#line 364 "util/configlexer.lex" +case 156: +YY_RULE_SETUP +#line 366 "util/configlexer.lex" { YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK -case 155: -YY_RULE_SETUP -#line 365 "util/configlexer.lex" +case 157: +YY_RULE_SETUP +#line 367 "util/configlexer.lex" { YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK -case 156: -YY_RULE_SETUP -#line 366 "util/configlexer.lex" +case 158: +YY_RULE_SETUP +#line 368 "util/configlexer.lex" { YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK -case 157: -YY_RULE_SETUP -#line 367 "util/configlexer.lex" +case 159: +YY_RULE_SETUP +#line 369 "util/configlexer.lex" { YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK -case 158: -YY_RULE_SETUP -#line 368 "util/configlexer.lex" +case 160: +YY_RULE_SETUP +#line 370 "util/configlexer.lex" { YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK -case 159: -YY_RULE_SETUP -#line 369 "util/configlexer.lex" +case 161: +YY_RULE_SETUP +#line 371 "util/configlexer.lex" { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK -case 160: -YY_RULE_SETUP -#line 370 "util/configlexer.lex" +case 162: +YY_RULE_SETUP +#line 372 "util/configlexer.lex" { YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK -case 161: -YY_RULE_SETUP -#line 371 "util/configlexer.lex" +case 163: +YY_RULE_SETUP +#line 373 "util/configlexer.lex" { YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK -case 162: -YY_RULE_SETUP -#line 372 "util/configlexer.lex" +case 164: +YY_RULE_SETUP +#line 374 "util/configlexer.lex" { YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK -case 163: -YY_RULE_SETUP -#line 373 "util/configlexer.lex" +case 165: +YY_RULE_SETUP +#line 375 "util/configlexer.lex" { YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK -case 164: -YY_RULE_SETUP -#line 374 "util/configlexer.lex" +case 166: +YY_RULE_SETUP +#line 376 "util/configlexer.lex" { YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK -case 165: -YY_RULE_SETUP -#line 375 "util/configlexer.lex" +case 167: +YY_RULE_SETUP +#line 377 "util/configlexer.lex" { YDVAR(1, VAR_SHM_KEY) } YY_BREAK -case 166: -YY_RULE_SETUP -#line 376 "util/configlexer.lex" +case 168: +YY_RULE_SETUP +#line 378 "util/configlexer.lex" { YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK -case 167: -YY_RULE_SETUP -#line 377 "util/configlexer.lex" +case 169: +YY_RULE_SETUP +#line 379 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK -case 168: -YY_RULE_SETUP -#line 378 "util/configlexer.lex" +case 170: +YY_RULE_SETUP +#line 380 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK -case 169: -YY_RULE_SETUP -#line 379 "util/configlexer.lex" +case 171: +YY_RULE_SETUP +#line 381 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK -case 170: -YY_RULE_SETUP -#line 380 "util/configlexer.lex" +case 172: +YY_RULE_SETUP +#line 382 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK -case 171: -YY_RULE_SETUP -#line 381 "util/configlexer.lex" +case 173: +YY_RULE_SETUP +#line 383 "util/configlexer.lex" { YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK -case 172: -YY_RULE_SETUP -#line 382 "util/configlexer.lex" +case 174: +YY_RULE_SETUP +#line 384 "util/configlexer.lex" { YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK -case 173: -YY_RULE_SETUP -#line 383 "util/configlexer.lex" +case 175: +YY_RULE_SETUP +#line 385 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK -case 174: -YY_RULE_SETUP -#line 384 "util/configlexer.lex" +case 176: +YY_RULE_SETUP +#line 386 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK -case 175: -YY_RULE_SETUP -#line 385 "util/configlexer.lex" +case 177: +YY_RULE_SETUP +#line 387 "util/configlexer.lex" { YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK -case 176: -YY_RULE_SETUP -#line 386 "util/configlexer.lex" +case 178: +YY_RULE_SETUP +#line 388 "util/configlexer.lex" { YDVAR(0, VAR_PYTHON) } YY_BREAK -case 177: -YY_RULE_SETUP -#line 387 "util/configlexer.lex" +case 179: +YY_RULE_SETUP +#line 389 "util/configlexer.lex" { YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK -case 178: -YY_RULE_SETUP -#line 388 "util/configlexer.lex" +case 180: +YY_RULE_SETUP +#line 390 "util/configlexer.lex" { YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK -case 179: -YY_RULE_SETUP -#line 389 "util/configlexer.lex" +case 181: +YY_RULE_SETUP +#line 391 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK -case 180: -YY_RULE_SETUP -#line 390 "util/configlexer.lex" +case 182: +YY_RULE_SETUP +#line 392 "util/configlexer.lex" { YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK -case 181: -YY_RULE_SETUP -#line 391 "util/configlexer.lex" +case 183: +YY_RULE_SETUP +#line 393 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK -case 182: -YY_RULE_SETUP -#line 392 "util/configlexer.lex" +case 184: +YY_RULE_SETUP +#line 394 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK -case 183: -YY_RULE_SETUP -#line 393 "util/configlexer.lex" +case 185: +YY_RULE_SETUP +#line 395 "util/configlexer.lex" { YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK -case 184: -YY_RULE_SETUP -#line 394 "util/configlexer.lex" +case 186: +YY_RULE_SETUP +#line 396 "util/configlexer.lex" { YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK -case 185: -YY_RULE_SETUP -#line 395 "util/configlexer.lex" +case 187: +YY_RULE_SETUP +#line 397 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK -case 186: -YY_RULE_SETUP -#line 396 "util/configlexer.lex" +case 188: +YY_RULE_SETUP +#line 398 "util/configlexer.lex" { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK -case 187: -YY_RULE_SETUP -#line 397 "util/configlexer.lex" +case 189: +YY_RULE_SETUP +#line 399 "util/configlexer.lex" { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK -case 188: -YY_RULE_SETUP -#line 398 "util/configlexer.lex" +case 190: +YY_RULE_SETUP +#line 400 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK -case 189: -YY_RULE_SETUP -#line 399 "util/configlexer.lex" +case 191: +YY_RULE_SETUP +#line 401 "util/configlexer.lex" { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK -case 190: -YY_RULE_SETUP -#line 400 "util/configlexer.lex" +case 192: +YY_RULE_SETUP +#line 402 "util/configlexer.lex" { YDVAR(0, VAR_DNSTAP) } YY_BREAK -case 191: -YY_RULE_SETUP -#line 401 "util/configlexer.lex" +case 193: +YY_RULE_SETUP +#line 403 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK -case 192: -YY_RULE_SETUP -#line 402 "util/configlexer.lex" +case 194: +YY_RULE_SETUP +#line 404 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK -case 193: -YY_RULE_SETUP -#line 403 "util/configlexer.lex" +case 195: +YY_RULE_SETUP +#line 405 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK -case 194: -YY_RULE_SETUP -#line 404 "util/configlexer.lex" +case 196: +YY_RULE_SETUP +#line 406 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK -case 195: -YY_RULE_SETUP -#line 405 "util/configlexer.lex" +case 197: +YY_RULE_SETUP +#line 407 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK -case 196: -YY_RULE_SETUP -#line 406 "util/configlexer.lex" +case 198: +YY_RULE_SETUP +#line 408 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK -case 197: -YY_RULE_SETUP -#line 407 "util/configlexer.lex" +case 199: +YY_RULE_SETUP +#line 409 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK -case 198: -YY_RULE_SETUP -#line 409 "util/configlexer.lex" +case 200: +YY_RULE_SETUP +#line 411 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK -case 199: -YY_RULE_SETUP -#line 411 "util/configlexer.lex" +case 201: +YY_RULE_SETUP +#line 413 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK -case 200: -YY_RULE_SETUP -#line 413 "util/configlexer.lex" +case 202: +YY_RULE_SETUP +#line 415 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK -case 201: -YY_RULE_SETUP -#line 415 "util/configlexer.lex" +case 203: +YY_RULE_SETUP +#line 417 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK -case 202: -YY_RULE_SETUP -#line 417 "util/configlexer.lex" +case 204: +YY_RULE_SETUP +#line 419 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK -case 203: -YY_RULE_SETUP -#line 419 "util/configlexer.lex" +case 205: +YY_RULE_SETUP +#line 421 "util/configlexer.lex" { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK -case 204: -YY_RULE_SETUP -#line 420 "util/configlexer.lex" +case 206: +YY_RULE_SETUP +#line 422 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK -case 205: -YY_RULE_SETUP -#line 421 "util/configlexer.lex" +case 207: +YY_RULE_SETUP +#line 423 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT) } YY_BREAK -case 206: -YY_RULE_SETUP -#line 422 "util/configlexer.lex" +case 208: +YY_RULE_SETUP +#line 424 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK -case 207: -YY_RULE_SETUP -#line 423 "util/configlexer.lex" +case 209: +YY_RULE_SETUP +#line 425 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK -case 208: -YY_RULE_SETUP -#line 424 "util/configlexer.lex" +case 210: +YY_RULE_SETUP +#line 426 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK -case 209: -YY_RULE_SETUP -#line 425 "util/configlexer.lex" +case 211: +YY_RULE_SETUP +#line 427 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK -case 210: -YY_RULE_SETUP -#line 426 "util/configlexer.lex" +case 212: +YY_RULE_SETUP +#line 428 "util/configlexer.lex" { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK -case 211: -YY_RULE_SETUP -#line 427 "util/configlexer.lex" +case 213: +YY_RULE_SETUP +#line 429 "util/configlexer.lex" { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK -case 212: -YY_RULE_SETUP -#line 428 "util/configlexer.lex" +case 214: +YY_RULE_SETUP +#line 430 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK -case 213: -YY_RULE_SETUP -#line 429 "util/configlexer.lex" +case 215: +YY_RULE_SETUP +#line 431 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK -case 214: -YY_RULE_SETUP -#line 430 "util/configlexer.lex" +case 216: +YY_RULE_SETUP +#line 432 "util/configlexer.lex" { YDVAR(1, VAR_LOW_RTT) } YY_BREAK -case 215: -YY_RULE_SETUP -#line 431 "util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT_PCT) } - YY_BREAK -case 216: -YY_RULE_SETUP -#line 432 "util/configlexer.lex" +case 217: +YY_RULE_SETUP +#line 433 "util/configlexer.lex" +{ YDVAR(1, VAR_LOW_RTT_PERMIL) } + YY_BREAK +case 218: +YY_RULE_SETUP +#line 434 "util/configlexer.lex" +{ YDVAR(1, VAR_LOW_RTT_PERMIL) } + YY_BREAK +case 219: +YY_RULE_SETUP +#line 435 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK -case 217: -YY_RULE_SETUP -#line 433 "util/configlexer.lex" +case 220: +YY_RULE_SETUP +#line 436 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK -case 218: -YY_RULE_SETUP -#line 434 "util/configlexer.lex" +case 221: +YY_RULE_SETUP +#line 437 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK -case 219: -YY_RULE_SETUP -#line 435 "util/configlexer.lex" +case 222: +YY_RULE_SETUP +#line 438 "util/configlexer.lex" { YDVAR(0, VAR_DNSCRYPT) } YY_BREAK -case 220: -YY_RULE_SETUP -#line 436 "util/configlexer.lex" +case 223: +YY_RULE_SETUP +#line 439 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK -case 221: -YY_RULE_SETUP -#line 437 "util/configlexer.lex" +case 224: +YY_RULE_SETUP +#line 440 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK -case 222: -YY_RULE_SETUP -#line 438 "util/configlexer.lex" +case 225: +YY_RULE_SETUP +#line 441 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK -case 223: -YY_RULE_SETUP -#line 439 "util/configlexer.lex" +case 226: +YY_RULE_SETUP +#line 442 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK -case 224: -YY_RULE_SETUP -#line 440 "util/configlexer.lex" +case 227: +YY_RULE_SETUP +#line 443 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK -case 225: -YY_RULE_SETUP -#line 441 "util/configlexer.lex" +case 228: +YY_RULE_SETUP +#line 444 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK -case 226: -YY_RULE_SETUP -#line 442 "util/configlexer.lex" +case 229: +YY_RULE_SETUP +#line 445 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK -case 227: -YY_RULE_SETUP -#line 444 "util/configlexer.lex" +case 230: +YY_RULE_SETUP +#line 447 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK -case 228: -YY_RULE_SETUP -#line 446 "util/configlexer.lex" +case 231: +YY_RULE_SETUP +#line 449 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK -case 229: -YY_RULE_SETUP -#line 447 "util/configlexer.lex" +case 232: +YY_RULE_SETUP +#line 450 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK -case 230: -YY_RULE_SETUP -#line 448 "util/configlexer.lex" +case 233: +YY_RULE_SETUP +#line 451 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK -case 231: -YY_RULE_SETUP -#line 449 "util/configlexer.lex" +case 234: +YY_RULE_SETUP +#line 452 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK -case 232: -YY_RULE_SETUP -#line 450 "util/configlexer.lex" +case 235: +YY_RULE_SETUP +#line 453 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK -case 233: -YY_RULE_SETUP -#line 451 "util/configlexer.lex" +case 236: +YY_RULE_SETUP +#line 454 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK -case 234: -YY_RULE_SETUP -#line 452 "util/configlexer.lex" +case 237: +YY_RULE_SETUP +#line 455 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK -case 235: -YY_RULE_SETUP -#line 453 "util/configlexer.lex" +case 238: +YY_RULE_SETUP +#line 456 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK -case 236: -YY_RULE_SETUP -#line 454 "util/configlexer.lex" +case 239: +YY_RULE_SETUP +#line 457 "util/configlexer.lex" { YDVAR(0, VAR_CACHEDB) } YY_BREAK -case 237: -YY_RULE_SETUP -#line 455 "util/configlexer.lex" +case 240: +YY_RULE_SETUP +#line 458 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK -case 238: -YY_RULE_SETUP -#line 456 "util/configlexer.lex" +case 241: +YY_RULE_SETUP +#line 459 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK -case 239: -YY_RULE_SETUP -#line 457 "util/configlexer.lex" +case 242: +YY_RULE_SETUP +#line 460 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK -case 240: -YY_RULE_SETUP -#line 458 "util/configlexer.lex" +case 243: +YY_RULE_SETUP +#line 461 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK -case 241: -YY_RULE_SETUP -#line 459 "util/configlexer.lex" +case 244: +YY_RULE_SETUP +#line 462 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK -case 242: -YY_RULE_SETUP -#line 460 "util/configlexer.lex" +case 245: +YY_RULE_SETUP +#line 463 "util/configlexer.lex" { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK -case 243: -/* rule 243 can match eol */ -YY_RULE_SETUP -#line 461 "util/configlexer.lex" +case 246: +/* rule 246 can match eol */ +YY_RULE_SETUP +#line 464 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 244: -YY_RULE_SETUP -#line 464 "util/configlexer.lex" +case 247: +YY_RULE_SETUP +#line 467 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 465 "util/configlexer.lex" +#line 468 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 245: -YY_RULE_SETUP -#line 470 "util/configlexer.lex" +case 248: +YY_RULE_SETUP +#line 473 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 246: -/* rule 246 can match eol */ -YY_RULE_SETUP -#line 471 "util/configlexer.lex" +case 249: +/* rule 249 can match eol */ +YY_RULE_SETUP +#line 474 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 247: -YY_RULE_SETUP -#line 473 "util/configlexer.lex" +case 250: +YY_RULE_SETUP +#line 476 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4709,34 +4755,34 @@ } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 248: -YY_RULE_SETUP -#line 485 "util/configlexer.lex" +case 251: +YY_RULE_SETUP +#line 488 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 486 "util/configlexer.lex" +#line 489 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 249: -YY_RULE_SETUP -#line 491 "util/configlexer.lex" +case 252: +YY_RULE_SETUP +#line 494 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 250: -/* rule 250 can match eol */ -YY_RULE_SETUP -#line 492 "util/configlexer.lex" +case 253: +/* rule 253 can match eol */ +YY_RULE_SETUP +#line 495 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 251: -YY_RULE_SETUP -#line 494 "util/configlexer.lex" +case 254: +YY_RULE_SETUP +#line 497 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4749,38 +4795,38 @@ } YY_BREAK /* include: directive */ -case 252: -YY_RULE_SETUP -#line 506 "util/configlexer.lex" +case 255: +YY_RULE_SETUP +#line 509 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 508 "util/configlexer.lex" +#line 511 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 253: -YY_RULE_SETUP -#line 512 "util/configlexer.lex" +case 256: +YY_RULE_SETUP +#line 515 "util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 254: -/* rule 254 can match eol */ -YY_RULE_SETUP -#line 513 "util/configlexer.lex" +case 257: +/* rule 257 can match eol */ +YY_RULE_SETUP +#line 516 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 255: -YY_RULE_SETUP -#line 514 "util/configlexer.lex" +case 258: +YY_RULE_SETUP +#line 517 "util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 256: -YY_RULE_SETUP -#line 515 "util/configlexer.lex" +case 259: +YY_RULE_SETUP +#line 518 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4788,27 +4834,27 @@ } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 520 "util/configlexer.lex" +#line 523 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 257: -YY_RULE_SETUP -#line 524 "util/configlexer.lex" +case 260: +YY_RULE_SETUP +#line 527 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 258: -/* rule 258 can match eol */ -YY_RULE_SETUP -#line 525 "util/configlexer.lex" +case 261: +/* rule 261 can match eol */ +YY_RULE_SETUP +#line 528 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 259: -YY_RULE_SETUP -#line 527 "util/configlexer.lex" +case 262: +YY_RULE_SETUP +#line 530 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4818,7 +4864,7 @@ YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 533 "util/configlexer.lex" +#line 536 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4830,33 +4876,33 @@ } } YY_BREAK -case 260: -YY_RULE_SETUP -#line 544 "util/configlexer.lex" +case 263: +YY_RULE_SETUP +#line 547 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 261: -YY_RULE_SETUP -#line 548 "util/configlexer.lex" +case 264: +YY_RULE_SETUP +#line 551 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 262: -YY_RULE_SETUP -#line 552 "util/configlexer.lex" +case 265: +YY_RULE_SETUP +#line 555 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 263: -YY_RULE_SETUP -#line 556 "util/configlexer.lex" +case 266: +YY_RULE_SETUP +#line 559 "util/configlexer.lex" ECHO; YY_BREAK -#line 4858 "" +#line 4904 "" case YY_END_OF_BUFFER: { @@ -5147,7 +5193,7 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2599 ) + if ( yy_current_state >= 2631 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -5175,11 +5221,11 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2599 ) + if ( yy_current_state >= 2631 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2598); + yy_is_jam = (yy_current_state == 2630); return yy_is_jam ? 0 : yy_current_state; } @@ -5818,7 +5864,7 @@ #define YYTABLES_NAME "yytables" -#line 556 "util/configlexer.lex" - - - +#line 559 "util/configlexer.lex" + + + diff --git a/util/configlexer.lex b/util/configlexer.lex index 73dfe4b..6019b13 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -238,8 +238,10 @@ tls-port{COLON} { YDVAR(1, VAR_SSL_PORT) } ssl-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } tls-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } -additional-ssl-port{COLON} { YDVAR(1, VAR_ADDITIONAL_TLS_PORT) } -additional-tls-port{COLON} { YDVAR(1, VAR_ADDITIONAL_TLS_PORT) } +tls-win-cert{COLON} { YDVAR(1, VAR_TLS_WIN_CERT) } +additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } +additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } +tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } @@ -428,7 +430,8 @@ ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) } low-rtt{COLON} { YDVAR(1, VAR_LOW_RTT) } -low-rtt-pct{COLON} { YDVAR(1, VAR_LOW_RTT_PCT) } +low-rtt-pct{COLON} { YDVAR(1, VAR_LOW_RTT_PERMIL) } +low-rtt-permil{COLON} { YDVAR(1, VAR_LOW_RTT_PERMIL) } response-ip-tag{COLON} { YDVAR(2, VAR_RESPONSE_IP_TAG) } response-ip{COLON} { YDVAR(2, VAR_RESPONSE_IP) } response-ip-data{COLON} { YDVAR(2, VAR_RESPONSE_IP_DATA) } diff --git a/util/configparser.c b/util/configparser.c index d0e99df..227dd0a 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -361,10 +361,11 @@ VAR_URL = 490, VAR_FOR_DOWNSTREAM = 491, VAR_FALLBACK_ENABLED = 492, - VAR_ADDITIONAL_TLS_PORT = 493, + VAR_TLS_ADDITIONAL_PORTS = 493, VAR_LOW_RTT = 494, - VAR_LOW_RTT_PCT = 495, - VAR_ALLOW_NOTIFY = 496 + VAR_LOW_RTT_PERMIL = 495, + VAR_ALLOW_NOTIFY = 496, + VAR_TLS_WIN_CERT = 497 }; #endif /* Tokens. */ @@ -603,10 +604,11 @@ #define VAR_URL 490 #define VAR_FOR_DOWNSTREAM 491 #define VAR_FALLBACK_ENABLED 492 -#define VAR_ADDITIONAL_TLS_PORT 493 +#define VAR_TLS_ADDITIONAL_PORTS 493 #define VAR_LOW_RTT 494 -#define VAR_LOW_RTT_PCT 495 +#define VAR_LOW_RTT_PERMIL 495 #define VAR_ALLOW_NOTIFY 496 +#define VAR_TLS_WIN_CERT 497 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -617,7 +619,7 @@ char* str; -#line 621 "util/configparser.c" /* yacc.c:355 */ +#line 623 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -634,7 +636,7 @@ /* Copy the second part of user declarations. */ -#line 638 "util/configparser.c" /* yacc.c:358 */ +#line 640 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -876,21 +878,21 @@ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 489 +#define YYLAST 491 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 242 +#define YYNTOKENS 243 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 262 +#define YYNNTS 263 /* YYNRULES -- Number of rules. */ -#define YYNRULES 501 +#define YYNRULES 503 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 750 +#define YYNSTATES 753 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 496 +#define YYMAXUTOK 497 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -948,7 +950,7 @@ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241 + 235, 236, 237, 238, 239, 240, 241, 242 }; #if YYDEBUG @@ -973,39 +975,39 @@ 237, 237, 238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 246, 247, 247, 248, 248, 249, 249, 250, 250, - 251, 251, 251, 252, 254, 266, 267, 268, 268, 268, - 268, 268, 269, 271, 283, 284, 285, 285, 285, 285, - 286, 288, 302, 303, 304, 304, 304, 304, 305, 305, - 305, 307, 323, 324, 325, 325, 325, 325, 326, 326, - 326, 327, 329, 338, 347, 358, 367, 376, 385, 396, - 405, 416, 429, 444, 455, 472, 489, 502, 517, 526, - 535, 544, 553, 562, 571, 580, 589, 598, 607, 616, - 625, 634, 643, 652, 661, 668, 675, 684, 691, 699, - 708, 717, 731, 740, 749, 758, 765, 772, 798, 806, - 813, 820, 827, 834, 842, 850, 858, 865, 876, 887, - 894, 903, 912, 921, 928, 935, 943, 951, 961, 971, - 981, 994, 1005, 1013, 1026, 1035, 1044, 1053, 1063, 1073, - 1081, 1094, 1103, 1111, 1120, 1128, 1141, 1150, 1157, 1167, - 1177, 1187, 1197, 1207, 1217, 1227, 1237, 1244, 1251, 1258, - 1267, 1276, 1285, 1292, 1302, 1319, 1326, 1344, 1357, 1370, - 1379, 1388, 1397, 1406, 1416, 1426, 1437, 1446, 1455, 1468, - 1481, 1490, 1497, 1506, 1515, 1524, 1533, 1541, 1554, 1562, - 1591, 1598, 1613, 1623, 1633, 1640, 1647, 1656, 1670, 1689, - 1708, 1720, 1732, 1744, 1755, 1774, 1784, 1793, 1801, 1809, - 1822, 1835, 1848, 1861, 1870, 1879, 1888, 1897, 1907, 1917, - 1930, 1943, 1954, 1967, 1978, 1991, 2001, 2008, 2015, 2024, - 2034, 2044, 2054, 2061, 2068, 2077, 2087, 2097, 2104, 2111, - 2118, 2126, 2136, 2146, 2156, 2166, 2196, 2206, 2214, 2223, - 2238, 2247, 2252, 2253, 2254, 2254, 2254, 2255, 2255, 2255, - 2256, 2256, 2258, 2268, 2277, 2284, 2294, 2301, 2308, 2315, - 2322, 2327, 2328, 2329, 2329, 2330, 2330, 2331, 2331, 2332, - 2333, 2334, 2335, 2336, 2337, 2339, 2347, 2354, 2362, 2370, - 2377, 2384, 2393, 2402, 2411, 2420, 2429, 2438, 2443, 2444, - 2445, 2447, 2453, 2463, 2470, 2479, 2487, 2493, 2494, 2496, - 2496, 2496, 2497, 2497, 2498, 2499, 2500, 2501, 2502, 2504, - 2514, 2524, 2531, 2540, 2547, 2556, 2564, 2577, 2585, 2598, - 2603, 2604, 2605, 2605, 2606, 2606, 2606, 2608, 2622, 2637, - 2649, 2664 + 251, 251, 251, 252, 252, 254, 266, 267, 268, 268, + 268, 268, 268, 269, 271, 283, 284, 285, 285, 285, + 285, 286, 288, 302, 303, 304, 304, 304, 304, 305, + 305, 305, 307, 323, 324, 325, 325, 325, 325, 326, + 326, 326, 327, 329, 338, 347, 358, 367, 376, 385, + 396, 405, 416, 429, 444, 455, 472, 489, 502, 517, + 526, 535, 544, 553, 562, 571, 580, 589, 598, 607, + 616, 625, 634, 643, 652, 661, 668, 675, 684, 691, + 700, 708, 717, 726, 740, 749, 758, 767, 774, 781, + 807, 815, 822, 829, 836, 843, 851, 859, 867, 874, + 885, 896, 903, 912, 921, 930, 937, 944, 952, 960, + 970, 980, 990, 1003, 1014, 1022, 1035, 1044, 1053, 1062, + 1072, 1082, 1090, 1103, 1112, 1120, 1129, 1137, 1150, 1159, + 1166, 1176, 1186, 1196, 1206, 1216, 1226, 1236, 1246, 1253, + 1260, 1267, 1276, 1285, 1294, 1301, 1311, 1329, 1336, 1354, + 1367, 1380, 1389, 1398, 1407, 1416, 1426, 1436, 1447, 1456, + 1465, 1478, 1491, 1500, 1507, 1516, 1525, 1534, 1543, 1551, + 1564, 1572, 1601, 1608, 1623, 1633, 1643, 1650, 1657, 1666, + 1680, 1699, 1718, 1730, 1742, 1754, 1765, 1784, 1794, 1803, + 1811, 1819, 1832, 1845, 1858, 1871, 1880, 1889, 1898, 1907, + 1917, 1927, 1940, 1953, 1964, 1977, 1988, 2001, 2011, 2018, + 2025, 2034, 2044, 2054, 2064, 2071, 2078, 2087, 2097, 2107, + 2114, 2121, 2128, 2136, 2146, 2156, 2166, 2176, 2206, 2216, + 2224, 2233, 2248, 2257, 2262, 2263, 2264, 2264, 2264, 2265, + 2265, 2265, 2266, 2266, 2268, 2278, 2287, 2294, 2304, 2311, + 2318, 2325, 2332, 2337, 2338, 2339, 2339, 2340, 2340, 2341, + 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2349, 2357, 2364, + 2372, 2380, 2387, 2394, 2403, 2412, 2421, 2430, 2439, 2448, + 2453, 2454, 2455, 2457, 2463, 2473, 2480, 2489, 2497, 2503, + 2504, 2506, 2506, 2506, 2507, 2507, 2508, 2509, 2510, 2511, + 2512, 2514, 2524, 2534, 2541, 2550, 2557, 2566, 2574, 2587, + 2595, 2608, 2613, 2614, 2615, 2615, 2616, 2616, 2616, 2618, + 2632, 2647, 2659, 2674 }; #endif @@ -1101,13 +1103,13 @@ "VAR_CACHEDB_REDISTIMEOUT", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", - "VAR_ADDITIONAL_TLS_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PCT", - "VAR_ALLOW_NOTIFY", "$accept", "toplevelvars", "toplevelvar", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "server_num_threads", - "server_verbosity", "server_statistics_interval", + "VAR_TLS_ADDITIONAL_PORTS", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", + "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", + "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1121,10 +1123,11 @@ "server_outgoing_tcp_mss", "server_tcp_upstream", "server_udp_upstream_without_downstream", "server_ssl_upstream", "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port", - "server_tls_cert_bundle", "server_additional_tls_port", - "server_use_systemd", "server_do_daemonize", "server_use_syslog", - "server_log_time_ascii", "server_log_queries", "server_log_replies", - "server_chroot", "server_username", "server_directory", "server_logfile", + "server_tls_cert_bundle", "server_tls_win_cert", + "server_tls_additional_ports", "server_use_systemd", + "server_do_daemonize", "server_use_syslog", "server_log_time_ascii", + "server_log_queries", "server_log_replies", "server_chroot", + "server_username", "server_directory", "server_logfile", "server_pidfile", "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", "server_auto_trust_anchor_file", "server_trust_anchor_file", "server_trusted_keys_file", @@ -1172,7 +1175,7 @@ "server_ratelimit_size", "server_ip_ratelimit_slabs", "server_ratelimit_slabs", "server_ratelimit_for_domain", "server_ratelimit_below_domain", "server_ip_ratelimit_factor", - "server_ratelimit_factor", "server_low_rtt", "server_low_rtt_pct", + "server_ratelimit_factor", "server_low_rtt", "server_low_rtt_permil", "server_qname_minimisation", "server_qname_minimisation_strict", "server_ipsecmod_enabled", "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", "server_ipsecmod_max_ttl", @@ -1240,7 +1243,7 @@ 465, 466, 467, 468, 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 + 495, 496, 497 }; # endif @@ -1278,61 +1281,62 @@ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 218, 219, 220, 251, 252, 253, 254, 258, 259, 260, 302, - 303, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, 304, - 305, 306, 307, 308, 309, -184, -184, -184, -184, -184, - -184, -184, 310, 314, 318, 319, 343, -184, -184, -184, - -184, -184, -184, 344, 345, 347, 357, 358, 359, 360, - -184, -184, -184, -184, -184, -184, -184, -184, 361, 362, - 363, 364, 365, 366, 367, 368, -184, -184, -184, -184, - -184, -184, -184, -184, -184, 369, 404, 406, 418, 419, - 420, 421, 422, -184, -184, -184, -184, -184, -184, -184, - -184, -184, 423, 424, 425, 426, 427, 428, 435, 436, - 437, 438, 439, 440, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, 442, -184, -184, - 443, 444, 445, 446, 447, 448, 452, 453, 454, 455, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, 456, 457, 458, 459, 460, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, 461, 462, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, 463, 464, 465, -184, -184, -184, -184, - -184, -184, -184, -184, -184, 466, 467, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, 468, 469, 470, 471, 472, 473, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, 474, -184, -184, 475, 476, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - 477, 478, 479, -184, -184, -184, -184, -184, -184, -184 + 303, 304, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, 305, 306, 307, 308, 309, 310, -184, -184, -184, + -184, -184, -184, -184, 314, 318, 319, 343, 344, -184, + -184, -184, -184, -184, -184, 345, 347, 357, 358, 359, + 360, 361, -184, -184, -184, -184, -184, -184, -184, -184, + 362, 363, 364, 365, 366, 367, 368, 369, -184, -184, + -184, -184, -184, -184, -184, -184, -184, 404, 406, 418, + 419, 420, 421, 422, 423, -184, -184, -184, -184, -184, + -184, -184, -184, -184, 424, 425, 426, 427, 428, 435, + 436, 437, 438, 439, 440, 442, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, 443, + -184, -184, 444, 445, 446, 447, 448, 452, 454, 455, + 456, 457, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, 458, 459, 460, 461, 462, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + 463, 464, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, 465, 466, 467, -184, -184, + -184, -184, -184, -184, -184, -184, -184, 468, 469, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, 470, 471, 472, 473, 474, 475, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, 476, -184, -184, 477, 478, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, 479, 480, 481, -184, -184, -184, -184, + -184, -184, -184 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1340,9 +1344,9 @@ means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 14, 184, 193, 411, 457, 430, 201, - 466, 489, 211, 3, 16, 186, 195, 203, 213, 413, - 432, 459, 468, 491, 4, 5, 6, 10, 13, 8, + 2, 0, 1, 14, 185, 194, 413, 459, 432, 202, + 468, 491, 212, 3, 16, 187, 196, 204, 214, 415, + 434, 461, 470, 493, 4, 5, 6, 10, 13, 8, 9, 7, 11, 12, 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, @@ -1360,61 +1364,62 @@ 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, 15, 17, 18, 77, 80, 89, 166, 167, 19, - 139, 140, 141, 142, 143, 144, 28, 68, 20, 81, - 82, 39, 61, 76, 21, 22, 24, 25, 23, 26, - 27, 112, 178, 113, 114, 115, 116, 180, 181, 162, - 78, 67, 93, 110, 111, 29, 30, 31, 32, 33, - 69, 83, 84, 99, 55, 65, 56, 170, 171, 94, - 49, 50, 169, 51, 52, 103, 107, 120, 128, 149, - 104, 62, 34, 35, 36, 91, 121, 122, 123, 37, - 38, 40, 41, 43, 44, 42, 126, 45, 46, 47, - 53, 72, 108, 86, 127, 79, 145, 87, 88, 105, - 106, 92, 48, 70, 73, 54, 57, 95, 96, 71, - 146, 97, 58, 59, 60, 179, 109, 159, 160, 168, - 98, 66, 100, 101, 102, 147, 63, 64, 85, 74, - 75, 90, 117, 118, 119, 124, 125, 150, 151, 153, - 155, 156, 154, 157, 163, 129, 130, 133, 134, 131, - 132, 135, 136, 138, 137, 182, 183, 148, 158, 172, - 174, 173, 175, 176, 177, 152, 161, 164, 165, 0, - 0, 0, 0, 0, 0, 185, 187, 188, 189, 191, - 192, 190, 0, 0, 0, 0, 0, 194, 196, 197, - 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, - 202, 204, 205, 208, 209, 206, 210, 207, 0, 0, - 0, 0, 0, 0, 0, 0, 212, 214, 215, 216, - 217, 221, 218, 219, 220, 0, 0, 0, 0, 0, - 0, 0, 0, 412, 414, 416, 415, 421, 417, 418, - 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 431, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 0, 458, 460, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 467, 469, 470, 471, 473, 474, 472, 475, 476, 477, - 478, 0, 0, 0, 0, 0, 490, 492, 493, 494, - 495, 496, 223, 222, 229, 238, 236, 244, 245, 248, - 246, 247, 249, 250, 265, 266, 267, 268, 269, 292, - 293, 294, 299, 300, 241, 301, 302, 305, 303, 304, - 307, 308, 309, 322, 280, 281, 283, 284, 310, 325, - 274, 276, 326, 332, 333, 334, 242, 291, 346, 347, - 275, 341, 261, 237, 270, 323, 329, 311, 0, 0, - 350, 243, 224, 260, 315, 225, 239, 240, 271, 272, - 348, 313, 317, 318, 226, 351, 295, 321, 262, 279, - 327, 328, 331, 340, 273, 344, 342, 343, 285, 290, - 319, 320, 286, 287, 312, 336, 263, 264, 251, 253, - 254, 255, 256, 257, 352, 353, 354, 296, 297, 298, - 306, 355, 356, 0, 0, 0, 314, 288, 462, 365, - 369, 367, 366, 370, 368, 0, 0, 373, 374, 230, - 231, 232, 233, 234, 235, 316, 330, 345, 377, 378, - 289, 357, 0, 0, 0, 0, 0, 0, 337, 338, - 339, 463, 282, 277, 335, 259, 227, 228, 278, 379, - 381, 380, 382, 383, 384, 252, 258, 375, 376, 385, - 386, 387, 390, 389, 388, 391, 392, 393, 394, 395, - 404, 0, 408, 409, 0, 0, 410, 396, 402, 397, - 398, 399, 401, 403, 400, 422, 424, 423, 426, 427, - 428, 429, 425, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 461, 479, 480, 481, 484, - 482, 483, 485, 486, 487, 488, 497, 498, 499, 500, - 501, 324, 349, 364, 464, 465, 371, 372, 358, 359, - 0, 0, 0, 363, 405, 406, 407, 362, 360, 361 + 0, 0, 15, 17, 18, 77, 80, 89, 166, 167, + 19, 139, 140, 141, 142, 143, 144, 28, 68, 20, + 81, 82, 39, 61, 76, 21, 22, 24, 25, 23, + 26, 27, 112, 178, 113, 114, 115, 116, 180, 184, + 181, 162, 78, 67, 93, 110, 111, 29, 30, 31, + 32, 33, 69, 83, 84, 99, 55, 65, 56, 170, + 171, 94, 49, 50, 169, 51, 52, 103, 107, 120, + 128, 149, 104, 62, 34, 35, 36, 91, 121, 122, + 123, 37, 38, 40, 41, 43, 44, 42, 126, 45, + 46, 47, 53, 72, 108, 86, 127, 79, 145, 87, + 88, 105, 106, 92, 48, 70, 73, 54, 57, 95, + 96, 71, 146, 97, 58, 59, 60, 179, 109, 159, + 160, 168, 98, 66, 100, 101, 102, 147, 63, 64, + 85, 74, 75, 90, 117, 118, 119, 124, 125, 150, + 151, 153, 155, 156, 154, 157, 163, 129, 130, 133, + 134, 131, 132, 135, 136, 138, 137, 182, 183, 148, + 158, 172, 174, 173, 175, 176, 177, 152, 161, 164, + 165, 0, 0, 0, 0, 0, 0, 186, 188, 189, + 190, 192, 193, 191, 0, 0, 0, 0, 0, 195, + 197, 198, 199, 200, 201, 0, 0, 0, 0, 0, + 0, 0, 203, 205, 206, 209, 210, 207, 211, 208, + 0, 0, 0, 0, 0, 0, 0, 0, 213, 215, + 216, 217, 218, 222, 219, 220, 221, 0, 0, 0, + 0, 0, 0, 0, 0, 414, 416, 418, 417, 423, + 419, 420, 421, 422, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 433, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 0, + 460, 462, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 469, 471, 472, 473, 475, 476, 474, 477, + 478, 479, 480, 0, 0, 0, 0, 0, 492, 494, + 495, 496, 497, 498, 224, 223, 230, 239, 237, 245, + 246, 249, 247, 248, 250, 251, 267, 268, 269, 270, + 271, 294, 295, 296, 301, 302, 242, 303, 304, 307, + 305, 306, 309, 310, 311, 324, 282, 283, 285, 286, + 312, 327, 276, 278, 328, 334, 335, 336, 243, 293, + 348, 349, 277, 343, 263, 238, 272, 325, 331, 313, + 0, 0, 352, 244, 225, 262, 317, 226, 240, 241, + 273, 274, 350, 315, 319, 320, 227, 353, 297, 323, + 264, 281, 329, 330, 333, 342, 275, 346, 344, 345, + 287, 292, 321, 322, 288, 289, 314, 338, 265, 266, + 252, 254, 255, 256, 257, 258, 354, 355, 356, 298, + 299, 300, 308, 357, 358, 0, 0, 0, 316, 290, + 464, 367, 371, 369, 368, 372, 370, 0, 0, 375, + 376, 231, 232, 233, 234, 235, 236, 318, 332, 347, + 379, 380, 291, 359, 0, 0, 0, 0, 0, 0, + 339, 340, 341, 465, 284, 279, 337, 261, 228, 229, + 280, 381, 383, 382, 384, 385, 386, 253, 260, 377, + 378, 259, 387, 388, 389, 392, 391, 390, 393, 394, + 395, 396, 397, 406, 0, 410, 411, 0, 0, 412, + 398, 404, 399, 400, 401, 403, 405, 402, 424, 426, + 425, 428, 429, 430, 431, 427, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 463, 481, + 482, 483, 486, 484, 485, 487, 488, 489, 490, 499, + 500, 501, 502, 503, 326, 351, 366, 466, 467, 373, + 374, 360, 361, 0, 0, 0, 365, 407, 408, 409, + 364, 362, 363 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1446,39 +1451,39 @@ -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, - -184, -184 + -184, -184, -184 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 13, 14, 24, 201, 15, 25, 375, 16, - 26, 387, 17, 27, 400, 18, 28, 416, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 376, 377, 378, 379, 380, 381, 388, 389, 390, - 391, 392, 417, 418, 419, 420, 421, 422, 423, 424, - 401, 402, 403, 404, 405, 406, 407, 19, 29, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 20, 30, - 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, - 464, 465, 466, 21, 31, 468, 469, 365, 366, 367, - 368, 22, 32, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 23, 33, 496, 497, 498, 499, - 500, 501 + -1, 1, 13, 14, 24, 202, 15, 25, 377, 16, + 26, 389, 17, 27, 402, 18, 28, 418, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 378, 379, 380, 381, 382, 383, 390, 391, + 392, 393, 394, 419, 420, 421, 422, 423, 424, 425, + 426, 403, 404, 405, 406, 407, 408, 409, 19, 29, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 20, + 30, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 21, 31, 470, 471, 367, 368, + 369, 370, 22, 32, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 23, 33, 498, 499, 500, + 501, 502, 503 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1486,55 +1491,56 @@ number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 408, 393, 369, 467, 370, 371, 502, 382, 503, - 0, 3, 504, 505, 506, 507, 383, 384, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 425, 426, 427, 428, 429, 430, 431, 432, 394, 395, - 508, 4, 491, 492, 493, 494, 495, 5, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 509, 510, - 511, 512, 513, 396, 514, 515, 372, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 539, 6, 540, 541, 542, 543, 373, 544, 545, 374, - 385, 546, 386, 547, 548, 549, 550, 7, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, - 563, 564, 397, 398, 565, 566, 567, 568, 569, 570, - 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, - 581, 582, 583, 584, 585, 586, 8, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 596, 399, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, - 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, - 629, 630, 409, 9, 410, 411, 412, 413, 414, 631, - 632, 633, 415, 634, 635, 636, 637, 10, 638, 639, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 651, 652, 653, 11, 654, 655, 656, 657, 658, - 659, 0, 12, 34, 35, 36, 37, 38, 39, 40, + 2, 410, 395, 371, 469, 372, 373, 504, 384, 505, + 0, 3, 506, 507, 508, 509, 385, 386, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 427, 428, 429, 430, 431, 432, 433, 434, 396, 397, + 510, 4, 493, 494, 495, 496, 497, 5, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 511, 512, + 513, 514, 515, 398, 516, 517, 374, 518, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, + 541, 6, 542, 543, 544, 545, 375, 546, 547, 376, + 387, 548, 388, 549, 550, 551, 552, 7, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 399, 400, 567, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, + 583, 584, 585, 586, 587, 588, 8, 589, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 401, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, + 631, 632, 411, 9, 412, 413, 414, 415, 416, 633, + 634, 635, 417, 636, 637, 638, 639, 10, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 653, 654, 655, 11, 656, 657, 658, 659, 660, + 661, 0, 12, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 660, 661, 662, 663, 62, 63, 64, 664, 665, - 666, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 61, 662, 663, 664, 665, 62, 63, 64, 666, 667, + 668, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 106, 107, 108, 676, 109, 110, 111, 677, 678, + 104, 105, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 106, 107, 108, 678, 109, 110, 111, 679, 680, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 679, 680, 681, 135, 682, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 683, 684, 685, - 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, + 132, 133, 134, 681, 682, 683, 135, 684, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 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, 696, 179, 697, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 698, 699, - 700, 701, 702, 703, 704, 705, 706, 707, 708, 191, - 192, 193, 194, 195, 196, 709, 710, 711, 712, 713, - 714, 197, 715, 716, 717, 718, 719, 720, 721, 198, - 199, 200, 722, 723, 724, 725, 726, 727, 728, 729, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 740, 741, 742, 743, 744, 745, 746, 747, 748, 749 + 175, 176, 177, 178, 698, 179, 699, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 700, 701, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 191, + 192, 193, 194, 195, 196, 711, 712, 713, 714, 715, + 716, 197, 717, 718, 719, 720, 721, 722, 723, 198, + 199, 200, 724, 201, 725, 726, 727, 728, 729, 730, + 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, + 751, 752 }; static const yytype_int16 yycheck[] = @@ -1585,19 +1591,20 @@ 10, 10, 10, 10, 10, 10, 10, 10, 10, 218, 219, 220, 221, 222, 223, 10, 10, 10, 10, 10, 10, 230, 10, 10, 10, 10, 10, 10, 10, 238, - 239, 240, 10, 10, 10, 10, 10, 10, 10, 10, + 239, 240, 10, 242, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 243, 0, 11, 41, 47, 91, 107, 146, 193, - 207, 224, 232, 244, 245, 248, 251, 254, 257, 449, - 460, 475, 483, 496, 246, 249, 252, 255, 258, 450, - 461, 476, 484, 497, 12, 13, 14, 15, 16, 17, + 0, 244, 0, 11, 41, 47, 91, 107, 146, 193, + 207, 224, 232, 245, 246, 249, 252, 255, 258, 451, + 462, 477, 485, 498, 247, 250, 253, 256, 259, 452, + 463, 478, 486, 499, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 44, 45, 46, 50, 51, 52, 53, 54, @@ -1614,7 +1621,7 @@ 184, 185, 186, 187, 188, 189, 190, 191, 192, 194, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 218, 219, 220, 221, 222, 223, 230, 238, 239, - 240, 247, 260, 261, 262, 263, 264, 265, 266, 267, + 240, 242, 248, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, @@ -1630,21 +1637,21 @@ 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 479, 480, 481, 482, 40, - 42, 43, 103, 133, 136, 250, 423, 424, 425, 426, - 427, 428, 40, 48, 49, 132, 134, 253, 429, 430, - 431, 432, 433, 40, 76, 77, 101, 160, 161, 195, - 256, 442, 443, 444, 445, 446, 447, 448, 40, 231, - 233, 234, 235, 236, 237, 241, 259, 434, 435, 436, - 437, 438, 439, 440, 441, 92, 93, 94, 95, 96, - 97, 98, 99, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 108, 477, 478, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 225, 226, 227, 228, 229, 498, 499, 500, 501, - 502, 503, 10, 10, 10, 10, 10, 10, 10, 10, + 418, 419, 420, 421, 422, 423, 424, 481, 482, 483, + 484, 40, 42, 43, 103, 133, 136, 251, 425, 426, + 427, 428, 429, 430, 40, 48, 49, 132, 134, 254, + 431, 432, 433, 434, 435, 40, 76, 77, 101, 160, + 161, 195, 257, 444, 445, 446, 447, 448, 449, 450, + 40, 231, 233, 234, 235, 236, 237, 241, 260, 436, + 437, 438, 439, 440, 441, 442, 443, 92, 93, 94, + 95, 96, 97, 98, 99, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 108, + 479, 480, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 225, 226, 227, 228, 229, 500, 501, + 502, 503, 504, 505, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1668,35 +1675,36 @@ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 242, 243, 243, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 245, 246, 246, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 248, 249, 249, 250, 250, 250, - 250, 250, 250, 251, 252, 252, 253, 253, 253, 253, - 253, 254, 255, 255, 256, 256, 256, 256, 256, 256, - 256, 257, 258, 258, 259, 259, 259, 259, 259, 259, - 259, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 0, 243, 244, 244, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 246, 247, 247, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 248, 248, 249, 250, 250, 251, 251, + 251, 251, 251, 251, 252, 253, 253, 254, 254, 254, + 254, 254, 255, 256, 256, 257, 257, 257, 257, 257, + 257, 257, 258, 259, 259, 260, 260, 260, 260, 260, + 260, 260, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, @@ -1715,16 +1723,16 @@ 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 450, 451, 451, 451, 451, 451, 451, - 451, 451, 452, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 461, 462, 462, 462, 462, 462, 462, 462, - 462, 462, 462, 462, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 484, 485, - 485, 485, 485, 485, 485, 485, 485, 485, 485, 486, + 448, 449, 450, 451, 452, 452, 453, 453, 453, 453, + 453, 453, 453, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 463, 464, 464, 464, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 486, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 497, 498, 498, 498, 498, 498, 499, 500, 501, - 502, 503 + 497, 498, 499, 499, 500, 500, 500, 500, 500, 501, + 502, 503, 504, 505 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1748,11 +1756,11 @@ 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, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1762,25 +1770,25 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, - 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, - 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, - 1, 2, 2, 2, 3, 3, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 2, 0, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2 + 2, 0, 1, 2, 2, 2, 3, 3, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 2, 0, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2 }; @@ -2461,10 +2469,10 @@ { OUTYY(("\nP(server:)\n")); } -#line 2465 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 184: +#line 2473 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 185: #line 255 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; @@ -2476,10 +2484,10 @@ } else yyerror("out of memory"); } -#line 2480 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 193: +#line 2488 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 194: #line 272 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; @@ -2491,10 +2499,10 @@ } else yyerror("out of memory"); } -#line 2495 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 201: +#line 2503 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 202: #line 289 "util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; @@ -2508,10 +2516,10 @@ } else yyerror("out of memory"); } -#line 2512 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 211: +#line 2520 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 212: #line 308 "util/configparser.y" /* yacc.c:1646 */ { struct config_auth* s; @@ -2527,10 +2535,10 @@ } else yyerror("out of memory"); } -#line 2531 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 222: +#line 2539 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 223: #line 330 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); @@ -2539,10 +2547,10 @@ else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2543 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 223: +#line 2551 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 224: #line 339 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); @@ -2551,10 +2559,10 @@ else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2555 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 224: +#line 2563 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 225: #line 348 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); @@ -2565,10 +2573,10 @@ else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2569 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 225: +#line 2577 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 226: #line 359 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); @@ -2577,10 +2585,10 @@ else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2581 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 226: +#line 2589 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 227: #line 368 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); @@ -2589,10 +2597,10 @@ else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2593 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 227: +#line 2601 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 228: #line 377 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); @@ -2601,10 +2609,10 @@ else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2605 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 228: +#line 2613 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 229: #line 386 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); @@ -2615,10 +2623,10 @@ else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2619 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 229: +#line 2627 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 230: #line 397 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); @@ -2627,10 +2635,10 @@ else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2631 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 230: +#line 2639 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 231: #line 406 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2641,10 +2649,10 @@ OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2645 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 231: +#line 2653 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 232: #line 417 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2656,10 +2664,10 @@ OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2660 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 232: +#line 2668 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 233: #line 430 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2674,10 +2682,10 @@ #endif free((yyvsp[0].str)); } -#line 2678 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 233: +#line 2686 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 234: #line 445 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2688,10 +2696,10 @@ #endif free((yyvsp[0].str)); } -#line 2692 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 234: +#line 2700 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 235: #line 456 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2708,10 +2716,10 @@ #endif free((yyvsp[0].str)); } -#line 2712 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 235: +#line 2720 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 236: #line 473 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET @@ -2728,10 +2736,10 @@ #endif free((yyvsp[0].str)); } -#line 2732 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 236: +#line 2740 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 237: #line 490 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); @@ -2744,10 +2752,10 @@ else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2748 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 237: +#line 2756 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 238: #line 503 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); @@ -2762,10 +2770,10 @@ cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2766 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 238: +#line 2774 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 239: #line 518 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); @@ -2774,10 +2782,10 @@ else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2778 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 239: +#line 2786 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 240: #line 527 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); @@ -2786,10 +2794,10 @@ yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2790 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 240: +#line 2798 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 241: #line 536 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); @@ -2798,10 +2806,10 @@ yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2802 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 241: +#line 2810 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 242: #line 545 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); @@ -2810,10 +2818,10 @@ else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2814 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 242: +#line 2822 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 243: #line 554 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); @@ -2822,10 +2830,10 @@ else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2826 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 243: +#line 2834 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 244: #line 563 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); @@ -2834,10 +2842,10 @@ else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2838 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 244: +#line 2846 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 245: #line 572 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); @@ -2846,10 +2854,10 @@ else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2850 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 245: +#line 2858 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 246: #line 581 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); @@ -2858,10 +2866,10 @@ else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2862 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 246: +#line 2870 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 247: #line 590 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); @@ -2870,10 +2878,10 @@ else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2874 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 247: +#line 2882 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 248: #line 599 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); @@ -2882,10 +2890,10 @@ else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2886 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 248: +#line 2894 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 249: #line 608 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); @@ -2894,10 +2902,10 @@ else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2898 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 249: +#line 2906 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 250: #line 617 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); @@ -2906,10 +2914,10 @@ else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2910 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 250: +#line 2918 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 251: #line 626 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); @@ -2918,10 +2926,10 @@ else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2922 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 251: +#line 2930 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 252: #line 635 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); @@ -2930,10 +2938,10 @@ else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2934 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 252: +#line 2942 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 253: #line 644 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); @@ -2942,10 +2950,10 @@ else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2946 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 253: +#line 2954 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 254: #line 653 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); @@ -2954,30 +2962,30 @@ else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2958 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 254: +#line 2966 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 255: #line 662 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 2968 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 255: +#line 2976 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 256: #line 669 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 2978 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 256: +#line 2986 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 257: #line 676 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); @@ -2986,32 +2994,44 @@ else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2990 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 257: +#line 2998 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 258: #line 685 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3000 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 258: +#line 3008 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 259: #line 692 "util/configparser.y" /* yacc.c:1646 */ { - OUTYY(("P(server_additional_tls_port:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->additional_tls_port, + OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 3020 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 260: +#line 701 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(server_tls_additional_ports:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_ports, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3011 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 259: -#line 700 "util/configparser.y" /* yacc.c:1646 */ +#line 3031 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 261: +#line 709 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3019,11 +3039,11 @@ else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3023 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 260: -#line 709 "util/configparser.y" /* yacc.c:1646 */ +#line 3043 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 262: +#line 718 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3031,11 +3051,11 @@ else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3035 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 261: -#line 718 "util/configparser.y" /* yacc.c:1646 */ +#line 3055 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 263: +#line 727 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3048,11 +3068,11 @@ #endif free((yyvsp[0].str)); } -#line 3052 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 262: -#line 732 "util/configparser.y" /* yacc.c:1646 */ +#line 3072 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 264: +#line 741 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3060,11 +3080,11 @@ else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3064 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 263: -#line 741 "util/configparser.y" /* yacc.c:1646 */ +#line 3084 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 265: +#line 750 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3072,11 +3092,11 @@ else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3076 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 264: -#line 750 "util/configparser.y" /* yacc.c:1646 */ +#line 3096 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 266: +#line 759 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3084,31 +3104,31 @@ else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3088 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 265: -#line 759 "util/configparser.y" /* yacc.c:1646 */ +#line 3108 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 267: +#line 768 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3098 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 266: -#line 766 "util/configparser.y" /* yacc.c:1646 */ +#line 3118 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 268: +#line 775 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3108 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 267: -#line 773 "util/configparser.y" /* yacc.c:1646 */ +#line 3128 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 269: +#line 782 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3133,105 +3153,105 @@ } } } -#line 3137 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 268: -#line 799 "util/configparser.y" /* yacc.c:1646 */ +#line 3157 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 270: +#line 808 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3148 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 269: -#line 807 "util/configparser.y" /* yacc.c:1646 */ +#line 3168 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 271: +#line 816 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3158 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 270: -#line 814 "util/configparser.y" /* yacc.c:1646 */ +#line 3178 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 272: +#line 823 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3168 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 271: -#line 821 "util/configparser.y" /* yacc.c:1646 */ +#line 3188 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 273: +#line 830 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3178 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 272: -#line 828 "util/configparser.y" /* yacc.c:1646 */ +#line 3198 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 274: +#line 837 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3188 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 273: -#line 835 "util/configparser.y" /* yacc.c:1646 */ +#line 3208 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 275: +#line 844 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3199 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 274: -#line 843 "util/configparser.y" /* yacc.c:1646 */ +#line 3219 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 276: +#line 852 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3210 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 275: -#line 851 "util/configparser.y" /* yacc.c:1646 */ +#line 3230 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 277: +#line 860 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3221 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 276: -#line 859 "util/configparser.y" /* yacc.c:1646 */ +#line 3241 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 278: +#line 868 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3231 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 277: -#line 866 "util/configparser.y" /* yacc.c:1646 */ +#line 3251 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 279: +#line 875 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3241,11 +3261,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3245 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 278: -#line 877 "util/configparser.y" /* yacc.c:1646 */ +#line 3265 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 280: +#line 886 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3255,21 +3275,21 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3259 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 279: -#line 888 "util/configparser.y" /* yacc.c:1646 */ +#line 3279 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 281: +#line 897 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3269 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 280: -#line 895 "util/configparser.y" /* yacc.c:1646 */ +#line 3289 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 282: +#line 904 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3277,11 +3297,11 @@ else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3281 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 281: -#line 904 "util/configparser.y" /* yacc.c:1646 */ +#line 3301 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 283: +#line 913 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3289,11 +3309,11 @@ else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3293 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 282: -#line 913 "util/configparser.y" /* yacc.c:1646 */ +#line 3313 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 284: +#line 922 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3301,53 +3321,53 @@ else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3305 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 283: -#line 922 "util/configparser.y" /* yacc.c:1646 */ +#line 3325 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 285: +#line 931 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3315 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 284: -#line 929 "util/configparser.y" /* yacc.c:1646 */ +#line 3335 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 286: +#line 938 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3325 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 285: -#line 936 "util/configparser.y" /* yacc.c:1646 */ +#line 3345 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 287: +#line 945 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3336 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 286: -#line 944 "util/configparser.y" /* yacc.c:1646 */ +#line 3356 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 288: +#line 953 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3347 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 287: -#line 952 "util/configparser.y" /* yacc.c:1646 */ +#line 3367 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 289: +#line 961 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3356,11 +3376,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3360 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 288: -#line 962 "util/configparser.y" /* yacc.c:1646 */ +#line 3380 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 290: +#line 971 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3369,11 +3389,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3373 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 289: -#line 972 "util/configparser.y" /* yacc.c:1646 */ +#line 3393 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 291: +#line 981 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3382,11 +3402,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3386 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 290: -#line 982 "util/configparser.y" /* yacc.c:1646 */ +#line 3406 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 292: +#line 991 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3398,11 +3418,11 @@ else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 291: -#line 995 "util/configparser.y" /* yacc.c:1646 */ +#line 3422 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 293: +#line 1004 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3412,22 +3432,22 @@ else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3416 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 292: -#line 1006 "util/configparser.y" /* yacc.c:1646 */ +#line 3436 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 294: +#line 1015 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3427 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 293: -#line 1014 "util/configparser.y" /* yacc.c:1646 */ +#line 3447 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 295: +#line 1023 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3439,11 +3459,11 @@ } free((yyvsp[0].str)); } -#line 3443 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 294: -#line 1027 "util/configparser.y" /* yacc.c:1646 */ +#line 3463 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 296: +#line 1036 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3451,11 +3471,11 @@ else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3455 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 295: -#line 1036 "util/configparser.y" /* yacc.c:1646 */ +#line 3475 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 297: +#line 1045 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3463,11 +3483,11 @@ else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3467 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 296: -#line 1045 "util/configparser.y" /* yacc.c:1646 */ +#line 3487 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 298: +#line 1054 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3475,11 +3495,11 @@ else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3479 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 297: -#line 1054 "util/configparser.y" /* yacc.c:1646 */ +#line 3499 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 299: +#line 1063 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3488,11 +3508,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3492 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 298: -#line 1064 "util/configparser.y" /* yacc.c:1646 */ +#line 3512 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 300: +#line 1073 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3501,22 +3521,22 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3505 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 299: -#line 1074 "util/configparser.y" /* yacc.c:1646 */ +#line 3525 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 301: +#line 1083 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3516 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 300: -#line 1082 "util/configparser.y" /* yacc.c:1646 */ +#line 3536 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 302: +#line 1091 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3528,11 +3548,11 @@ } free((yyvsp[0].str)); } -#line 3532 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 301: -#line 1095 "util/configparser.y" /* yacc.c:1646 */ +#line 3552 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 303: +#line 1104 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3540,22 +3560,22 @@ else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3544 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 302: -#line 1104 "util/configparser.y" /* yacc.c:1646 */ +#line 3564 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 304: +#line 1113 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3555 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 303: -#line 1112 "util/configparser.y" /* yacc.c:1646 */ +#line 3575 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 305: +#line 1121 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3563,22 +3583,22 @@ else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3567 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 304: -#line 1121 "util/configparser.y" /* yacc.c:1646 */ +#line 3587 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 306: +#line 1130 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3578 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 305: -#line 1129 "util/configparser.y" /* yacc.c:1646 */ +#line 3598 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 307: +#line 1138 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3590,11 +3610,11 @@ } free((yyvsp[0].str)); } -#line 3594 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 306: -#line 1142 "util/configparser.y" /* yacc.c:1646 */ +#line 3614 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 308: +#line 1151 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3602,21 +3622,21 @@ else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3606 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 307: -#line 1151 "util/configparser.y" /* yacc.c:1646 */ +#line 3626 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 309: +#line 1160 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3616 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 308: -#line 1158 "util/configparser.y" /* yacc.c:1646 */ +#line 3636 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 310: +#line 1167 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3625,11 +3645,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3629 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 309: -#line 1168 "util/configparser.y" /* yacc.c:1646 */ +#line 3649 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 311: +#line 1177 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3638,11 +3658,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3642 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 310: -#line 1178 "util/configparser.y" /* yacc.c:1646 */ +#line 3662 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 312: +#line 1187 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3651,11 +3671,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3655 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 311: -#line 1188 "util/configparser.y" /* yacc.c:1646 */ +#line 3675 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 313: +#line 1197 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3664,11 +3684,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3668 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 312: -#line 1198 "util/configparser.y" /* yacc.c:1646 */ +#line 3688 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 314: +#line 1207 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3677,11 +3697,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3681 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 313: -#line 1208 "util/configparser.y" /* yacc.c:1646 */ +#line 3701 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 315: +#line 1217 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3690,11 +3710,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3694 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 314: -#line 1218 "util/configparser.y" /* yacc.c:1646 */ +#line 3714 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 316: +#line 1227 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3703,11 +3723,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3707 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 315: -#line 1228 "util/configparser.y" /* yacc.c:1646 */ +#line 3727 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 317: +#line 1237 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3716,41 +3736,41 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3720 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 316: -#line 1238 "util/configparser.y" /* yacc.c:1646 */ +#line 3740 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 318: +#line 1247 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3730 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 317: -#line 1245 "util/configparser.y" /* yacc.c:1646 */ +#line 3750 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 319: +#line 1254 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3740 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 318: -#line 1252 "util/configparser.y" /* yacc.c:1646 */ +#line 3760 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 320: +#line 1261 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3750 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 319: -#line 1259 "util/configparser.y" /* yacc.c:1646 */ +#line 3770 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 321: +#line 1268 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3758,11 +3778,11 @@ else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3762 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 320: -#line 1268 "util/configparser.y" /* yacc.c:1646 */ +#line 3782 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 322: +#line 1277 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3770,11 +3790,11 @@ else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3774 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 321: -#line 1277 "util/configparser.y" /* yacc.c:1646 */ +#line 3794 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 323: +#line 1286 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3782,21 +3802,21 @@ else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3786 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 322: -#line 1286 "util/configparser.y" /* yacc.c:1646 */ +#line 3806 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 324: +#line 1295 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3796 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 323: -#line 1293 "util/configparser.y" /* yacc.c:1646 */ +#line 3816 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 325: +#line 1302 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3805,41 +3825,42 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3809 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 324: -#line 1303 "util/configparser.y" /* yacc.c:1646 */ +#line 3829 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 326: +#line 1312 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "deny_non_local")!=0 && strcmp((yyvsp[0].str), "refuse_non_local")!=0 && + strcmp((yyvsp[0].str), "allow_setrd")!=0 && strcmp((yyvsp[0].str), "allow")!=0 && strcmp((yyvsp[0].str), "allow_snoop")!=0) { yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow or allow_snoop " - "in access control action"); + "refuse_non_local, allow, allow_setrd or " + "allow_snoop in access control action"); } else { if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } } -#line 3829 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 325: -#line 1320 "util/configparser.y" /* yacc.c:1646 */ +#line 3850 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 327: +#line 1330 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 3839 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 326: -#line 1327 "util/configparser.y" /* yacc.c:1646 */ +#line 3860 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 328: +#line 1337 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3856,11 +3877,11 @@ } free((yyvsp[0].str)); } -#line 3860 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 327: -#line 1345 "util/configparser.y" /* yacc.c:1646 */ +#line 3881 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 329: +#line 1355 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3872,11 +3893,11 @@ } free((yyvsp[0].str)); } -#line 3876 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 328: -#line 1358 "util/configparser.y" /* yacc.c:1646 */ +#line 3897 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 330: +#line 1368 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3888,11 +3909,11 @@ } free((yyvsp[0].str)); } -#line 3892 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 329: -#line 1371 "util/configparser.y" /* yacc.c:1646 */ +#line 3913 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 331: +#line 1381 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3900,11 +3921,11 @@ else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3904 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 330: -#line 1380 "util/configparser.y" /* yacc.c:1646 */ +#line 3925 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 332: +#line 1390 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3912,11 +3933,11 @@ else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3916 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 331: -#line 1389 "util/configparser.y" /* yacc.c:1646 */ +#line 3937 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 333: +#line 1399 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3924,11 +3945,11 @@ else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3928 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 332: -#line 1398 "util/configparser.y" /* yacc.c:1646 */ +#line 3949 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 334: +#line 1408 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3936,11 +3957,11 @@ else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3940 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 333: -#line 1407 "util/configparser.y" /* yacc.c:1646 */ +#line 3961 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 335: +#line 1417 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3949,11 +3970,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3953 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 334: -#line 1417 "util/configparser.y" /* yacc.c:1646 */ +#line 3974 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 336: +#line 1427 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3962,11 +3983,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3966 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 335: -#line 1427 "util/configparser.y" /* yacc.c:1646 */ +#line 3987 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 337: +#line 1437 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3976,11 +3997,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3980 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 336: -#line 1438 "util/configparser.y" /* yacc.c:1646 */ +#line 4001 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 338: +#line 1448 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3988,11 +4009,11 @@ else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3992 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 337: -#line 1447 "util/configparser.y" /* yacc.c:1646 */ +#line 4013 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 339: +#line 1457 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4000,11 +4021,11 @@ else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4004 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 338: -#line 1456 "util/configparser.y" /* yacc.c:1646 */ +#line 4025 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 340: +#line 1466 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4016,11 +4037,11 @@ #endif free((yyvsp[0].str)); } -#line 4020 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 339: -#line 1469 "util/configparser.y" /* yacc.c:1646 */ +#line 4041 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 341: +#line 1479 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4032,11 +4053,11 @@ #endif free((yyvsp[0].str)); } -#line 4036 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 340: -#line 1482 "util/configparser.y" /* yacc.c:1646 */ +#line 4057 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 342: +#line 1492 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4044,21 +4065,21 @@ else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4048 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 341: -#line 1491 "util/configparser.y" /* yacc.c:1646 */ +#line 4069 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 343: +#line 1501 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4058 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 342: -#line 1498 "util/configparser.y" /* yacc.c:1646 */ +#line 4079 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 344: +#line 1508 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4066,11 +4087,11 @@ else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 343: -#line 1507 "util/configparser.y" /* yacc.c:1646 */ +#line 4091 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 345: +#line 1517 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4078,11 +4099,11 @@ else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4082 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 344: -#line 1516 "util/configparser.y" /* yacc.c:1646 */ +#line 4103 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 346: +#line 1526 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4090,11 +4111,11 @@ else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4094 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 345: -#line 1525 "util/configparser.y" /* yacc.c:1646 */ +#line 4115 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 347: +#line 1535 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4103,22 +4124,22 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4107 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 346: -#line 1534 "util/configparser.y" /* yacc.c:1646 */ +#line 4128 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 348: +#line 1544 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4118 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 347: -#line 1542 "util/configparser.y" /* yacc.c:1646 */ +#line 4139 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 349: +#line 1552 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4130,22 +4151,22 @@ } free((yyvsp[0].str)); } -#line 4134 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 348: -#line 1555 "util/configparser.y" /* yacc.c:1646 */ +#line 4155 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 350: +#line 1565 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4145 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 349: -#line 1563 "util/configparser.y" /* yacc.c:1646 */ +#line 4166 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 351: +#line 1573 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4173,21 +4194,21 @@ fatal_exit("out of memory adding local-zone"); } } -#line 4177 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 350: -#line 1592 "util/configparser.y" /* yacc.c:1646 */ +#line 4198 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 352: +#line 1602 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4187 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 351: -#line 1599 "util/configparser.y" /* yacc.c:1646 */ +#line 4208 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 353: +#line 1609 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4201,11 +4222,11 @@ yyerror("local-data-ptr could not be reversed"); } } -#line 4205 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 352: -#line 1614 "util/configparser.y" /* yacc.c:1646 */ +#line 4226 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 354: +#line 1624 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4214,11 +4235,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 353: -#line 1624 "util/configparser.y" /* yacc.c:1646 */ +#line 4239 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 355: +#line 1634 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4227,31 +4248,31 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4231 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 354: -#line 1634 "util/configparser.y" /* yacc.c:1646 */ +#line 4252 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 356: +#line 1644 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4241 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 355: -#line 1641 "util/configparser.y" /* yacc.c:1646 */ +#line 4262 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 357: +#line 1651 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4251 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 356: -#line 1648 "util/configparser.y" /* yacc.c:1646 */ +#line 4272 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 358: +#line 1658 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4259,11 +4280,11 @@ else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4263 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 357: -#line 1657 "util/configparser.y" /* yacc.c:1646 */ +#line 4284 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 359: +#line 1667 "util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4276,11 +4297,11 @@ } free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 358: -#line 1671 "util/configparser.y" /* yacc.c:1646 */ +#line 4301 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 360: +#line 1681 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4298,11 +4319,11 @@ } } } -#line 4302 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 359: -#line 1690 "util/configparser.y" /* yacc.c:1646 */ +#line 4323 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 361: +#line 1700 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4320,11 +4341,11 @@ } } } -#line 4324 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 360: -#line 1709 "util/configparser.y" /* yacc.c:1646 */ +#line 4345 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 362: +#line 1719 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4335,11 +4356,11 @@ free((yyvsp[0].str)); } } -#line 4339 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 361: -#line 1721 "util/configparser.y" /* yacc.c:1646 */ +#line 4360 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 363: +#line 1731 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4350,11 +4371,11 @@ free((yyvsp[0].str)); } } -#line 4354 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 362: -#line 1733 "util/configparser.y" /* yacc.c:1646 */ +#line 4375 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 364: +#line 1743 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4365,11 +4386,11 @@ free((yyvsp[0].str)); } } -#line 4369 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 363: -#line 1745 "util/configparser.y" /* yacc.c:1646 */ +#line 4390 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 365: +#line 1755 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4379,11 +4400,11 @@ free((yyvsp[0].str)); } } -#line 4383 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 364: -#line 1756 "util/configparser.y" /* yacc.c:1646 */ +#line 4404 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 366: +#line 1766 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4401,11 +4422,11 @@ } } } -#line 4405 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 365: -#line 1775 "util/configparser.y" /* yacc.c:1646 */ +#line 4426 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 367: +#line 1785 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4413,11 +4434,11 @@ else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4417 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 366: -#line 1785 "util/configparser.y" /* yacc.c:1646 */ +#line 4438 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 368: +#line 1795 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4425,33 +4446,33 @@ else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4429 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 367: -#line 1794 "util/configparser.y" /* yacc.c:1646 */ +#line 4450 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 369: +#line 1804 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4440 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 368: -#line 1802 "util/configparser.y" /* yacc.c:1646 */ +#line 4461 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 370: +#line 1812 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4451 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 369: -#line 1810 "util/configparser.y" /* yacc.c:1646 */ +#line 4472 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 371: +#line 1820 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4463,11 +4484,11 @@ } free((yyvsp[0].str)); } -#line 4467 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 370: -#line 1823 "util/configparser.y" /* yacc.c:1646 */ +#line 4488 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 372: +#line 1833 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4479,11 +4500,11 @@ } free((yyvsp[0].str)); } -#line 4483 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 371: -#line 1836 "util/configparser.y" /* yacc.c:1646 */ +#line 4504 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 373: +#line 1846 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4495,11 +4516,11 @@ "ratelimit-for-domain"); } } -#line 4499 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 372: -#line 1849 "util/configparser.y" /* yacc.c:1646 */ +#line 4520 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 374: +#line 1859 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4511,11 +4532,11 @@ "ratelimit-below-domain"); } } -#line 4515 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 373: -#line 1862 "util/configparser.y" /* yacc.c:1646 */ +#line 4536 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 375: +#line 1872 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4523,11 +4544,11 @@ else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4527 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 374: -#line 1871 "util/configparser.y" /* yacc.c:1646 */ +#line 4548 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 376: +#line 1881 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4535,11 +4556,11 @@ else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4539 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 375: -#line 1880 "util/configparser.y" /* yacc.c:1646 */ +#line 4560 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 377: +#line 1890 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_low_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4547,23 +4568,23 @@ else cfg_parser->cfg->low_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4551 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 376: -#line 1889 "util/configparser.y" /* yacc.c:1646 */ +#line 4572 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 378: +#line 1899 "util/configparser.y" /* yacc.c:1646 */ { - OUTYY(("P(server_low_rtt_pct:%s)\n", (yyvsp[0].str))); + OUTYY(("P(server_low_rtt_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->low_rtt_pct = atoi((yyvsp[0].str)); - free((yyvsp[0].str)); - } -#line 4563 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 377: -#line 1898 "util/configparser.y" /* yacc.c:1646 */ + else cfg_parser->cfg->low_rtt_permil = atoi((yyvsp[0].str)); + free((yyvsp[0].str)); + } +#line 4584 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 379: +#line 1908 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4572,11 +4593,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4576 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 378: -#line 1908 "util/configparser.y" /* yacc.c:1646 */ +#line 4597 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 380: +#line 1918 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4585,11 +4606,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4589 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 379: -#line 1918 "util/configparser.y" /* yacc.c:1646 */ +#line 4610 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 381: +#line 1928 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4601,11 +4622,11 @@ OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4605 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 380: -#line 1931 "util/configparser.y" /* yacc.c:1646 */ +#line 4626 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 382: +#line 1941 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -4617,11 +4638,11 @@ OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4621 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 381: -#line 1944 "util/configparser.y" /* yacc.c:1646 */ +#line 4642 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 383: +#line 1954 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -4631,11 +4652,11 @@ OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4635 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 382: -#line 1955 "util/configparser.y" /* yacc.c:1646 */ +#line 4656 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 384: +#line 1965 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -4647,11 +4668,11 @@ OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4651 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 383: -#line 1968 "util/configparser.y" /* yacc.c:1646 */ +#line 4672 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 385: +#line 1978 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -4661,11 +4682,11 @@ OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4665 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 384: -#line 1979 "util/configparser.y" /* yacc.c:1646 */ +#line 4686 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 386: +#line 1989 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -4677,11 +4698,11 @@ OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4681 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 385: -#line 1992 "util/configparser.y" /* yacc.c:1646 */ +#line 4702 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 387: +#line 2002 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4690,31 +4711,31 @@ free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4694 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 386: -#line 2002 "util/configparser.y" /* yacc.c:1646 */ +#line 4715 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 388: +#line 2012 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4704 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 387: -#line 2009 "util/configparser.y" /* yacc.c:1646 */ +#line 4725 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 389: +#line 2019 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4714 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 388: -#line 2016 "util/configparser.y" /* yacc.c:1646 */ +#line 4735 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 390: +#line 2026 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4722,11 +4743,11 @@ else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4726 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 389: -#line 2025 "util/configparser.y" /* yacc.c:1646 */ +#line 4747 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 391: +#line 2035 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4735,11 +4756,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4739 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 390: -#line 2035 "util/configparser.y" /* yacc.c:1646 */ +#line 4760 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 392: +#line 2045 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4748,11 +4769,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4752 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 391: -#line 2045 "util/configparser.y" /* yacc.c:1646 */ +#line 4773 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 393: +#line 2055 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4761,31 +4782,31 @@ free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4765 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 392: -#line 2055 "util/configparser.y" /* yacc.c:1646 */ +#line 4786 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 394: +#line 2065 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4775 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 393: -#line 2062 "util/configparser.y" /* yacc.c:1646 */ +#line 4796 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 395: +#line 2072 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4785 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 394: -#line 2069 "util/configparser.y" /* yacc.c:1646 */ +#line 4806 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 396: +#line 2079 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4793,11 +4814,11 @@ else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4797 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 395: -#line 2078 "util/configparser.y" /* yacc.c:1646 */ +#line 4818 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 397: +#line 2088 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4806,11 +4827,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4810 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 396: -#line 2088 "util/configparser.y" /* yacc.c:1646 */ +#line 4831 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 398: +#line 2098 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -4819,52 +4840,52 @@ free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 4823 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 397: -#line 2098 "util/configparser.y" /* yacc.c:1646 */ +#line 4844 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 399: +#line 2108 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 4833 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 398: -#line 2105 "util/configparser.y" /* yacc.c:1646 */ +#line 4854 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 400: +#line 2115 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4843 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 399: -#line 2112 "util/configparser.y" /* yacc.c:1646 */ +#line 4864 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 401: +#line 2122 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4853 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 400: -#line 2119 "util/configparser.y" /* yacc.c:1646 */ +#line 4874 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 402: +#line 2129 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4864 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 401: -#line 2127 "util/configparser.y" /* yacc.c:1646 */ +#line 4885 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 403: +#line 2137 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4873,11 +4894,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4877 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 402: -#line 2137 "util/configparser.y" /* yacc.c:1646 */ +#line 4898 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 404: +#line 2147 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4886,11 +4907,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4890 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 403: -#line 2147 "util/configparser.y" /* yacc.c:1646 */ +#line 4911 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 405: +#line 2157 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4899,11 +4920,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4903 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 404: -#line 2157 "util/configparser.y" /* yacc.c:1646 */ +#line 4924 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 406: +#line 2167 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4912,11 +4933,11 @@ free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4916 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 405: -#line 2167 "util/configparser.y" /* yacc.c:1646 */ +#line 4937 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 407: +#line 2177 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4945,11 +4966,11 @@ fatal_exit("out of memory adding local-zone"); } } -#line 4949 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 406: -#line 2197 "util/configparser.y" /* yacc.c:1646 */ +#line 4970 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 408: +#line 2207 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4958,22 +4979,22 @@ fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 4962 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 407: -#line 2207 "util/configparser.y" /* yacc.c:1646 */ +#line 4983 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 409: +#line 2217 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 4973 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 408: -#line 2215 "util/configparser.y" /* yacc.c:1646 */ +#line 4994 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 410: +#line 2225 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { @@ -4981,11 +5002,11 @@ free((yyvsp[0].str)); } } -#line 4985 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 409: -#line 2224 "util/configparser.y" /* yacc.c:1646 */ +#line 5006 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 411: +#line 2234 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4999,11 +5020,11 @@ yyerror("local-data-ptr could not be reversed"); } } -#line 5003 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 410: -#line 2239 "util/configparser.y" /* yacc.c:1646 */ +#line 5024 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 412: +#line 2249 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5011,19 +5032,19 @@ else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5015 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 411: -#line 2248 "util/configparser.y" /* yacc.c:1646 */ +#line 5036 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 413: +#line 2258 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 5023 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 422: -#line 2259 "util/configparser.y" /* yacc.c:1646 */ +#line 5044 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 424: +#line 2269 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5032,11 +5053,11 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5036 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 423: -#line 2269 "util/configparser.y" /* yacc.c:1646 */ +#line 5057 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 425: +#line 2279 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5044,21 +5065,21 @@ else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5048 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 424: -#line 2278 "util/configparser.y" /* yacc.c:1646 */ +#line 5069 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 426: +#line 2288 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5058 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 425: -#line 2285 "util/configparser.y" /* yacc.c:1646 */ +#line 5079 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 427: +#line 2295 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5067,122 +5088,122 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5071 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 426: -#line 2295 "util/configparser.y" /* yacc.c:1646 */ +#line 5092 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 428: +#line 2305 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5081 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 427: -#line 2302 "util/configparser.y" /* yacc.c:1646 */ +#line 5102 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 429: +#line 2312 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5091 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 428: -#line 2309 "util/configparser.y" /* yacc.c:1646 */ +#line 5112 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 430: +#line 2319 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5101 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 429: -#line 2316 "util/configparser.y" /* yacc.c:1646 */ +#line 5122 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 431: +#line 2326 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5111 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 430: -#line 2323 "util/configparser.y" /* yacc.c:1646 */ +#line 5132 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 432: +#line 2333 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5119 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 445: -#line 2340 "util/configparser.y" /* yacc.c:1646 */ +#line 5140 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 447: +#line 2350 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5130 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 446: -#line 2348 "util/configparser.y" /* yacc.c:1646 */ +#line 5151 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 448: +#line 2358 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5140 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 447: -#line 2355 "util/configparser.y" /* yacc.c:1646 */ +#line 5161 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 449: +#line 2365 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5151 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 448: -#line 2363 "util/configparser.y" /* yacc.c:1646 */ +#line 5172 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 450: +#line 2373 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5162 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 449: -#line 2371 "util/configparser.y" /* yacc.c:1646 */ +#line 5183 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 451: +#line 2381 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5172 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 450: -#line 2378 "util/configparser.y" /* yacc.c:1646 */ +#line 5193 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 452: +#line 2388 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5182 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 451: -#line 2385 "util/configparser.y" /* yacc.c:1646 */ +#line 5203 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 453: +#line 2395 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5190,11 +5211,11 @@ else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5194 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 452: -#line 2394 "util/configparser.y" /* yacc.c:1646 */ +#line 5215 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 454: +#line 2404 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5202,11 +5223,11 @@ else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5206 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 453: -#line 2403 "util/configparser.y" /* yacc.c:1646 */ +#line 5227 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 455: +#line 2413 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5214,11 +5235,11 @@ else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5218 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 454: -#line 2412 "util/configparser.y" /* yacc.c:1646 */ +#line 5239 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 456: +#line 2422 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5226,11 +5247,11 @@ else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5230 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 455: -#line 2421 "util/configparser.y" /* yacc.c:1646 */ +#line 5251 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 457: +#line 2431 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5238,11 +5259,11 @@ else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5242 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 456: -#line 2430 "util/configparser.y" /* yacc.c:1646 */ +#line 5263 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 458: +#line 2440 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5250,29 +5271,29 @@ else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5254 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 457: -#line 2439 "util/configparser.y" /* yacc.c:1646 */ +#line 5275 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 459: +#line 2449 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5262 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 461: -#line 2448 "util/configparser.y" /* yacc.c:1646 */ +#line 5283 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 463: +#line 2458 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5272 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 462: -#line 2454 "util/configparser.y" /* yacc.c:1646 */ +#line 5293 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 464: +#line 2464 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5281,21 +5302,21 @@ (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5285 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 463: -#line 2464 "util/configparser.y" /* yacc.c:1646 */ +#line 5306 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 465: +#line 2474 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 5295 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 464: -#line 2471 "util/configparser.y" /* yacc.c:1646 */ +#line 5316 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 466: +#line 2481 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5303,31 +5324,31 @@ (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5307 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 465: -#line 2480 "util/configparser.y" /* yacc.c:1646 */ +#line 5328 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 467: +#line 2490 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5318 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 466: -#line 2488 "util/configparser.y" /* yacc.c:1646 */ +#line 5339 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 468: +#line 2498 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 5327 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 479: -#line 2505 "util/configparser.y" /* yacc.c:1646 */ +#line 5348 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 481: +#line 2515 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5335,11 +5356,11 @@ else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5339 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 480: -#line 2515 "util/configparser.y" /* yacc.c:1646 */ +#line 5360 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 482: +#line 2525 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -5348,21 +5369,21 @@ else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5352 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 481: -#line 2525 "util/configparser.y" /* yacc.c:1646 */ +#line 5373 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 483: +#line 2535 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5362 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 482: -#line 2532 "util/configparser.y" /* yacc.c:1646 */ +#line 5383 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 484: +#line 2542 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5370,21 +5391,21 @@ if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5374 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 483: -#line 2541 "util/configparser.y" /* yacc.c:1646 */ +#line 5395 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 485: +#line 2551 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 5384 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 484: -#line 2548 "util/configparser.y" /* yacc.c:1646 */ +#line 5405 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 486: +#line 2558 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5392,22 +5413,22 @@ if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5396 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 485: -#line 2557 "util/configparser.y" /* yacc.c:1646 */ +#line 5417 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 487: +#line 2567 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5407 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 486: -#line 2565 "util/configparser.y" /* yacc.c:1646 */ +#line 5428 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 488: +#line 2575 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5419,22 +5440,22 @@ } free((yyvsp[0].str)); } -#line 5423 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 487: -#line 2578 "util/configparser.y" /* yacc.c:1646 */ +#line 5444 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 489: +#line 2588 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5434 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 488: -#line 2586 "util/configparser.y" /* yacc.c:1646 */ +#line 5455 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 490: +#line 2596 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5446,19 +5467,19 @@ } free((yyvsp[0].str)); } -#line 5450 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 489: -#line 2599 "util/configparser.y" /* yacc.c:1646 */ +#line 5471 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 491: +#line 2609 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5458 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 497: -#line 2609 "util/configparser.y" /* yacc.c:1646 */ +#line 5479 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 499: +#line 2619 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5471,11 +5492,11 @@ OUTYY(("P(Compiled without cachedb, ignoring)\n")); #endif } -#line 5475 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 498: -#line 2623 "util/configparser.y" /* yacc.c:1646 */ +#line 5496 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 500: +#line 2633 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5489,11 +5510,11 @@ free((yyvsp[0].str)); #endif } -#line 5493 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 499: -#line 2638 "util/configparser.y" /* yacc.c:1646 */ +#line 5514 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 501: +#line 2648 "util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5504,11 +5525,11 @@ free((yyvsp[0].str)); #endif } -#line 5508 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 500: -#line 2650 "util/configparser.y" /* yacc.c:1646 */ +#line 5529 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 502: +#line 2660 "util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5522,11 +5543,11 @@ #endif free((yyvsp[0].str)); } -#line 5526 "util/configparser.c" /* yacc.c:1646 */ - break; - - case 501: -#line 2665 "util/configparser.y" /* yacc.c:1646 */ +#line 5547 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 503: +#line 2675 "util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5538,11 +5559,11 @@ #endif free((yyvsp[0].str)); } -#line 5542 "util/configparser.c" /* yacc.c:1646 */ - break; - - -#line 5546 "util/configparser.c" /* yacc.c:1646 */ +#line 5563 "util/configparser.c" /* yacc.c:1646 */ + break; + + +#line 5567 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5770,7 +5791,7 @@ #endif return yyresult; } -#line 2677 "util/configparser.y" /* yacc.c:1906 */ +#line 2687 "util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 8cf1404..c5d0fe1 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -280,10 +280,11 @@ VAR_URL = 490, VAR_FOR_DOWNSTREAM = 491, VAR_FALLBACK_ENABLED = 492, - VAR_ADDITIONAL_TLS_PORT = 493, + VAR_TLS_ADDITIONAL_PORTS = 493, VAR_LOW_RTT = 494, - VAR_LOW_RTT_PCT = 495, - VAR_ALLOW_NOTIFY = 496 + VAR_LOW_RTT_PERMIL = 495, + VAR_ALLOW_NOTIFY = 496, + VAR_TLS_WIN_CERT = 497 }; #endif /* Tokens. */ @@ -522,10 +523,11 @@ #define VAR_URL 490 #define VAR_FOR_DOWNSTREAM 491 #define VAR_FALLBACK_ENABLED 492 -#define VAR_ADDITIONAL_TLS_PORT 493 +#define VAR_TLS_ADDITIONAL_PORTS 493 #define VAR_LOW_RTT 494 -#define VAR_LOW_RTT_PCT 495 +#define VAR_LOW_RTT_PERMIL 495 #define VAR_ALLOW_NOTIFY 496 +#define VAR_TLS_WIN_CERT 497 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -536,7 +538,7 @@ char* str; -#line 540 "util/configparser.h" /* yacc.c:1909 */ +#line 542 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index a71bf91..3f8a2df 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -156,8 +156,8 @@ %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM -%token VAR_FALLBACK_ENABLED VAR_ADDITIONAL_TLS_PORT VAR_LOW_RTT VAR_LOW_RTT_PCT -%token VAR_ALLOW_NOTIFY +%token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORTS VAR_LOW_RTT VAR_LOW_RTT_PERMIL +%token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -248,8 +248,8 @@ server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | server_ipsecmod_whitelist | server_ipsecmod_strict | server_udp_upstream_without_downstream | server_aggressive_nsec | - server_tls_cert_bundle | server_additional_tls_port | server_low_rtt | - server_low_rtt_pct + server_tls_cert_bundle | server_tls_additional_ports | server_low_rtt | + server_low_rtt_permil | server_tls_win_cert ; stubstart: VAR_STUB_ZONE { @@ -688,10 +688,19 @@ cfg_parser->cfg->tls_cert_bundle = $2; } ; -server_additional_tls_port: VAR_ADDITIONAL_TLS_PORT STRING_ARG - { - OUTYY(("P(server_additional_tls_port:%s)\n", $2)); - if(!cfg_strlist_insert(&cfg_parser->cfg->additional_tls_port, +server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG + { + OUTYY(("P(server_tls_win_cert:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->tls_win_cert = (strcmp($2, "yes")==0); + free($2); + } + ; +server_tls_additional_ports: VAR_TLS_ADDITIONAL_PORTS STRING_ARG + { + OUTYY(("P(server_tls_additional_ports:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_ports, $2)) yyerror("out of memory"); } @@ -1305,11 +1314,12 @@ if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && strcmp($3, "deny_non_local")!=0 && strcmp($3, "refuse_non_local")!=0 && + strcmp($3, "allow_setrd")!=0 && strcmp($3, "allow")!=0 && strcmp($3, "allow_snoop")!=0) { yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow or allow_snoop " - "in access control action"); + "refuse_non_local, allow, allow_setrd or " + "allow_snoop in access control action"); } else { if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) fatal_exit("out of memory adding acl"); @@ -1885,12 +1895,12 @@ free($2); } ; -server_low_rtt_pct: VAR_LOW_RTT_PCT STRING_ARG +server_low_rtt_permil: VAR_LOW_RTT_PERMIL STRING_ARG { - OUTYY(("P(server_low_rtt_pct:%s)\n", $2)); + OUTYY(("P(server_low_rtt_permil:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); - else cfg_parser->cfg->low_rtt_pct = atoi($2); + else cfg_parser->cfg->low_rtt_permil = atoi($2); free($2); } ; diff --git a/util/net_help.c b/util/net_help.c index 40bfefb..a5059b0 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -52,6 +52,9 @@ #ifdef HAVE_OPENSSL_ERR_H #include #endif +#ifdef USE_WINSOCK +#include +#endif /** max length of an IP address (the address portion) that we allow */ #define MAX_ADDR_STRLEN 128 /* characters */ @@ -796,7 +799,97 @@ #endif } -void* connect_sslctx_create(char* key, char* pem, char* verifypem) +#ifdef USE_WINSOCK +/* For windows, the CA trust store is not read by openssl. + Add code to open the trust store using wincrypt API and add + the root certs into openssl trust store */ +static int +add_WIN_cacerts_to_openssl_store(SSL_CTX* tls_ctx) +{ + HCERTSTORE hSystemStore; + PCCERT_CONTEXT pTargetCert = NULL; + X509_STORE* store; + + verbose(VERB_ALGO, "Adding Windows certificates from system root store to CA store"); + + /* load just once per context lifetime for this version + TODO: dynamically update CA trust changes as they are available */ + if (!tls_ctx) + return 0; + + /* Call wincrypt's CertOpenStore to open the CA root store. */ + + if ((hSystemStore = CertOpenStore( + CERT_STORE_PROV_SYSTEM, + 0, + 0, + /* NOTE: mingw does not have this const: replace with 1 << 16 from code + CERT_SYSTEM_STORE_CURRENT_USER, */ + 1 << 16, + L"root")) == 0) + { + return 0; + } + + store = SSL_CTX_get_cert_store(tls_ctx); + if (!store) + return 0; + + /* failure if the CA store is empty or the call fails */ + if ((pTargetCert = CertEnumCertificatesInStore( + hSystemStore, pTargetCert)) == 0) { + verbose(VERB_ALGO, "CA certificate store for Windows is empty."); + return 0; + } + /* iterate over the windows cert store and add to openssl store */ + do + { + X509 *cert1 = d2i_X509(NULL, + (const unsigned char **)&pTargetCert->pbCertEncoded, + pTargetCert->cbCertEncoded); + if (!cert1) { + /* return error if a cert fails */ + verbose(VERB_ALGO, "%s %d:%s", + "Unable to parse certificate in memory", + (int)ERR_get_error(), ERR_error_string(ERR_get_error(), NULL)); + return 0; + } + else { + /* return error if a cert add to store fails */ + if (X509_STORE_add_cert(store, cert1) == 0) { + unsigned long error = ERR_peek_last_error(); + + /* Ignore error X509_R_CERT_ALREADY_IN_HASH_TABLE which means the + * certificate is already in the store. */ + if(ERR_GET_LIB(error) != ERR_LIB_X509 || + ERR_GET_REASON(error) != X509_R_CERT_ALREADY_IN_HASH_TABLE) { + verbose(VERB_ALGO, "%s %d:%s\n", + "Error adding certificate", (int)ERR_get_error(), + ERR_error_string(ERR_get_error(), NULL)); + X509_free(cert1); + return 0; + } + } + X509_free(cert1); + } + } while ((pTargetCert = CertEnumCertificatesInStore( + hSystemStore, pTargetCert)) != 0); + + /* Clean up memory and quit. */ + if (pTargetCert) + CertFreeCertificateContext(pTargetCert); + if (hSystemStore) + { + if (!CertCloseStore( + hSystemStore, 0)) + return 0; + } + verbose(VERB_ALGO, "Completed adding Windows certificates to CA store successfully"); + return 1; +} +#endif /* USE_WINSOCK */ + +void* connect_sslctx_create(char* key, char* pem, char* verifypem, int wincert) { #ifdef HAVE_SSL SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method()); @@ -836,17 +929,30 @@ return NULL; } } - if(verifypem && verifypem[0]) { - if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL)) { - log_crypto_err("error in SSL_CTX verify"); - SSL_CTX_free(ctx); - return NULL; - } + if((verifypem && verifypem[0]) || wincert) { + if(verifypem && verifypem[0]) { + if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL)) { + log_crypto_err("error in SSL_CTX verify"); + SSL_CTX_free(ctx); + return NULL; + } + } +#ifdef USE_WINSOCK + if(wincert) { + if(!add_WIN_cacerts_to_openssl_store(ctx)) { + log_crypto_err("error in add_WIN_cacerts_to_openssl_store"); + SSL_CTX_free(ctx); + return NULL; + } + } +#else + (void)wincert; +#endif SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); } return ctx; #else - (void)key; (void)pem; (void)verifypem; + (void)key; (void)pem; (void)verifypem; (void)wincert; return NULL; #endif } diff --git a/util/net_help.h b/util/net_help.h index 5e0d3a6..de2e1ac 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -73,10 +73,10 @@ /** set RCODE bits in uint16 flags */ #define FLAGS_SET_RCODE(f, r) (f = (((f) & 0xfff0) | (r))) -/** timeout in seconds for UDP queries to auth servers. */ -#define UDP_AUTH_QUERY_TIMEOUT 4 -/** timeout in seconds for TCP queries to auth servers. */ -#define TCP_AUTH_QUERY_TIMEOUT 30 +/** timeout in milliseconds for UDP queries to auth servers. */ +#define UDP_AUTH_QUERY_TIMEOUT 3000 +/** timeout in milliseconds for TCP queries to auth servers. */ +#define TCP_AUTH_QUERY_TIMEOUT 3000 /** Advertised version of EDNS capabilities */ #define EDNS_ADVERTISED_VERSION 0 /** Advertised size of EDNS capabilities */ @@ -395,9 +395,11 @@ * @param key: if nonNULL (also pem nonNULL), the client private key. * @param pem: client public key (or NULL if key is NULL). * @param verifypem: if nonNULL used for verifylocation file. + * @param wincert: add system certificate store to ctx (add to verifypem ca + * certs). * @return SSL_CTX* or NULL on failure (logged). */ -void* connect_sslctx_create(char* key, char* pem, char* verifypem); +void* connect_sslctx_create(char* key, char* pem, char* verifypem, int wincert); /** * accept a new fd and wrap it in a BIO in SSL diff --git a/util/netevent.c b/util/netevent.c index f0d72e0..5cc8606 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -764,7 +764,12 @@ { int new_fd; *addrlen = (socklen_t)sizeof(*addr); +#ifndef HAVE_ACCEPT4 new_fd = accept(c->fd, (struct sockaddr*)addr, addrlen); +#else + /* SOCK_NONBLOCK saves extra calls to fcntl for the same result */ + new_fd = accept4(c->fd, (struct sockaddr*)addr, addrlen, SOCK_NONBLOCK); +#endif if(new_fd == -1) { #ifndef USE_WINSOCK /* EINTR is signal interrupt. others are closed connection. */ @@ -827,7 +832,9 @@ #endif return -1; } +#ifndef HAVE_ACCEPT4 fd_set_nonblock(new_fd); +#endif return new_fd; } @@ -835,20 +842,21 @@ static long win_bio_cb(BIO *b, int oper, const char* ATTR_UNUSED(argp), int ATTR_UNUSED(argi), long argl, long retvalue) { + int wsa_err = WSAGetLastError(); /* store errcode before it is gone */ verbose(VERB_ALGO, "bio_cb %d, %s %s %s", oper, (oper&BIO_CB_RETURN)?"return":"before", (oper&BIO_CB_READ)?"read":((oper&BIO_CB_WRITE)?"write":"other"), - WSAGetLastError()==WSAEWOULDBLOCK?"wsawb":""); + wsa_err==WSAEWOULDBLOCK?"wsawb":""); /* on windows, check if previous operation caused EWOULDBLOCK */ if( (oper == (BIO_CB_READ|BIO_CB_RETURN) && argl == 0) || (oper == (BIO_CB_GETS|BIO_CB_RETURN) && argl == 0)) { - if(WSAGetLastError() == WSAEWOULDBLOCK) + if(wsa_err == WSAEWOULDBLOCK) ub_winsock_tcp_wouldblock((struct ub_event*) BIO_get_callback_arg(b), UB_EV_READ); } if( (oper == (BIO_CB_WRITE|BIO_CB_RETURN) && argl == 0) || (oper == (BIO_CB_PUTS|BIO_CB_RETURN) && argl == 0)) { - if(WSAGetLastError() == WSAEWOULDBLOCK) + if(wsa_err == WSAEWOULDBLOCK) ub_winsock_tcp_wouldblock((struct ub_event*) BIO_get_callback_arg(b), UB_EV_WRITE); } @@ -1128,6 +1136,7 @@ if(want == SSL_ERROR_ZERO_RETURN) { return 0; /* shutdown, closed */ } else if(want == SSL_ERROR_WANT_READ) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return 1; /* read more later */ } else if(want == SSL_ERROR_WANT_WRITE) { c->ssl_shake_state = comm_ssl_shake_hs_write; @@ -1143,7 +1152,7 @@ return 0; } c->tcp_byte_count += r; - if(c->tcp_byte_count != sizeof(uint16_t)) + if(c->tcp_byte_count < sizeof(uint16_t)) return 1; if(sldns_buffer_read_u16_at(c->buffer, 0) > sldns_buffer_capacity(c->buffer)) { @@ -1156,33 +1165,36 @@ verbose(VERB_QUERY, "ssl: dropped bogus too short."); return 0; } + sldns_buffer_skip(c->buffer, (ssize_t)(c->tcp_byte_count-sizeof(uint16_t))); verbose(VERB_ALGO, "Reading ssl tcp query of length %d", (int)sldns_buffer_limit(c->buffer)); } - log_assert(sldns_buffer_remaining(c->buffer) > 0); - ERR_clear_error(); - r = SSL_read(c->ssl, (void*)sldns_buffer_current(c->buffer), - (int)sldns_buffer_remaining(c->buffer)); - if(r <= 0) { - int want = SSL_get_error(c->ssl, r); - if(want == SSL_ERROR_ZERO_RETURN) { - return 0; /* shutdown, closed */ - } else if(want == SSL_ERROR_WANT_READ) { - return 1; /* read more later */ - } else if(want == SSL_ERROR_WANT_WRITE) { - c->ssl_shake_state = comm_ssl_shake_hs_write; - comm_point_listen_for_rw(c, 0, 1); - return 1; - } else if(want == SSL_ERROR_SYSCALL) { - if(errno != 0) - log_err("SSL_read syscall: %s", - strerror(errno)); + if(sldns_buffer_remaining(c->buffer) > 0) { + ERR_clear_error(); + r = SSL_read(c->ssl, (void*)sldns_buffer_current(c->buffer), + (int)sldns_buffer_remaining(c->buffer)); + if(r <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + return 0; /* shutdown, closed */ + } else if(want == SSL_ERROR_WANT_READ) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); + return 1; /* read more later */ + } else if(want == SSL_ERROR_WANT_WRITE) { + c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(want == SSL_ERROR_SYSCALL) { + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); return 0; } - log_crypto_err("could not SSL_read"); - return 0; - } - sldns_buffer_skip(c->buffer, (ssize_t)r); + sldns_buffer_skip(c->buffer, (ssize_t)r); + } if(sldns_buffer_remaining(c->buffer) <= 0) { tcp_callback_reader(c); } @@ -1237,6 +1249,7 @@ comm_point_listen_for_rw(c, 1, 0); return 1; /* wait for read condition */ } else if(want == SSL_ERROR_WANT_WRITE) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; /* write more later */ } else if(want == SSL_ERROR_SYSCALL) { if(errno != 0) @@ -1270,6 +1283,7 @@ comm_point_listen_for_rw(c, 1, 0); return 1; /* wait for read condition */ } else if(want == SSL_ERROR_WANT_WRITE) { + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; /* write more later */ } else if(want == SSL_ERROR_SYSCALL) { if(errno != 0) @@ -2887,12 +2901,18 @@ { if(!c) return; - if(c->fd != -1) + if(c->fd != -1) { if(ub_event_del(c->ev->ev) != 0) { log_err("could not event_del on close"); } + } /* close fd after removing from event lists, or epoll.. is messed up */ if(c->fd != -1 && !c->do_not_close) { + if(c->type == comm_tcp || c->type == comm_http) { + /* delete sticky events for the fd, it gets closed */ + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); + } verbose(VERB_ALGO, "close fd %d", c->fd); #ifndef USE_WINSOCK close(c->fd); diff --git a/winrc/win_svc.c b/winrc/win_svc.c index b755fb5..a87d73b 100644 --- a/winrc/win_svc.c +++ b/winrc/win_svc.c @@ -52,6 +52,7 @@ #include "util/config_file.h" #include "util/netevent.h" #include "util/ub_event.h" +#include "util/net_help.h" /** global service status */ static SERVICE_STATUS service_status; @@ -357,6 +358,14 @@ config_delete(cfg); return 0; } + if(cfg->ssl_service_key && cfg->ssl_service_key[0]) { + if(!(daemon->listen_sslctx = listen_sslctx_create( + cfg->ssl_service_key, cfg->ssl_service_pem, NULL))) + fatal_exit("could not set up listen SSL_CTX"); + } + if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, + cfg->tls_cert_bundle, cfg->tls_win_cert))) + fatal_exit("could not set up connect SSL_CTX"); /* open ports */ /* keep reporting that we are busy starting */