diff --git a/Makefile.in b/Makefile.in index 7dbe57600..3189731ad 100644 --- a/Makefile.in +++ b/Makefile.in @@ -345,14 +345,12 @@ test: unittest$(EXEEXT) testbound$(EXEEXT) ./unittest$(EXEEXT) ./testbound$(EXEEXT) -s for x in $(srcdir)/testdata/*.rpl; do \ - printf "%s" "$$x "; \ - if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then \ - echo OK; \ + output=`./testbound$(EXEEXT) -p $$x -o -vvvvv 2>&1`; \ + if test $$? -eq 0; then \ + printf "%s OK\n" "$$x "; \ else \ - echo failed; \ - ./testbound$(EXEEXT) -p $$x -o -vvvvv; \ - printf "%s" "$$x "; \ - echo failed; \ + printf "%s\n" "$$output "; \ + printf "%s failed\n" "$$x "; \ exit 1; \ fi; \ done diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..5770ccd79 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,31 @@ +# Security Policy + +## Supported Versions + +NLnet Labs adheres to the straightforward, semantic versioning scheme that is +commonly used in the software industry. + +Support is provided in respect of the latest release, i.e. releases with the +highest minor and patch version level. We do not backport security fixes to +older (minor) versions. In the event a new major version is released (e.g. from +3.2.18 to 4.0.0), support will also be provided on the latest minor version of +the previous major version (3.2.18) for a period of one year from the release of +the new major version (4.0.0). + +In the event that, during this period, a new patch or minor version of the +previous major version is released, then support on these versions will only be +provided for the remainder of the one-year-period. + +You can find detailed information on our software support policy here: + +https://www.nlnetlabs.nl/support/software-support-policy/ + +## Reporting a Vulnerability + +We take security very seriously. If you have discovered a security vulnerability +in one of our projects and you would like to report it to us, you can send an +encrypted message to our Security Entry Point. + +Details are described here: + +https://www.nlnetlabs.nl/security-report/ diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index 725bc6ce8..b07743d85 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -662,7 +662,7 @@ cachedb_intcache_store(struct module_qstate* qstate) return; (void)dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, 0, qstate->prefetch_leeway, 0, - qstate->region, store_flags); + qstate->region, store_flags, qstate->qstarttime); } /** diff --git a/config.h.in b/config.h.in index a080dde0d..cc1fbe864 100644 --- a/config.h.in +++ b/config.h.in @@ -222,6 +222,10 @@ /* Define to 1 if you have the `EVP_cleanup' function. */ #undef HAVE_EVP_CLEANUP +/* Define to 1 if you have the `EVP_default_properties_is_fips_enabled' + function. */ +#undef HAVE_EVP_DEFAULT_PROPERTIES_IS_FIPS_ENABLED + /* Define to 1 if you have the `EVP_DigestVerify' function. */ #undef HAVE_EVP_DIGESTVERIFY diff --git a/configure b/configure index a9ec94479..f40187910 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.16.0. +# Generated by GNU Autoconf 2.69 for unbound 1.16.3. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.16.0' -PACKAGE_STRING='unbound 1.16.0' +PACKAGE_VERSION='1.16.3' +PACKAGE_STRING='unbound 1.16.3' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1477,7 +1477,7 @@ if test "$ac_init_help" = "long"; then # 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.16.0 to adapt to many kinds of systems. +\`configure' configures unbound 1.16.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1543,7 +1543,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.16.0:";; + short | recursive ) echo "Configuration of unbound 1.16.3:";; esac cat <<\_ACEOF @@ -1785,7 +1785,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.16.0 +unbound configure 1.16.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2494,7 +2494,7 @@ cat >config.log <<_ACEOF 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.16.0, which was +It was created by unbound $as_me 1.16.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2846,11 +2846,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=16 -UNBOUND_VERSION_MICRO=0 +UNBOUND_VERSION_MICRO=3 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=16 +LIBUNBOUND_REVISION=19 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2934,6 +2934,9 @@ LIBUNBOUND_AGE=1 # 1.14.0 had 9:14:1 # 1.15.0 had 9:15:1 # 1.16.0 had 9:16:1 +# 1.16.1 had 9:17:1 +# 1.16.2 had 9:18:1 +# 1.16.3 had 9:19:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -18545,7 +18548,7 @@ fi done -for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex +for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex 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" @@ -19967,7 +19970,46 @@ if test x_$enable_static_exe = x_yes; then else LIBS="$LIBS -lgdi32" fi - LIBS="$LIBS -lz" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 +$as_echo_n "checking for compress in -lz... " >&6; } +if ${ac_cv_lib_z_compress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress (); +int +main () +{ +return compress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_compress=yes +else + ac_cv_lib_z_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 +$as_echo "$ac_cv_lib_z_compress" >&6; } +if test "x$ac_cv_lib_z_compress" = xyes; then : + LIBS="$LIBS -lz" +fi + LIBS="$LIBS -l:libssp.a" fi fi @@ -19987,7 +20029,46 @@ if test x_$enable_fully_static = x_yes; then else LIBS="$LIBS -lgdi32" fi - LIBS="$LIBS -lz" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 +$as_echo_n "checking for compress in -lz... " >&6; } +if ${ac_cv_lib_z_compress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress (); +int +main () +{ +return compress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_compress=yes +else + ac_cv_lib_z_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 +$as_echo "$ac_cv_lib_z_compress" >&6; } +if test "x$ac_cv_lib_z_compress" = xyes; then : + LIBS="$LIBS -lz" +fi + LIBS="$LIBS -l:libssp.a" fi fi @@ -21934,7 +22015,7 @@ _ACEOF -version=1.16.0 +version=1.16.3 date=`date +'%b %e, %Y'` @@ -22453,7 +22534,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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.16.0, which was +This file was extended by unbound $as_me 1.16.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22519,7 +22600,7 @@ _ACEOF 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.16.0 +unbound config.status 1.16.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 1453b3a2f..bf8aa9d8c 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[16]) -m4_define([VERSION_MICRO],[0]) +m4_define([VERSION_MICRO],[3]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=16 +LIBUNBOUND_REVISION=19 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -102,6 +102,9 @@ LIBUNBOUND_AGE=1 # 1.14.0 had 9:14:1 # 1.15.0 had 9:15:1 # 1.16.0 had 9:16:1 +# 1.16.1 had 9:17:1 +# 1.16.2 had 9:18:1 +# 1.16.3 had 9:19:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -906,7 +909,7 @@ else AC_MSG_RESULT([no]) fi AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h openssl/param_build.h],,, [AC_INCLUDES_DEFAULT]) -AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex]) +AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex]) # these check_funcs need -lssl BAKLIBS="$LIBS" @@ -1499,7 +1502,7 @@ if test x_$enable_static_exe = x_yes; then else LIBS="$LIBS -lgdi32" fi - LIBS="$LIBS -lz" + AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ]) LIBS="$LIBS -l:libssp.a" fi fi @@ -1516,7 +1519,7 @@ if test x_$enable_fully_static = x_yes; then else LIBS="$LIBS -lgdi32" fi - LIBS="$LIBS -lz" + AC_CHECK_LIB([z], [compress], [ LIBS="$LIBS -lz" ]) LIBS="$LIBS -l:libssp.a" fi fi diff --git a/contrib/metrics.awk b/contrib/metrics.awk index 5a7a2569c..ca48c035a 100644 --- a/contrib/metrics.awk +++ b/contrib/metrics.awk @@ -28,6 +28,7 @@ END { print "unbound_hits_queries{type=\"total.num.prefetch\"} " val["total.num.prefetch"]; print "unbound_hits_queries{type=\"num.query.tcp\"} " val["num.query.tcp"]; print "unbound_hits_queries{type=\"num.query.tcpout\"} " val["num.query.tcpout"]; + print "unbound_hits_queries{type=\"num.query.udpout\"} " val["num.query.udpout"]; print "unbound_hits_queries{type=\"num.query.tls\"} " val["num.query.tls"]; print "unbound_hits_queries{type=\"num.query.tls.resume\"} " val["num.query.tls.resume"]; print "unbound_hits_queries{type=\"num.query.ipv6\"} " val["num.query.ipv6"]; diff --git a/contrib/unbound_munin_ b/contrib/unbound_munin_ index 503752758..a756a5d1c 100755 --- a/contrib/unbound_munin_ +++ b/contrib/unbound_munin_ @@ -253,6 +253,7 @@ if test "$1" = "config" ; then p_config "total.num.prefetch" "cache prefetch" "ABSOLUTE" p_config "num.query.tcp" "TCP queries" "ABSOLUTE" p_config "num.query.tcpout" "TCP out queries" "ABSOLUTE" + p_config "num.query.udpout" "UDP out queries" "ABSOLUTE" p_config "num.query.tls" "TLS queries" "ABSOLUTE" p_config "num.query.tls.resume" "TLS resumes" "ABSOLUTE" p_config "num.query.ipv6" "IPv6 queries" "ABSOLUTE" @@ -452,7 +453,7 @@ hits) for x in `grep "^thread[0-9][0-9]*\.num\.queries=" $state | sed -e 's/=.*//'` total.num.queries \ total.num.cachehits total.num.prefetch num.query.tcp \ - num.query.tcpout num.query.tls num.query.tls.resume \ + num.query.tcpout num.query.udpout num.query.tls num.query.tls.resume \ num.query.ipv6 unwanted.queries \ unwanted.replies; do if grep "^"$x"=" $state >/dev/null 2>&1; then diff --git a/daemon/cachedump.c b/daemon/cachedump.c index b929f909b..baf8008ea 100644 --- a/daemon/cachedump.c +++ b/daemon/cachedump.c @@ -679,7 +679,8 @@ load_msg(RES* ssl, sldns_buffer* buf, struct worker* worker) if(!go_on) return 1; /* skip this one, not all references satisfied */ - if(!dns_cache_store(&worker->env, &qinf, &rep, 0, 0, 0, NULL, flags)) { + if(!dns_cache_store(&worker->env, &qinf, &rep, 0, 0, 0, NULL, flags, + *worker->env.now)) { log_warn("error out of memory"); return 0; } @@ -850,7 +851,7 @@ int print_deleg_lookup(RES* ssl, struct worker* worker, uint8_t* nm, while(1) { dp = dns_cache_find_delegation(&worker->env, nm, nmlen, qinfo.qtype, qinfo.qclass, region, &msg, - *worker->env.now); + *worker->env.now, 0, NULL, 0); if(!dp) { return ssl_printf(ssl, "no delegation from " "cache; goes to configured roots\n"); diff --git a/daemon/daemon.c b/daemon/daemon.c index 0e3923b4e..4ed531855 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -795,7 +795,7 @@ daemon_delete(struct daemon* daemon) ub_c_lex_destroy(); /* libcrypto cleanup */ #ifdef HAVE_SSL -# if defined(USE_GOST) && defined(HAVE_LDNS_KEY_EVP_UNLOAD_GOST) +# if defined(USE_GOST) sldns_key_EVP_unload_gost(); # endif # if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS && HAVE_DECL_SK_SSL_COMP_POP_FREE diff --git a/daemon/remote.c b/daemon/remote.c index 675ef4397..ec7a4d5d9 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -988,6 +988,8 @@ print_ext(RES* ssl, struct ub_stats_info* s) (unsigned long)s->svr.qtcp)) return 0; if(!ssl_printf(ssl, "num.query.tcpout"SQ"%lu\n", (unsigned long)s->svr.qtcp_outgoing)) return 0; + if(!ssl_printf(ssl, "num.query.udpout"SQ"%lu\n", + (unsigned long)s->svr.qudp_outgoing)) return 0; if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n", (unsigned long)s->svr.qtls)) return 0; if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n", diff --git a/daemon/stats.c b/daemon/stats.c index d08f18dbb..57c428271 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -281,6 +281,7 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) /* values from outside network */ s->svr.unwanted_replies = (long long)worker->back->unwanted_replies; s->svr.qtcp_outgoing = (long long)worker->back->num_tcp_outgoing; + s->svr.qudp_outgoing = (long long)worker->back->num_udp_outgoing; /* get and reset validator rrset bogus number */ s->svr.rrset_bogus = (long long)get_rrset_bogus(worker, reset); @@ -424,6 +425,7 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) total->svr.qclass_big += a->svr.qclass_big; total->svr.qtcp += a->svr.qtcp; total->svr.qtcp_outgoing += a->svr.qtcp_outgoing; + total->svr.qudp_outgoing += a->svr.qudp_outgoing; total->svr.qtls += a->svr.qtls; total->svr.qtls_resume += a->svr.qtls_resume; total->svr.qhttps += a->svr.qhttps; diff --git a/daemon/worker.c b/daemon/worker.c index bf8c5d6b6..010c4dc0a 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -459,7 +459,7 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, dp = dns_cache_find_delegation(&worker->env, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, - worker->scratchpad, &msg, timenow); + worker->scratchpad, &msg, timenow, 0, NULL, 0); if(!dp) { /* no delegation, need to reprime */ return 0; } @@ -1639,10 +1639,11 @@ lookup_cache: is_secure_answer = 0; h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2)); if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) { + struct reply_info* rep = (struct reply_info*)e->data; /* answer from cache - we have acquired a readlock on it */ - if(answer_from_cache(worker, &qinfo, - cinfo, &need_drop, &is_expired_answer, &is_secure_answer, - &alias_rrset, &partial_rep, (struct reply_info*)e->data, + if(answer_from_cache(worker, &qinfo, cinfo, &need_drop, + &is_expired_answer, &is_secure_answer, + &alias_rrset, &partial_rep, rep, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), repinfo, &edns)) { @@ -1650,15 +1651,13 @@ lookup_cache: * Note that if there is more than one pass * its qname must be that used for cache * lookup. */ - if((worker->env.cfg->prefetch && *worker->env.now >= - ((struct reply_info*)e->data)->prefetch_ttl) || - (worker->env.cfg->serve_expired && - *worker->env.now >= ((struct reply_info*)e->data)->ttl)) { + if((worker->env.cfg->prefetch && + *worker->env.now >= rep->prefetch_ttl) || + (worker->env.cfg->serve_expired && + *worker->env.now > rep->ttl)) { - time_t leeway = ((struct reply_info*)e-> - data)->ttl - *worker->env.now; - if(((struct reply_info*)e->data)->ttl - < *worker->env.now) + time_t leeway = rep->ttl - *worker->env.now; + if(rep->ttl < *worker->env.now) leeway = 0; lock_rw_unlock(&e->lock); @@ -2218,6 +2217,7 @@ void worker_stats_clear(struct worker* worker) mesh_stats_clear(worker->env.mesh); worker->back->unwanted_replies = 0; worker->back->num_tcp_outgoing = 0; + worker->back->num_udp_outgoing = 0; } void worker_start_accept(void* arg) diff --git a/dns64/dns64.c b/dns64/dns64.c index d01b436e1..4b98b609e 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -652,7 +652,7 @@ handle_event_moddone(struct module_qstate* qstate, int id) if ( (!iq || !iq->started_no_cache_store) && qstate->return_msg && qstate->return_msg->rep && !dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, - 0, 0, 0, NULL, qstate->query_flags)) + 0, 0, 0, NULL, qstate->query_flags, qstate->qstarttime)) log_err("out of memory"); /* do nothing */ @@ -991,7 +991,7 @@ dns64_inform_super(struct module_qstate* qstate, int id, /* Store the generated response in cache. */ if ( (!super_dq || !super_dq->started_no_cache_store) && !dns_cache_store(super->env, &super->qinfo, super->return_msg->rep, - 0, 0, 0, NULL, super->query_flags)) + 0, 0, 0, NULL, super->query_flags, qstate->qstarttime)) log_err("out of memory"); } diff --git a/doc/Changelog b/doc/Changelog index 8df5f367c..24605888b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,130 @@ +5 August 2022: Wouter + - Fix #734 [FR] enable unbound-checkconf to detect more (basic) + errors. + +4 August 2022: Wouter + - Fix ratelimit inconsistency, for ip-ratelimits the value is the + amount allowed, like for ratelimits. + +2 August 2022: Wouter + - Fix edns subnet so that scope 0 answers only match sourcemask 0 + queries for answers from cache if from a query with sourcemask 0. + - Fix unittest for edns subnet change. + - Merge #730 from luisdallos: Fix startup failure on Windows 8.1 due + to unsupported IPV6_USER_MTU socket option being set. + +1 August 2022: Wouter + - Fix the novel ghost domain issues CVE-2022-30698 and CVE-2022-30699. + - Tests for ghost domain fixes. + - Tag for 1.16.2 release. The code repo continues with 1.16.3. + - Fix #728: alloc_reg_obtain() core dump. Stop double + alloc_reg_release when serviced_create fails. + +19 July 2022: George + - Update documentation for 'outbound-msg-retry:'. + +19 July 2022: Wouter + - Merge #718: Introduce infra-cache-max-rtt option to config max + retransmit timeout. + +15 July 2022: Wouter + - Merge PR 714: Avoid treat normal hosts as unresponsive servers. + And fixup the lock code. + - iana portlist update. + +12 July 2022: George + - For windows crosscompile, fix setting the IPV6_MTU socket option + equivalent (IPV6_USER_MTU); allows cross compiling with latest + cross-compiler versions. + +12 July 2022: Wouter + - Fix dname count in sldns parse type descriptor for SVCB and HTTPS. + +11 July 2022: Wouter + - Fix verbose EDE error printout. + +4 July 2022: George + - Fix bug introduced in 'improve val_sigcrypt.c::algo_needs_missing for + one loop pass'. + - Merge PR #668 from Cristian Rodríguez: Set IP_BIND_ADDRESS_NO_PORT on + outbound tcp sockets. + +4 July 2022: Wouter + - Tag for 1.16.1rc1 release. This became 1.16.1 on 11 July 2022. + The code repo continues with version 1.16.2 under development. + +3 July 2022: George + - Merge PR #671 from Petr Menšík: Disable ED25519 and ED448 in FIPS + mode on openssl3. + - Merge PR #660 from Petr Menšík: Sha1 runtime insecure. + - For #660: formatting, less verbose logging, add EDE information. + - Fix for correct openssl error when adding windows CA certificates to + the openssl trust store. + - Improve val_sigcrypt.c::algo_needs_missing for one loop pass. + - Reintroduce documentation and more EDE support for + val_sigcrypt.c::dnskeyset_verify_rrset_sig. + +1 July 2022: George + - Merge PR #706: NXNS fallback. + - From #706: Cached NXDOMAIN does not increase the target nx + responses. + - From #706: Don't generate parent side queries if we already + have the lame records in cache. + - From #706: When a lame address is the best choice, don't try to + generate target queries when the missing targets are all lame. + +29 June 2022: Wouter + - iana portlist update. + - Fix detection of libz on windows compile with static option. + - Fix compile warning for windows compile. + +29 June 2022: George + - Add debug option to the mini_tdir.sh test code. + - Fix #704: [FR] Statistics counter for number of outgoing UDP queries + sent; introduces 'num.query.udpout' to the 'unbound-control stats' + command. + - Fix to not count cached NXDOMAIN for MAX_TARGET_NX. + - Allow fallback to the parent side when MAX_TARGET_NX is reached. + This will also allow MAX_TARGET_NX more NXDOMAINs. + +28 June 2022: George + - Show the output of the exact .rpl run that failed with 'make test'. + - Fix for cached 0 TTL records to not trigger prefetching when + serve-expired-client-timeout is set. + +28 June 2022: Wouter + - Fix test program dohclient close to use portability routine. + +23 June 2022: Tom + - Clarify -v flag manpage entry (#705) + +22 June 2022: Philip + - Fix #663: use after free issue with edns options. + +21 June 2022: Philip + - Fix for loading locally stored zones that have lines with blanks or + blanks and comments. + +20 June 2022: George + - Remove unused LDNS function check for GOST Engine unloading. + +14 June 2022: George + - Merge PR #688: Rpz url notify issue. + - Note in the unbound.conf text that NOTIFY is allowed from the url: + addresses for auth and rpz zones. + +3 June 2022: George + - Fix for edns client subnet to respect not looking in its cache when + instructed to do so (e.g., prefetch). + +3 June 2022: Wouter + - makedist.sh picks up 32bit libssp-0.dll when 32bit compile. + 27 May 2022: Wouter - Fix #684: [FTBS] configure script error with libmnl on openSUSE 15.3 (and possibly other distributions) - - Version is set to 1.16.0 for release. Release tag 1.16.0rc1. + - Version is set to 1.16.0 for release. Release tag 1.16.0rc1. This + became release 1.16.0 on 2 June 2022. The source code branch + continues with version 1.16.1 under development. 20 May 2022: Wouter - Fix to silence test for ede error output to the console from the diff --git a/doc/example.conf.in b/doc/example.conf.in index 959ee0aa6..27281608f 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -168,7 +168,8 @@ server: # perform connect for UDP sockets to mitigate ICMP side channel. # udp-connect: yes - # The number of retries when a non-positive response is received. + # The number of retries, per upstream nameserver in a delegation, when + # a throwaway response (also timeouts) is received. # outbound-msg-retry: 5 # msec for waiting for an unknown server to reply. Increase if you @@ -202,6 +203,9 @@ server: # minimum wait time for responses, increase if uplink is long. In msec. # infra-cache-min-rtt: 50 + # maximum wait time for responses. In msec. + # infra-cache-max-rtt: 120000 + # enable to make server probe down hosts more frequently. # infra-keep-probing: no @@ -1045,8 +1049,8 @@ remote-control: # has a copy of the root for local usage. The second serves example.org # authoritatively. zonefile: reads from file (and writes to it if you also # download it), primary: fetches with AXFR and IXFR, or url to zonefile. -# With allow-notify: you can give additional (apart from primaries) sources of -# notifies. +# With allow-notify: you can give additional (apart from primaries and urls) +# sources of notifies. # auth-zone: # name: "." # primary: 199.9.14.201 # b.root-servers.net diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index b15ab79d0..d3147be6f 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -552,6 +552,10 @@ Number of queries that were made using TCP towards the Unbound server. Number of queries that the Unbound server made using TCP outgoing towards other servers. .TP +.I num.query.udpout +Number of queries that the Unbound server made using UDP outgoing towards +other servers. +.TP .I num.query.tls Number of queries that were made using TLS towards the Unbound server. These are also counted in num.query.tcp, because TLS uses TCP. diff --git a/doc/unbound.8.in b/doc/unbound.8.in index 936326912..2143dea15 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -75,7 +75,7 @@ concurrently. .TP .B \-v Increase verbosity. If given multiple times, more information is logged. -This is in addition to the verbosity (if any) from the config file. +This is added to the verbosity (if any) from the config file. .TP .B \-V Show the version number and build options, and exit. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index a27a8e779..5c95107f5 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -395,6 +395,10 @@ Lower limit for dynamic retransmit timeout calculation in infrastructure cache. Default is 50 milliseconds. Increase this value if using forwarders needing more time to do recursive name resolution. .TP +.B infra\-cache\-max\-rtt: \fI +Upper limit for dynamic retransmit timeout calculation in infrastructure +cache. Default is 2 minutes. +.TP .B infra\-keep\-probing: \fI If enabled the server keeps probing hosts that are down, in the one probe at a time regime. Default is no. Hosts that are down, eg. they did @@ -1767,9 +1771,12 @@ set ip\-ratelimit to a suspicious rate to aggressively limit unusually high traffic. Default is off. .TP 5 .B outbound\-msg\-retry: \fI -The number of retries Unbound will do in case of a non positive response is -received. If a forward nameserver is used, this is the number of retries per -forward nameserver in case of throwaway response. +The number of retries, per upstream nameserver in a delegation, that Unbound +will attempt in case a throwaway response is received. +No response (timeout) contributes to the retry counter. +If a forward/stub zone is used, this is the number of retries per nameserver in +the zone. +Default is 5. .TP 5 .B fast\-server\-permil: \fI Specify how many times out of 1000 to pick from the set of fastest servers. @@ -2076,8 +2083,8 @@ With allow\-notify you can specify additional sources of notifies. When notified, the server attempts to first probe and then zone transfer. If the notify is from a primary, it first attempts that primary. Otherwise other primaries are attempted. If there are no primaries, but only urls, the -file is downloaded when notified. The primaries from primary: statements are -allowed notify by default. +file is downloaded when notified. The primaries from primary: and url: +statements are allowed notify by default. .TP .B fallback\-enabled: \fI Default no. If enabled, Unbound falls back to querying the internet as @@ -2691,8 +2698,8 @@ With allow\-notify you can specify additional sources of notifies. When notified, the server attempts to first probe and then zone transfer. If the notify is from a primary, it first attempts that primary. Otherwise other primaries are attempted. If there are no primaries, but only urls, the -file is downloaded when notified. The primaries from primary: statements are -allowed notify by default. +file is downloaded when notified. The primaries from primary: and url: +statements are allowed notify by default. .TP .B zonefile: \fI The filename where the zone is stored. If not given then no zonefile is used. diff --git a/edns-subnet/addrtree.c b/edns-subnet/addrtree.c index 180a02279..ebe71b970 100644 --- a/edns-subnet/addrtree.c +++ b/edns-subnet/addrtree.c @@ -97,6 +97,7 @@ node_create(struct addrtree *tree, void *elem, addrlen_t scope, tree->node_count++; node->scope = scope; node->ttl = ttl; + node->only_match_scope_zero = 0; node->edge[0] = NULL; node->edge[1] = NULL; node->parent_edge = NULL; @@ -155,6 +156,7 @@ clean_node(struct addrtree *tree, struct addrnode *node) if (!node->elem) return; tree->size_bytes -= tree->sizefunc(node->elem); tree->delfunc(tree->env, node->elem); + node->only_match_scope_zero = 0; node->elem = NULL; } @@ -358,7 +360,7 @@ issub(const addrkey_t *s1, addrlen_t l1, void addrtree_insert(struct addrtree *tree, const addrkey_t *addr, addrlen_t sourcemask, addrlen_t scope, void *elem, time_t ttl, - time_t now) + time_t now, int only_match_scope_zero) { struct addrnode *newnode, *node; struct addredge *edge; @@ -381,6 +383,7 @@ addrtree_insert(struct addrtree *tree, const addrkey_t *addr, /* update this node's scope and data */ clean_node(tree, node); node->ttl = ttl; + node->only_match_scope_zero = only_match_scope_zero; node->elem = elem; node->scope = scope; tree->size_bytes += tree->sizefunc(elem); @@ -447,6 +450,7 @@ addrtree_insert(struct addrtree *tree, const addrkey_t *addr, newnode->elem = elem; newnode->scope = scope; newnode->ttl = ttl; + newnode->only_match_scope_zero = only_match_scope_zero; } tree->size_bytes += node_size(tree, newnode); @@ -483,7 +487,8 @@ addrtree_find(struct addrtree *tree, const addrkey_t *addr, /* Current node more specific then question. */ log_assert(depth <= sourcemask); /* does this node have data? if yes, see if we have a match */ - if (node->elem && node->ttl >= now) { + if (node->elem && node->ttl >= now && + !(sourcemask != 0 && node->only_match_scope_zero)) { /* saved at wrong depth */; log_assert(node->scope >= depth); if (depth == node->scope || diff --git a/edns-subnet/addrtree.h b/edns-subnet/addrtree.h index 1aea54e01..0bc1837cd 100644 --- a/edns-subnet/addrtree.h +++ b/edns-subnet/addrtree.h @@ -95,6 +95,10 @@ struct addrnode { time_t ttl; /** Number of significant bits in address. */ addrlen_t scope; + /** Only use the element for queries for subnet/0. Set if the query + * for /0 was answered with scope 0. For query /x answer scope 0, + * they can match anything and this is false. */ + int only_match_scope_zero; /** A node can have 0-2 edges, set to NULL for unused */ struct addredge *edge[2]; /** edge between this node and parent */ @@ -157,11 +161,12 @@ void addrtree_delete(struct addrtree *tree); * @param scope: Number of significant bits in addr. * @param elem: data to store in the tree. * @param ttl: elem is valid up to this time, seconds. + * @param only_match_scope_zero: set for when query /0 has scope /0 answer. * @param now: Current time in seconds. */ void addrtree_insert(struct addrtree *tree, const addrkey_t *addr, addrlen_t sourcemask, addrlen_t scope, void *elem, time_t ttl, - time_t now); + time_t now, int only_match_scope_zero); /** * Find a node containing an element in the tree. diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 25190b040..d4f61bdd6 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -55,6 +55,7 @@ #include "util/config_file.h" #include "util/data/msgreply.h" #include "sldns/sbuffer.h" +#include "sldns/wire2str.h" #include "iterator/iter_utils.h" /** externally called */ @@ -93,13 +94,14 @@ subnet_new_qstate(struct module_qstate *qstate, int id) qstate->minfo[id] = sq; memset(sq, 0, sizeof(*sq)); sq->started_no_cache_store = qstate->no_cache_store; + sq->started_no_cache_lookup = qstate->no_cache_lookup; return 1; } /** Add ecs struct to edns list, after parsing it to wire format. */ void subnet_ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list, - struct module_qstate *qstate) + struct module_qstate *qstate, struct regional *region) { size_t sn_octs, sn_octs_remainder; sldns_buffer* buf = qstate->env->scratch_buffer; @@ -131,7 +133,7 @@ subnet_ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list, edns_opt_list_append(list, qstate->env->cfg->client_subnet_opcode, sn_octs + sn_octs_remainder + 4, - sldns_buffer_begin(buf), qstate->region); + sldns_buffer_begin(buf), region); } } @@ -139,7 +141,7 @@ int ecs_whitelist_check(struct query_info* qinfo, uint16_t ATTR_UNUSED(flags), struct module_qstate* qstate, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), - struct regional* ATTR_UNUSED(region), int id, void* ATTR_UNUSED(cbargs)) + struct regional *region, int id, void* ATTR_UNUSED(cbargs)) { struct subnet_qstate *sq; struct subnet_env *sn_env; @@ -165,7 +167,7 @@ int ecs_whitelist_check(struct query_info* qinfo, if(!edns_opt_list_find(qstate->edns_opts_back_out, qstate->env->cfg->client_subnet_opcode)) { subnet_ecs_opt_list_append(&sq->ecs_server_out, - &qstate->edns_opts_back_out, qstate); + &qstate->edns_opts_back_out, qstate, region); } sq->subnet_sent = 1; } @@ -330,10 +332,13 @@ update_cache(struct module_qstate *qstate, int id) struct slabhash *subnet_msg_cache = sne->subnet_msg_cache; struct ecs_data *edns = &sq->ecs_client_in; size_t i; + int only_match_scope_zero; - /* We already calculated hash upon lookup */ - hashvalue_type h = qstate->minfo[id] ? - ((struct subnet_qstate*)qstate->minfo[id])->qinfo_hash : + /* We already calculated hash upon lookup (lookup_and_reply) if we were + * allowed to look in the ECS cache */ + hashvalue_type h = qstate->minfo[id] && + ((struct subnet_qstate*)qstate->minfo[id])->qinfo_hash_calculated? + ((struct subnet_qstate*)qstate->minfo[id])->qinfo_hash : query_info_hash(&qstate->qinfo, qstate->query_flags); /* Step 1, general qinfo lookup */ struct lruhash_entry *lru_entry = slabhash_lookup(subnet_msg_cache, h, @@ -389,9 +394,12 @@ update_cache(struct module_qstate *qstate, int id) reply_info_set_ttls(rep, *qstate->env->now); rep->flags |= (BIT_RA | BIT_QR); /* fix flags to be sensible for */ rep->flags &= ~(BIT_AA | BIT_CD);/* a reply based on the cache */ + if(edns->subnet_source_mask == 0 && edns->subnet_scope_mask == 0) + only_match_scope_zero = 1; + else only_match_scope_zero = 0; addrtree_insert(tree, (addrkey_t*)edns->subnet_addr, edns->subnet_source_mask, sq->max_scope, rep, - rep->ttl, *qstate->env->now); + rep->ttl, *qstate->env->now, only_match_scope_zero); lock_rw_unlock(&lru_entry->lock); if (need_to_insert) { @@ -416,7 +424,10 @@ lookup_and_reply(struct module_qstate *qstate, int id, struct subnet_qstate *sq) memset(&sq->ecs_client_out, 0, sizeof(sq->ecs_client_out)); - if (sq) sq->qinfo_hash = h; /* Might be useful on cache miss */ + if (sq) { + sq->qinfo_hash = h; /* Might be useful on cache miss */ + sq->qinfo_hash_calculated = 1; + } e = slabhash_lookup(sne->subnet_msg_cache, h, &qstate->qinfo, 1); if (!e) return 0; /* qinfo not in cache */ data = e->data; @@ -668,6 +679,24 @@ ecs_query_response(struct module_qstate* qstate, struct dns_msg* response, return 1; } +/** verbose print edns subnet option in pretty print */ +static void +subnet_log_print(const char* s, struct edns_option* ecs_opt) +{ + if(verbosity >= VERB_ALGO) { + char buf[256]; + char* str = buf; + size_t str_len = sizeof(buf); + if(!ecs_opt) { + verbose(VERB_ALGO, "%s (null)", s); + return; + } + (void)sldns_wire2str_edns_subnet_print(&str, &str_len, + ecs_opt->opt_data, ecs_opt->opt_len); + verbose(VERB_ALGO, "%s %s", s, buf); + } +} + int ecs_edns_back_parsed(struct module_qstate* qstate, int id, void* ATTR_UNUSED(cbargs)) @@ -682,6 +711,7 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, qstate->env->cfg->client_subnet_opcode)) && parse_subnet_option(ecs_opt, &sq->ecs_server_in) && sq->subnet_sent && sq->ecs_server_in.subnet_validdata) { + subnet_log_print("answer has edns subnet", ecs_opt); /* Only skip global cache store if we sent an ECS option * and received one back. Answers from non-whitelisted * servers will end up in global cache. Answers for @@ -730,6 +760,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, qstate->ext_state[id] = module_finished; return; } + subnet_log_print("query has edns subnet", ecs_opt); sq->subnet_downstream = 1; } else if(qstate->mesh_info->reply_list) { @@ -758,18 +789,28 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, return; } - lock_rw_wrlock(&sne->biglock); - if (lookup_and_reply(qstate, id, sq)) { - sne->num_msg_cache++; - lock_rw_unlock(&sne->biglock); - verbose(VERB_QUERY, "subnetcache: answered from cache"); - qstate->ext_state[id] = module_finished; + if(!sq->started_no_cache_lookup && !qstate->blacklist) { + lock_rw_wrlock(&sne->biglock); + if(lookup_and_reply(qstate, id, sq)) { + sne->num_msg_cache++; + lock_rw_unlock(&sne->biglock); + verbose(VERB_QUERY, "subnetcache: answered from cache"); + qstate->ext_state[id] = module_finished; - subnet_ecs_opt_list_append(&sq->ecs_client_out, - &qstate->edns_opts_front_out, qstate); - return; + subnet_ecs_opt_list_append(&sq->ecs_client_out, + &qstate->edns_opts_front_out, qstate, + qstate->region); + if(verbosity >= VERB_ALGO) { + subnet_log_print("reply has edns subnet", + edns_opt_list_find( + qstate->edns_opts_front_out, + qstate->env->cfg-> + client_subnet_opcode)); + } + return; + } + lock_rw_unlock(&sne->biglock); } - lock_rw_unlock(&sne->biglock); sq->ecs_server_out.subnet_addr_fam = sq->ecs_client_in.subnet_addr_fam; @@ -812,9 +853,18 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, if(qstate->ext_state[id] == module_finished && qstate->return_msg) { subnet_ecs_opt_list_append(&sq->ecs_client_out, - &qstate->edns_opts_front_out, qstate); + &qstate->edns_opts_front_out, qstate, + qstate->region); + if(verbosity >= VERB_ALGO) { + subnet_log_print("reply has edns subnet", + edns_opt_list_find( + qstate->edns_opts_front_out, + qstate->env->cfg-> + client_subnet_opcode)); + } } qstate->no_cache_store = sq->started_no_cache_store; + qstate->no_cache_lookup = sq->started_no_cache_lookup; return; } if(sq && outbound) { diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h index c877692b4..f0bcaad33 100644 --- a/edns-subnet/subnetmod.h +++ b/edns-subnet/subnetmod.h @@ -76,6 +76,7 @@ struct subnet_msg_cache_data { struct subnet_qstate { /** We need the hash for both cache lookup and insert */ hashvalue_type qinfo_hash; + int qinfo_hash_calculated; /** ecs_data for client communication */ struct ecs_data ecs_client_in; struct ecs_data ecs_client_out; @@ -92,6 +93,8 @@ struct subnet_qstate { uint8_t max_scope; /** has the subnet module been started with no_cache_store? */ int started_no_cache_store; + /** has the subnet module been started with no_cache_lookup? */ + int started_no_cache_lookup; }; void subnet_data_delete(void* d, void* ATTR_UNUSED(arg)); @@ -145,7 +148,7 @@ void subnet_markdel(void* key); /** Add ecs struct to edns list, after parsing it to wire format. */ void subnet_ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list, - struct module_qstate *qstate); + struct module_qstate *qstate, struct regional *region); /** Create ecs_data from the sockaddr_storage information. */ void subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs, diff --git a/ipsecmod/ipsecmod.c b/ipsecmod/ipsecmod.c index 577f7112e..19549d4ee 100644 --- a/ipsecmod/ipsecmod.c +++ b/ipsecmod/ipsecmod.c @@ -456,7 +456,7 @@ ipsecmod_handle_query(struct module_qstate* qstate, /* Store A/AAAA in cache. */ if(!dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, 0, qstate->prefetch_leeway, - 0, qstate->region, qstate->query_flags)) { + 0, qstate->region, qstate->query_flags, qstate->qstarttime)) { log_err("ipsecmod: out of memory caching record"); } qstate->ext_state[id] = module_finished; diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c index 80148e810..4bffa1b3a 100644 --- a/iterator/iter_delegpt.c +++ b/iterator/iter_delegpt.c @@ -185,6 +185,10 @@ delegpt_add_target(struct delegpt* dp, struct regional* region, else ns->got4 = 1; if(ns->got4 && ns->got6) ns->resolved = 1; + } else { + if(addr_is_ip6(addr, addrlen)) + ns->done_pside6 = 1; + else ns->done_pside4 = 1; } log_assert(ns->port>0); return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, @@ -338,13 +342,16 @@ delegpt_count_targets(struct delegpt* dp) } size_t -delegpt_count_missing_targets(struct delegpt* dp) +delegpt_count_missing_targets(struct delegpt* dp, int* alllame) { struct delegpt_ns* ns; - size_t n = 0; - for(ns = dp->nslist; ns; ns = ns->next) - if(!ns->resolved) - n++; + size_t n = 0, nlame = 0; + for(ns = dp->nslist; ns; ns = ns->next) { + if(ns->resolved) continue; + n++; + if(ns->lame) nlame++; + } + if(alllame && n == nlame) *alllame = 1; return n; } @@ -694,6 +701,10 @@ int delegpt_add_target_mlc(struct delegpt* dp, uint8_t* name, size_t namelen, else ns->got4 = 1; if(ns->got4 && ns->got6) ns->resolved = 1; + } else { + if(addr_is_ip6(addr, addrlen)) + ns->done_pside6 = 1; + else ns->done_pside4 = 1; } log_assert(ns->port>0); return delegpt_add_addr_mlc(dp, addr, addrlen, bogus, lame, diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h index 998b98cd8..62c8edc51 100644 --- a/iterator/iter_delegpt.h +++ b/iterator/iter_delegpt.h @@ -330,9 +330,10 @@ void delegpt_add_unused_targets(struct delegpt* dp); /** * Count number of missing targets. These are ns names with no resolved flag. * @param dp: delegation point. + * @param alllame: if set, check if all the missing targets are lame. * @return number of missing targets (or 0). */ -size_t delegpt_count_missing_targets(struct delegpt* dp); +size_t delegpt_count_missing_targets(struct delegpt* dp, int* alllame); /** count total number of targets in dp */ size_t delegpt_count_targets(struct delegpt* dp); diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index f3bea46d6..3e13e595c 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -70,8 +70,6 @@ /** time when nameserver glue is said to be 'recent' */ #define SUSPICION_RECENT_EXPIRY 86400 -/** penalty to validation failed blacklisted IPs */ -#define BLACKLIST_PENALTY (USEFUL_SERVER_TOP_TIMEOUT*4) /** fillup fetch policy array */ static void @@ -367,6 +365,7 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env, struct sock_list* blacklist, time_t prefetch) { int got_num = 0, low_rtt = 0, swap_to_front, rtt_band = RTT_BAND, nth; + int alllame = 0; size_t num_results; struct delegpt_addr* a, *n, *prev=NULL; @@ -376,7 +375,10 @@ iter_filter_order(struct iter_env* iter_env, struct module_env* env, if(got_num == 0) return 0; if(low_rtt >= USEFUL_SERVER_TOP_TIMEOUT && - (delegpt_count_missing_targets(dp) > 0 || open_target > 0)) { + /* If all missing (or not fully resolved) targets are lame, + * then use the remaining lame address. */ + ((delegpt_count_missing_targets(dp, &alllame) > 0 && !alllame) || + open_target > 0)) { verbose(VERB_ALGO, "Bad choices, trying to get more choice"); return 0; /* we want more choice. The best choice is a bad one. return 0 to force the caller to fetch more */ @@ -657,10 +659,10 @@ dns_copy_msg(struct dns_msg* from, struct regional* region) void iter_dns_store(struct module_env* env, struct query_info* msgqinf, struct reply_info* msgrep, int is_referral, time_t leeway, int pside, - struct regional* region, uint16_t flags) + struct regional* region, uint16_t flags, time_t qstarttime) { if(!dns_cache_store(env, msgqinf, msgrep, is_referral, leeway, - pside, region, flags)) + pside, region, flags, qstarttime)) log_err("out of memory: cannot store data in cache"); } diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h index c0e518157..8583fde58 100644 --- a/iterator/iter_utils.h +++ b/iterator/iter_utils.h @@ -132,6 +132,7 @@ struct dns_msg* dns_copy_msg(struct dns_msg* from, struct regional* regional); * can be prefetch-updates. * @param region: to copy modified (cache is better) rrs back to. * @param flags: with BIT_CD for dns64 AAAA translated queries. + * @param qstarttime: time of query start. * return void, because we are not interested in alloc errors, * the iterator and validator can operate on the results in their * scratch space (the qstate.region) and are not dependent on the cache. @@ -140,7 +141,7 @@ struct dns_msg* dns_copy_msg(struct dns_msg* from, struct regional* regional); */ void iter_dns_store(struct module_env* env, struct query_info* qinf, struct reply_info* rep, int is_referral, time_t leeway, int pside, - struct regional* region, uint16_t flags); + struct regional* region, uint16_t flags, time_t qstarttime); /** * Select randomly with n/m probability. diff --git a/iterator/iterator.c b/iterator/iterator.c index 9c3cab478..f1f7228f1 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -71,6 +71,10 @@ /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; +/* in msec */ +int USEFUL_SERVER_TOP_TIMEOUT = 120000; +/* Equals USEFUL_SERVER_TOP_TIMEOUT*4 */ +int BLACKLIST_PENALTY = (120000*4); static void target_count_increase_nx(struct iter_qstate* iq, int num); @@ -253,8 +257,9 @@ error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* mark as failed */ if((dpns->got4 == 2 || !ie->supports_ipv4) && - (dpns->got6 == 2 || !ie->supports_ipv6)) + (dpns->got6 == 2 || !ie->supports_ipv6)) { target_count_increase_nx(super_iq, 1); + } } if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS) { /* prime failed to get delegation */ @@ -370,7 +375,7 @@ error_response_cache(struct module_qstate* qstate, int id, int rcode) err.security = sec_status_indeterminate; verbose(VERB_ALGO, "store error response in message cache"); iter_dns_store(qstate->env, &qstate->qinfo, &err, 0, 0, 0, NULL, - qstate->query_flags); + qstate->query_flags, qstate->qstarttime); } return error_response(qstate, id, rcode); } @@ -678,15 +683,20 @@ is_caps_whitelisted(struct iter_env* ie, struct iter_qstate* iq) iq->qchase.qclass) != NULL; } -/** create target count structure for this query */ +/** + * Create target count structure for this query. This is always explicitly + * created for the parent query. + */ static void target_count_create(struct iter_qstate* iq) { if(!iq->target_count) { - iq->target_count = (int*)calloc(3, sizeof(int)); + iq->target_count = (int*)calloc(TARGET_COUNT_MAX, sizeof(int)); /* if calloc fails we simply do not track this number */ - if(iq->target_count) - iq->target_count[0] = 1; + if(iq->target_count) { + iq->target_count[TARGET_COUNT_REF] = 1; + iq->nxns_dp = (uint8_t**)calloc(1, sizeof(uint8_t*)); + } } } @@ -695,7 +705,7 @@ target_count_increase(struct iter_qstate* iq, int num) { target_count_create(iq); if(iq->target_count) - iq->target_count[1] += num; + iq->target_count[TARGET_COUNT_QUERIES] += num; iq->dp_target_count++; } @@ -704,7 +714,7 @@ target_count_increase_nx(struct iter_qstate* iq, int num) { target_count_create(iq); if(iq->target_count) - iq->target_count[2] += num; + iq->target_count[TARGET_COUNT_NX] += num; } /** @@ -799,8 +809,10 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, subiq->num_target_queries = 0; target_count_create(iq); subiq->target_count = iq->target_count; - if(iq->target_count) - iq->target_count[0] ++; /* extra reference */ + if(iq->target_count) { + iq->target_count[TARGET_COUNT_REF] ++; /* extra reference */ + subiq->nxns_dp = iq->nxns_dp; + } subiq->dp_target_count = 0; subiq->num_current_queries = 0; subiq->depth = iq->depth+1; @@ -1477,7 +1489,8 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, iq->dp = dns_cache_find_delegation(qstate->env, delname, delnamelen, iq->qchase.qtype, iq->qchase.qclass, qstate->region, &iq->deleg_msg, - *qstate->env->now+qstate->prefetch_leeway); + *qstate->env->now+qstate->prefetch_leeway, 1, + dpname, dpnamelen); else iq->dp = NULL; /* If the cache has returned nothing, then we have a @@ -1769,7 +1782,8 @@ generate_parentside_target_query(struct module_qstate* qstate, subiq->dp = dns_cache_find_delegation(qstate->env, name, namelen, qtype, qclass, subq->region, &subiq->deleg_msg, - *qstate->env->now+subq->prefetch_leeway); + *qstate->env->now+subq->prefetch_leeway, + 1, NULL, 0); /* if no dp, then it's from root, refetch unneeded */ if(subiq->dp) { subiq->dnssec_expected = iter_indicates_dnssec( @@ -1832,7 +1846,7 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, int toget = 0; iter_mark_cycle_targets(qstate, iq->dp); - missing = (int)delegpt_count_missing_targets(iq->dp); + missing = (int)delegpt_count_missing_targets(iq->dp, NULL); log_assert(maxtargets != 0); /* that would not be useful */ /* Generate target requests. Basically, any missing targets @@ -1851,11 +1865,12 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, if(iq->depth == ie->max_dependency_depth) return 0; if(iq->depth > 0 && iq->target_count && - iq->target_count[1] > MAX_TARGET_COUNT) { + iq->target_count[TARGET_COUNT_QUERIES] > MAX_TARGET_COUNT) { char s[LDNS_MAX_DOMAINLEN+1]; dname_str(qstate->qinfo.qname, s); verbose(VERB_QUERY, "request %s has exceeded the maximum " - "number of glue fetches %d", s, iq->target_count[1]); + "number of glue fetches %d", s, + iq->target_count[TARGET_COUNT_QUERIES]); return 0; } if(iq->dp_target_count > MAX_DP_TARGET_COUNT) { @@ -1883,7 +1898,9 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, continue; } - if(ie->supports_ipv6 && !ns->got6) { + if(ie->supports_ipv6 && + ((ns->lame && !ns->done_pside6) || + (!ns->lame && !ns->got6))) { /* Send the AAAA request. */ if(!generate_target_query(qstate, iq, id, ns->name, ns->namelen, @@ -1896,7 +1913,9 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, query_count++; } /* Send the A request. */ - if(ie->supports_ipv4 && !ns->got4) { + if(ie->supports_ipv4 && + ((ns->lame && !ns->done_pside4) || + (!ns->lame && !ns->got4))) { if(!generate_target_query(qstate, iq, id, ns->name, ns->namelen, LDNS_RR_TYPE_A, iq->qchase.qclass)) { @@ -2006,7 +2025,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, return next_state(iq, QUERYTARGETS_STATE); } /* query for an extra name added by the parent-NS record */ - if(delegpt_count_missing_targets(iq->dp) > 0) { + if(delegpt_count_missing_targets(iq->dp, NULL) > 0) { int qs = 0; verbose(VERB_ALGO, "try parent-side target name"); if(!query_for_targets(qstate, iq, ie, id, 1, &qs)) { @@ -2027,11 +2046,12 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } if(iq->depth > 0 && iq->target_count && - iq->target_count[1] > MAX_TARGET_COUNT) { + iq->target_count[TARGET_COUNT_QUERIES] > MAX_TARGET_COUNT) { char s[LDNS_MAX_DOMAINLEN+1]; dname_str(qstate->qinfo.qname, s); verbose(VERB_QUERY, "request %s has exceeded the maximum " - "number of glue fetches %d", s, iq->target_count[1]); + "number of glue fetches %d", s, + iq->target_count[TARGET_COUNT_QUERIES]); errinf(qstate, "exceeded the maximum number of glue fetches"); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -2158,6 +2178,32 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) return 0; } + +/** + * Check if we wait responses for sent queries and update the iterator's + * external state. + */ +static void +check_waiting_queries(struct iter_qstate* iq, struct module_qstate* qstate, + int id) +{ + if(iq->num_target_queries>0 && iq->num_current_queries>0) { + verbose(VERB_ALGO, "waiting for %d targets to " + "resolve or %d outstanding queries to " + "respond", iq->num_target_queries, + iq->num_current_queries); + qstate->ext_state[id] = module_wait_reply; + } else if(iq->num_target_queries>0) { + verbose(VERB_ALGO, "waiting for %d targets to " + "resolve", iq->num_target_queries); + qstate->ext_state[id] = module_wait_subquery; + } else { + verbose(VERB_ALGO, "waiting for %d " + "outstanding queries to respond", + iq->num_current_queries); + qstate->ext_state[id] = module_wait_reply; + } +} /** * This is the request event state where the request will be sent to one of @@ -2211,12 +2257,91 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, errinf(qstate, "exceeded the maximum number of sends"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } - if(iq->target_count && iq->target_count[2] > MAX_TARGET_NX) { - verbose(VERB_QUERY, "request has exceeded the maximum " - " number of nxdomain nameserver lookups with %d", - iq->target_count[2]); - errinf(qstate, "exceeded the maximum nameserver nxdomains"); - return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + + /* Check if we reached MAX_TARGET_NX limit without a fallback activation. */ + if(iq->target_count && !*iq->nxns_dp && + iq->target_count[TARGET_COUNT_NX] > MAX_TARGET_NX) { + struct delegpt_ns* ns; + /* If we can wait for resolution, do so. */ + if(iq->num_target_queries>0 || iq->num_current_queries>0) { + check_waiting_queries(iq, qstate, id); + return 0; + } + verbose(VERB_ALGO, "request has exceeded the maximum " + "number of nxdomain nameserver lookups (%d) with %d", + MAX_TARGET_NX, iq->target_count[TARGET_COUNT_NX]); + /* Check for dp because we require one below */ + if(!iq->dp) { + verbose(VERB_QUERY, "Failed to get a delegation, " + "giving up"); + errinf(qstate, "failed to get a delegation (eg. prime " + "failure)"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + /* We reached the limit but we already have parent side + * information; stop resolution */ + if(iq->dp->has_parent_side_NS) { + verbose(VERB_ALGO, "parent-side information is " + "already present for the delegation point, no " + "fallback possible"); + errinf(qstate, "exceeded the maximum nameserver nxdomains"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + verbose(VERB_ALGO, "initiating parent-side fallback for " + "nxdomain nameserver lookups"); + /* Mark all the current NSes as resolved to allow for parent + * fallback */ + for(ns=iq->dp->nslist; ns; ns=ns->next) { + ns->resolved = 1; + } + /* Note the delegation point that triggered the NXNS fallback; + * no reason for shared queries to keep trying there. + * This also marks the fallback activation. */ + *iq->nxns_dp = malloc(iq->dp->namelen); + if(!*iq->nxns_dp) { + verbose(VERB_ALGO, "out of memory while initiating " + "fallback"); + errinf(qstate, "exceeded the maximum nameserver " + "nxdomains (malloc)"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + memcpy(*iq->nxns_dp, iq->dp->name, iq->dp->namelen); + } else if(iq->target_count && *iq->nxns_dp) { + /* Handle the NXNS fallback case. */ + /* If we can wait for resolution, do so. */ + if(iq->num_target_queries>0 || iq->num_current_queries>0) { + check_waiting_queries(iq, qstate, id); + return 0; + } + /* Check for dp because we require one below */ + if(!iq->dp) { + verbose(VERB_QUERY, "Failed to get a delegation, " + "giving up"); + errinf(qstate, "failed to get a delegation (eg. prime " + "failure)"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + + if(iq->target_count[TARGET_COUNT_NX] > MAX_TARGET_NX_FALLBACK) { + verbose(VERB_ALGO, "request has exceeded the maximum " + "number of fallback nxdomain nameserver " + "lookups (%d) with %d", MAX_TARGET_NX_FALLBACK, + iq->target_count[TARGET_COUNT_NX]); + errinf(qstate, "exceeded the maximum nameserver nxdomains"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + + if(!iq->dp->has_parent_side_NS) { + struct delegpt_ns* ns; + if(!dname_canonical_compare(*iq->nxns_dp, iq->dp->name)) { + verbose(VERB_ALGO, "this delegation point " + "initiated the fallback, marking the " + "nslist as resolved"); + for(ns=iq->dp->nslist; ns; ns=ns->next) { + ns->resolved = 1; + } + } + } } /* Make sure we have a delegation point, otherwise priming failed @@ -2434,7 +2559,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, * that servfail is cached, which is not good as opportunism goes. */ if(iq->depth < ie->max_dependency_depth && iq->num_target_queries == 0 - && (!iq->target_count || iq->target_count[2]==0) + && (!iq->target_count || iq->target_count[TARGET_COUNT_NX]==0) && iq->sent_count < TARGET_FETCH_STOP) { tf_policy = ie->target_fetch_policy[iq->depth]; } @@ -2523,9 +2648,9 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, } /* Select the next usable target, filtering out unsuitable targets. */ - target = iter_server_selection(ie, qstate->env, iq->dp, + target = iter_server_selection(ie, qstate->env, iq->dp, iq->dp->name, iq->dp->namelen, iq->qchase.qtype, - &iq->dnssec_lame_query, &iq->chase_to_rd, + &iq->dnssec_lame_query, &iq->chase_to_rd, iq->num_target_queries, qstate->blacklist, qstate->prefetch_leeway); @@ -2544,7 +2669,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, /* If there is nothing to wait for, then we need * to distinguish between generating (a) new target * query, or failing. */ - if(delegpt_count_missing_targets(iq->dp) > 0) { + if(delegpt_count_missing_targets(iq->dp, NULL) > 0) { int qs = 0; verbose(VERB_ALGO, "querying for next " "missing target"); @@ -2556,7 +2681,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, LDNS_RCODE_SERVFAIL); } if(qs == 0 && - delegpt_count_missing_targets(iq->dp) == 0){ + delegpt_count_missing_targets(iq->dp, NULL) == 0){ /* it looked like there were missing * targets, but they did not turn up. * Try the bad choices again (if any), @@ -2595,23 +2720,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, /* otherwise, we have no current targets, so submerge * until one of the target or direct queries return. */ - if(iq->num_target_queries>0 && iq->num_current_queries>0) { - verbose(VERB_ALGO, "no current targets -- waiting " - "for %d targets to resolve or %d outstanding" - " queries to respond", iq->num_target_queries, - iq->num_current_queries); - qstate->ext_state[id] = module_wait_reply; - } else if(iq->num_target_queries>0) { - verbose(VERB_ALGO, "no current targets -- waiting " - "for %d targets to resolve.", - iq->num_target_queries); - qstate->ext_state[id] = module_wait_subquery; - } else { - verbose(VERB_ALGO, "no current targets -- waiting " - "for %d outstanding queries to respond.", - iq->num_current_queries); - qstate->ext_state[id] = module_wait_reply; - } + verbose(VERB_ALGO, "no current targets"); + check_waiting_queries(iq, qstate, id); /* undo qname minimise step because we'll get back here * to do it again */ if(qout_orig && iq->minimise_count > 0) { @@ -2839,7 +2949,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->qchase.qtype != iq->response->qinfo.qtype, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, - qstate->region, qstate->query_flags); + qstate->region, qstate->query_flags, + qstate->qstarttime); /* close down outstanding requests to be discarded */ outbound_list_clear(&iq->outlist); iq->num_current_queries = 0; @@ -2928,7 +3039,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Store the referral under the current query */ /* no prefetch-leeway, since its not the answer */ iter_dns_store(qstate->env, &iq->response->qinfo, - iq->response->rep, 1, 0, 0, NULL, 0); + iq->response->rep, 1, 0, 0, NULL, 0, + qstate->qstarttime); if(iq->store_parent_NS) iter_store_parentside_NS(qstate->env, iq->response->rep); @@ -3042,7 +3154,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iter_dns_store(qstate->env, &iq->response->qinfo, iq->response->rep, 1, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, NULL, - qstate->query_flags); + qstate->query_flags, qstate->qstarttime); /* set the current request's qname to the new value. */ iq->qchase.qname = sname; iq->qchase.qname_len = snamelen; @@ -3383,8 +3495,11 @@ processTargetResponse(struct module_qstate* qstate, int id, delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* fail the target */ if((dpns->got4 == 2 || !ie->supports_ipv4) && - (dpns->got6 == 2 || !ie->supports_ipv6)) + (dpns->got6 == 2 || !ie->supports_ipv6) && + /* do not count cached answers */ + (qstate->reply_origin && qstate->reply_origin->len != 0)) { target_count_increase_nx(foriq, 1); + } } } @@ -3645,7 +3760,8 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, iter_dns_store(qstate->env, &qstate->qinfo, iq->response->rep, 0, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, - qstate->region, qstate->query_flags); + qstate->region, qstate->query_flags, + qstate->qstarttime); } } qstate->return_rcode = LDNS_RCODE_NOERROR; @@ -4032,8 +4148,11 @@ iter_clear(struct module_qstate* qstate, int id) iq = (struct iter_qstate*)qstate->minfo[id]; if(iq) { outbound_list_clear(&iq->outlist); - if(iq->target_count && --iq->target_count[0] == 0) + if(iq->target_count && --iq->target_count[TARGET_COUNT_REF] == 0) { free(iq->target_count); + if(*iq->nxns_dp) free(*iq->nxns_dp); + free(iq->nxns_dp); + } iq->num_current_queries = 0; } qstate->minfo[id] = NULL; diff --git a/iterator/iterator.h b/iterator/iterator.h index 8b840528d..b71b7fe99 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -60,6 +60,9 @@ struct rbtree_type; /** max number of nxdomains allowed for target lookups for a query and * its subqueries */ #define MAX_TARGET_NX 5 +/** max number of nxdomains allowed for target lookups for a query and + * its subqueries when fallback has kicked in */ +#define MAX_TARGET_NX_FALLBACK (MAX_TARGET_NX*2) /** max number of query restarts. Determines max number of CNAME chain. */ #define MAX_RESTART_COUNT 11 /** max number of referrals. Makes sure resolver does not run away */ @@ -91,15 +94,17 @@ struct rbtree_type; extern int UNKNOWN_SERVER_NICENESS; /** maximum timeout before a host is deemed unsuitable, in msec. * After host_ttl this will be timed out and the host will be tried again. - * Equals RTT_MAX_TIMEOUT - */ -#define USEFUL_SERVER_TOP_TIMEOUT 120000 + * Equals RTT_MAX_TIMEOUT, and thus when RTT_MAX_TIMEOUT is overwritten by + * config infra_cache_max_rtt, it will be overwritten as well. */ +extern int USEFUL_SERVER_TOP_TIMEOUT; +/** penalty to validation failed blacklisted IPs + * Equals USEFUL_SERVER_TOP_TIMEOUT*4, and thus when RTT_MAX_TIMEOUT is + * overwritten by config infra_cache_max_rtt, it will be overwritten as well. */ +extern int BLACKLIST_PENALTY; /** RTT band, within this amount from the best, servers are chosen randomly. * Chosen so that the UNKNOWN_SERVER_NICENESS falls within the band of a * fast server, this causes server exploration as a side benefit. msec. */ #define RTT_BAND 400 -/** Start value for blacklisting a host, 2*USEFUL_SERVER_TOP_TIMEOUT in sec */ -#define INFRA_BACKOFF_INITIAL 240 /** * Global state for the iterator. @@ -217,6 +222,21 @@ enum iter_state { FINISHED_STATE }; +/** + * Shared counters for queries. + */ +enum target_count_variables { + /** Reference count for the shared iter_qstate->target_count. */ + TARGET_COUNT_REF = 0, + /** Number of target queries spawned for the query and subqueries. */ + TARGET_COUNT_QUERIES, + /** Number of nxdomain responses encountered. */ + TARGET_COUNT_NX, + + /** This should stay last here, it is used for the allocation */ + TARGET_COUNT_MAX, +}; + /** * Per query state for the iterator module. */ @@ -310,15 +330,20 @@ struct iter_qstate { /** number of queries fired off */ int sent_count; - /** number of target queries spawned in [1], for this query and its - * subqueries, the malloced-array is shared, [0] refcount. - * in [2] the number of nxdomains is counted. */ + /** malloced-array shared with this query and its subqueries. It keeps + * track of the defined enum target_count_variables counters. */ int* target_count; /** number of target lookups per delegation point. Reset to 0 after * receiving referral answer. Not shared with subqueries. */ int dp_target_count; + /** Delegation point that triggered the NXNS fallback; shared with + * this query and its subqueries, count-referenced by the reference + * counter in target_count. + * This also marks the fallback activation. */ + uint8_t** nxns_dp; + /** if true, already tested for ratelimiting and passed the test */ int ratelimit_ok; diff --git a/libunbound/unbound.h b/libunbound/unbound.h index ee8558759..c779d183e 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -725,6 +725,8 @@ struct ub_server_stats { long long qtcp; /** number of outgoing queries over TCP */ long long qtcp_outgoing; + /** number of outgoing queries over UDP */ + long long qudp_outgoing; /** number of queries over (DNS over) TLS */ long long qtls; /** number of queries over (DNS over) HTTPS */ diff --git a/makedist.sh b/makedist.sh index 4234a0672..7fb69630e 100755 --- a/makedist.sh +++ b/makedist.sh @@ -268,10 +268,12 @@ if [ "$DOWIN" = "yes" ]; then # before 1.0.1i need --cross-compile-prefix=i686-w64-mingw32- if test "$mw64" = "mingw64"; then sslflags="no-asm -DOPENSSL_NO_CAPIENG mingw64" + sspdll="/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libssp-0.dll" else sslflags="no-asm -DOPENSSL_NO_CAPIENG mingw" + sspdll="/usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll" fi - if test -f /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libssp-0.dll; then + if test -f "$sspdll"; then # stack protector lib needs to link in to make # -lws2_32 work in openssl link stage SSPLIB="-l:libssp.a" @@ -439,8 +441,8 @@ if [ "$DOWIN" = "yes" ]; then cp ../../sslsharedinstall/lib64/libssl.dll.a libunbound/. fi cp ../../unbound_shared/unbound.h ../../unbound_shared/.libs/libunbound*.dll ../../unbound_shared/.libs/libunbound.dll.a ../../unbound_shared/.libs/libunbound.a ../../unbound_shared/.libs/libunbound*.def ../../sslsharedinstall/bin/libcrypto*.dll ../../sslsharedinstall/bin/libssl*.dll ../../wxpinstall/bin/libexpat*.dll ../../wxpinstall/lib/libexpat.dll.a libunbound/. - if test -f /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libssp-0.dll; then - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libssp-0.dll libunbound/. + if test -f "$sspdll"; then + cp "$sspdll" libunbound/. fi # zipfile zip -r ../$file LICENSE README.txt unbound.exe unbound-anchor.exe unbound-host.exe unbound-control.exe unbound-checkconf.exe unbound-service-install.exe unbound-service-remove.exe unbound-control-setup.cmd example.conf service.conf root.key unbound-website.url create_unbound_ad_servers.cmd warmup.cmd unbound_cache.cmd Changelog libunbound diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 2fac5f884..0d95613f8 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -1375,7 +1375,8 @@ int set_return_msg(struct module_qstate* qstate, /* Functions which we will need to lookup delegations */ struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, - struct regional* region, struct dns_msg** msg, uint32_t timenow); + struct regional* region, struct dns_msg** msg, uint32_t timenow, + int noexpiredabove, uint8_t* expiretop, size_t expiretoplen); int iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags, struct delegpt* dp, int supports_ipv4, int supports_ipv6); struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints, @@ -1404,7 +1405,7 @@ struct delegpt* find_delegation(struct module_qstate* qstate, char *nm, size_t n qinfo.qclass = LDNS_RR_CLASS_IN; while(1) { - dp = dns_cache_find_delegation(qstate->env, (uint8_t*)nm, nmlen, qinfo.qtype, qinfo.qclass, region, &msg, timenow); + dp = dns_cache_find_delegation(qstate->env, (uint8_t*)nm, nmlen, qinfo.qtype, qinfo.qclass, region, &msg, timenow, 0, NULL, 0); if(!dp) return NULL; if(iter_dp_is_useless(&qinfo, BIT_RD, dp, diff --git a/pythonmod/pythonmod_utils.c b/pythonmod/pythonmod_utils.c index 34a20ba76..1f6f25129 100644 --- a/pythonmod/pythonmod_utils.c +++ b/pythonmod/pythonmod_utils.c @@ -72,7 +72,8 @@ int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, } return dns_cache_store(qstate->env, qinfo, msgrep, is_referral, - qstate->prefetch_leeway, 0, NULL, qstate->query_flags); + qstate->prefetch_leeway, 0, NULL, qstate->query_flags, + qstate->qstarttime); } /* Invalidate the message associated with query_info stored in message cache */ diff --git a/services/authzone.c b/services/authzone.c index 02fb621a2..b9e0b11ef 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -3967,7 +3967,7 @@ probe_copy_masters_for_allow_notify(struct auth_xfer* xfr) struct auth_master* list = NULL, *last = NULL; struct auth_master* p; /* build up new list with copies */ - for(p = xfr->task_probe->masters; p; p=p->next) { + for(p = xfr->task_transfer->masters; p; p=p->next) { struct auth_master* m = auth_master_copy(p); if(!m) { auth_free_masters(list); @@ -5512,6 +5512,8 @@ xfr_transfer_init_fetch(struct auth_xfer* xfr, struct module_env* env) addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "auth zone %s transfer next HTTP fetch from %s started", zname, as); } + /* Create or refresh the list of allow_notify addrs */ + probe_copy_masters_for_allow_notify(xfr); return 1; } @@ -8187,7 +8189,6 @@ auth_zone_verify_zonemd_key_with_ds(struct auth_zone* z, keystorage->rk.type = htons(LDNS_RR_TYPE_DNSKEY); keystorage->rk.rrset_class = htons(z->dclass); auth_zone_log(z->name, VERB_QUERY, "zonemd: verify zone DNSKEY with DS"); - // @TODO add EDE here? we currently just pass NULL sec = val_verify_DNSKEY_with_DS(env, ve, keystorage, ds, sigalg, why_bogus, NULL, NULL); regional_free_all(env->scratch); diff --git a/services/cache/dns.c b/services/cache/dns.c index f6c11451c..6bca8d85f 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -68,11 +68,16 @@ * in a prefetch situation to be updated (without becoming sticky). * @param qrep: update rrsets here if cache is better * @param region: for qrep allocs. + * @param qstarttime: time when delegations were looked up, this is perhaps + * earlier than the time in now. The time is used to determine if RRsets + * of type NS have expired, so that they can only be updated using + * lookups of delegation points that did not use them, since they had + * expired then. */ static void store_rrsets(struct module_env* env, struct reply_info* rep, time_t now, time_t leeway, int pside, struct reply_info* qrep, - struct regional* region) + struct regional* region, time_t qstarttime) { size_t i; /* see if rrset already exists in cache, if not insert it. */ @@ -81,8 +86,8 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now, rep->ref[i].id = rep->rrsets[i]->id; /* update ref if it was in the cache */ switch(rrset_cache_update(env->rrset_cache, &rep->ref[i], - env->alloc, now + ((ntohs(rep->ref[i].key->rk.type)== - LDNS_RR_TYPE_NS && !pside)?0:leeway))) { + env->alloc, ((ntohs(rep->ref[i].key->rk.type)== + LDNS_RR_TYPE_NS && !pside)?qstarttime:now + leeway))) { case 0: /* ref unchanged, item inserted */ break; case 2: /* ref updated, cache is superior */ @@ -155,7 +160,8 @@ msg_del_servfail(struct module_env* env, struct query_info* qinfo, void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside, - struct reply_info* qrep, uint32_t flags, struct regional* region) + struct reply_info* qrep, uint32_t flags, struct regional* region, + time_t qstarttime) { struct msgreply_entry* e; time_t ttl = rep->ttl; @@ -170,7 +176,8 @@ dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, /* there was a reply_info_sortref(rep) here but it seems to be * unnecessary, because the cache gets locked per rrset. */ reply_info_set_ttls(rep, *env->now); - store_rrsets(env, rep, *env->now, leeway, pside, qrep, region); + store_rrsets(env, rep, *env->now, leeway, pside, qrep, region, + qstarttime); if(ttl == 0 && !(flags & DNSCACHE_STORE_ZEROTTL)) { /* we do not store the message, but we did store the RRs, * which could be useful for delegation information */ @@ -194,10 +201,51 @@ dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, slabhash_insert(env->msg_cache, hash, &e->entry, rep, env->alloc); } +/** see if an rrset is expired above the qname, return upper qname. */ +static int +rrset_expired_above(struct module_env* env, uint8_t** qname, size_t* qnamelen, + uint16_t searchtype, uint16_t qclass, time_t now, uint8_t* expiretop, + size_t expiretoplen) +{ + struct ub_packed_rrset_key *rrset; + uint8_t lablen; + + while(*qnamelen > 0) { + /* look one label higher */ + lablen = **qname; + *qname += lablen + 1; + *qnamelen -= lablen + 1; + if(*qnamelen <= 0) + break; + + /* looks up with a time of 0, to see expired entries */ + if((rrset = rrset_cache_lookup(env->rrset_cache, *qname, + *qnamelen, searchtype, qclass, 0, 0, 0))) { + struct packed_rrset_data* data = + (struct packed_rrset_data*)rrset->entry.data; + if(now > data->ttl) { + /* it is expired, this is not wanted */ + lock_rw_unlock(&rrset->entry.lock); + log_nametypeclass(VERB_ALGO, "this rrset is expired", *qname, searchtype, qclass); + return 1; + } + /* it is not expired, continue looking */ + lock_rw_unlock(&rrset->entry.lock); + } + + /* do not look above the expiretop. */ + if(expiretop && *qnamelen == expiretoplen && + query_dname_compare(*qname, expiretop)==0) + break; + } + return 0; +} + /** find closest NS or DNAME and returns the rrset (locked) */ static struct ub_packed_rrset_key* find_closest_of_type(struct module_env* env, uint8_t* qname, size_t qnamelen, - uint16_t qclass, time_t now, uint16_t searchtype, int stripfront) + uint16_t qclass, time_t now, uint16_t searchtype, int stripfront, + int noexpiredabove, uint8_t* expiretop, size_t expiretoplen) { struct ub_packed_rrset_key *rrset; uint8_t lablen; @@ -212,8 +260,40 @@ find_closest_of_type(struct module_env* env, uint8_t* qname, size_t qnamelen, /* snip off front part of qname until the type is found */ while(qnamelen > 0) { if((rrset = rrset_cache_lookup(env->rrset_cache, qname, - qnamelen, searchtype, qclass, 0, now, 0))) - return rrset; + qnamelen, searchtype, qclass, 0, now, 0))) { + uint8_t* origqname = qname; + size_t origqnamelen = qnamelen; + if(!noexpiredabove) + return rrset; + /* if expiretop set, do not look above it, but + * qname is equal, so the just found result is also + * the nonexpired above part. */ + if(expiretop && qnamelen == expiretoplen && + query_dname_compare(qname, expiretop)==0) + return rrset; + /* check for expiry, but we have to let go of the rrset + * for the lock ordering */ + lock_rw_unlock(&rrset->entry.lock); + /* the expired_above function always takes off one + * label (if qnamelen>0) and returns the final qname + * where it searched, so we can continue from there + * turning the O N*N search into O N. */ + if(!rrset_expired_above(env, &qname, &qnamelen, + searchtype, qclass, now, expiretop, + expiretoplen)) { + /* we want to return rrset, but it may be + * gone from cache, if so, just loop like + * it was not in the cache in the first place. + */ + if((rrset = rrset_cache_lookup(env-> + rrset_cache, origqname, origqnamelen, + searchtype, qclass, 0, now, 0))) { + return rrset; + } + } + log_nametypeclass(VERB_ALGO, "ignoring rrset because expired rrsets exist above it", origqname, searchtype, qclass); + continue; + } /* snip off front label */ lablen = *qname; @@ -462,7 +542,8 @@ dns_msg_ansadd(struct dns_msg* msg, struct regional* region, struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, - struct regional* region, struct dns_msg** msg, time_t now) + struct regional* region, struct dns_msg** msg, time_t now, + int noexpiredabove, uint8_t* expiretop, size_t expiretoplen) { /* try to find closest NS rrset */ struct ub_packed_rrset_key* nskey; @@ -470,7 +551,7 @@ dns_cache_find_delegation(struct module_env* env, uint8_t* qname, struct delegpt* dp; nskey = find_closest_of_type(env, qname, qnamelen, qclass, now, - LDNS_RR_TYPE_NS, 0); + LDNS_RR_TYPE_NS, 0, noexpiredabove, expiretop, expiretoplen); if(!nskey) /* hope the caller has hints to prime or something */ return NULL; nsdata = (struct packed_rrset_data*)nskey->entry.data; @@ -840,7 +921,7 @@ dns_cache_lookup(struct module_env* env, * consistent with the DNAME */ if(!no_partial && (rrset=find_closest_of_type(env, qname, qnamelen, qclass, now, - LDNS_RR_TYPE_DNAME, 1))) { + LDNS_RR_TYPE_DNAME, 1, 0, NULL, 0))) { /* synthesize a DNAME+CNAME message based on this */ enum sec_status sec_status = sec_status_unchecked; struct dns_msg* msg = synth_dname_msg(rrset, region, now, &k, @@ -973,7 +1054,7 @@ dns_cache_lookup(struct module_env* env, int dns_cache_store(struct module_env* env, struct query_info* msgqinf, struct reply_info* msgrep, int is_referral, time_t leeway, int pside, - struct regional* region, uint32_t flags) + struct regional* region, uint32_t flags, time_t qstarttime) { struct reply_info* rep = NULL; /* alloc, malloc properly (not in region, like msg is) */ @@ -996,9 +1077,9 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf, /*ignore ret: it was in the cache, ref updated */ /* no leeway for typeNS */ (void)rrset_cache_update(env->rrset_cache, &ref, - env->alloc, *env->now + + env->alloc, ((ntohs(ref.key->rk.type)==LDNS_RR_TYPE_NS - && !pside) ? 0:leeway)); + && !pside) ? qstarttime:*env->now + leeway)); } free(rep); return 1; @@ -1020,7 +1101,7 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf, rep->flags &= ~(BIT_AA | BIT_CD); h = query_info_hash(&qinf, (uint16_t)flags); dns_cache_store_msg(env, &qinf, h, rep, leeway, pside, msgrep, - flags, region); + flags, region, qstarttime); /* qname is used inside query_info_entrysetup, and set to * NULL. If it has not been used, free it. free(0) is safe. */ free(qinf.qname); diff --git a/services/cache/dns.h b/services/cache/dns.h index bece83702..147f992cb 100644 --- a/services/cache/dns.h +++ b/services/cache/dns.h @@ -88,11 +88,13 @@ struct dns_msg { * @param flags: flags with BIT_CD for AAAA queries in dns64 translation. * The higher 16 bits are used internally to customize the cache policy. * (See DNSCACHE_STORE_xxx flags). + * @param qstarttime: time when the query was started, and thus when the + * delegations were looked up. * @return 0 on alloc error (out of memory). */ int dns_cache_store(struct module_env* env, struct query_info* qinf, struct reply_info* rep, int is_referral, time_t leeway, int pside, - struct regional* region, uint32_t flags); + struct regional* region, uint32_t flags, time_t qstarttime); /** * Store message in the cache. Stores in message cache and rrset cache. @@ -112,11 +114,14 @@ int dns_cache_store(struct module_env* env, struct query_info* qinf, * can be updated to full TTL even in prefetch situations. * @param qrep: message that can be altered with better rrs from cache. * @param flags: customization flags for the cache policy. + * @param qstarttime: time when the query was started, and thus when the + * delegations were looked up. * @param region: to allocate into for qmsg. */ void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside, - struct reply_info* qrep, uint32_t flags, struct regional* region); + struct reply_info* qrep, uint32_t flags, struct regional* region, + time_t qstarttime); /** * Find a delegation from the cache. @@ -129,11 +134,18 @@ void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, * @param msg: if not NULL, delegation message is returned here, synthesized * from the cache. * @param timenow: the time now, for checking if TTL on cache entries is OK. + * @param noexpiredabove: if set, no expired NS rrsets above the one found + * are tolerated. It only returns delegations where the delegations above + * it are valid. + * @param expiretop: if not NULL, name where check for expiry ends for + * noexpiredabove. + * @param expiretoplen: length of expiretop dname. * @return new delegation or NULL on error or if not found in cache. */ struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, - struct regional* region, struct dns_msg** msg, time_t timenow); + struct regional* region, struct dns_msg** msg, time_t timenow, + int noexpiredabove, uint8_t* expiretop, size_t expiretoplen); /** * generate dns_msg from cached message diff --git a/services/cache/infra.c b/services/cache/infra.c index e1160301c..38724ae79 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -861,13 +861,13 @@ infra_get_lame_rtt(struct infra_cache* infra, else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; } } + /* expired entry */ if(timenow > host->ttl) { - /* expired entry */ + /* see if this can be a re-probe of an unresponsive server */ /* minus 1000 because that is outside of the RTTBAND, so * blacklisted servers stay blacklisted if this is chosen */ - if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT || - infra->infra_keep_probing) { + if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) { lock_rw_unlock(&e->lock); *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; *lame = 0; @@ -1180,7 +1180,7 @@ int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, max = infra_rate_max(entry->data, timenow, backoff); lock_rw_unlock(&entry->lock); - return (max >= lim); + return (max > lim); } size_t @@ -1213,7 +1213,7 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, max = infra_rate_max(entry->data, timenow, backoff); lock_rw_unlock(&entry->lock); - if(premax < infra_ip_ratelimit && max >= infra_ip_ratelimit) { + if(premax <= infra_ip_ratelimit && max > infra_ip_ratelimit) { char client_ip[128], qnm[LDNS_MAX_DOMAINLEN+1+12+12]; addr_to_str((struct sockaddr_storage *)&repinfo->addr, repinfo->addrlen, client_ip, sizeof(client_ip)); diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 03153bd64..467419b09 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -490,6 +490,7 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, return -1; } # elif defined(IPV6_MTU) +# ifndef USE_WINSOCK /* * On Linux, to send no larger than 1280, the PMTUD is * disabled by default for datagrams anyway, so we set @@ -497,13 +498,29 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, */ if (setsockopt(s, IPPROTO_IPV6, IPV6_MTU, (void*)&mtu, (socklen_t)sizeof(mtu)) < 0) { - log_err("setsockopt(..., IPV6_MTU, ...) failed: %s", + log_err("setsockopt(..., IPV6_MTU, ...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } +# elif defined(IPV6_USER_MTU) + /* As later versions of the mingw crosscompiler define + * IPV6_MTU, do the same for windows but use IPV6_USER_MTU + * instead which is writable; IPV6_MTU is readonly there. */ + if (setsockopt(s, IPPROTO_IPV6, IPV6_USER_MTU, + (void*)&mtu, (socklen_t)sizeof(mtu)) < 0) { + if (WSAGetLastError() != WSAENOPROTOOPT) { + log_err("setsockopt(..., IPV6_USER_MTU, ...) failed: %s", + wsa_strerror(WSAGetLastError())); + sock_close(s); + *noproto = 0; + *inuse = 0; + return -1; + } + } +# endif /* USE_WINSOCK */ # endif /* IPv6 MTU */ # if defined(IPV6_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT) # if defined(IP_PMTUDISC_OMIT) diff --git a/services/mesh.c b/services/mesh.c index fbaa966bd..30bcf7cda 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -811,7 +811,8 @@ static void mesh_schedule_prefetch_subnet(struct mesh_area* mesh, log_err("prefetch_subnet subnet_option_from_ss: invalid data"); return; } - subnet_ecs_opt_list_append(&ecs, &s->s.edns_opts_front_in, &s->s); + subnet_ecs_opt_list_append(&ecs, &s->s.edns_opts_front_in, + &s->s, s->s.region); if(!s->s.edns_opts_front_in) { log_err("prefetch_subnet subnet_ecs_opt_list_append: out of memory"); return; @@ -953,6 +954,7 @@ mesh_state_create(struct module_env* env, struct query_info* qinfo, mstate->s.no_cache_store = 0; mstate->s.need_refetch = 0; mstate->s.was_ratelimited = 0; + mstate->s.qstarttime = *env->now; /* init modules */ for(i=0; imesh->mods.num; i++) { diff --git a/services/outside_network.c b/services/outside_network.c index 8108db6be..1e53bff47 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -271,7 +271,7 @@ outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int s; int af; char* err; -#ifdef SO_REUSEADDR +#if defined(SO_REUSEADDR) || defined(IP_BIND_ADDRESS_NO_PORT) int on = 1; #endif #ifdef INET6 @@ -317,7 +317,13 @@ outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, " setsockopt(TCP_MAXSEG) unsupported"); #endif /* defined(IPPROTO_TCP) && defined(TCP_MAXSEG) */ } - +#ifdef IP_BIND_ADDRESS_NO_PORT + if(setsockopt(s, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, (void*)&on, + (socklen_t)sizeof(on)) < 0) { + verbose(VERB_ALGO, "outgoing tcp:" + " setsockopt(.. IP_BIND_ADDRESS_NO_PORT ..) failed"); + } +#endif /* IP_BIND_ADDRESS_NO_PORT */ return s; } @@ -1610,6 +1616,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, outnet->tcp_reuse_timeout= tcp_reuse_timeout; outnet->tcp_auth_query_timeout = tcp_auth_query_timeout; outnet->num_tcp_outgoing = 0; + outnet->num_udp_outgoing = 0; outnet->infra = infra; outnet->rnd = rnd; outnet->sslctx = sslctx; @@ -2144,6 +2151,7 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) portcomm_loweruse(outnet, pend->pc); return 0; } + outnet->num_udp_outgoing++; /* system calls to set timeout after sending UDP to make roundtrip smaller. */ @@ -2539,8 +2547,10 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, #ifdef UNBOUND_DEBUG rbnode_type* ins; #endif - if(!sq) + if(!sq) { + alloc_reg_release(alloc, region); return NULL; + } sq->node.key = sq; sq->alloc = alloc; sq->region = region; @@ -3442,7 +3452,6 @@ outnet_serviced_query(struct outside_network* outnet, infra_ratelimit_dec(env->infra_cache, zone, zonelen, timenow); } - alloc_reg_release(env->alloc, region); return NULL; } if(!(cb = (struct service_callback*)regional_alloc( diff --git a/services/outside_network.h b/services/outside_network.h index 4c5b96f83..c383b8f09 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -113,6 +113,8 @@ struct outside_network { /** if we perform udp-connect, connect() for UDP socket to mitigate * ICMP side channel leakage */ int udp_connect; + /** number of udp packets sent. */ + size_t num_udp_outgoing; /** array of outgoing IP4 interfaces */ struct port_if* ip4_ifs; diff --git a/sldns/parse.c b/sldns/parse.c index 491c8f51b..8ea084661 100644 --- a/sldns/parse.c +++ b/sldns/parse.c @@ -34,7 +34,7 @@ sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *l { int c, prev_c; int p; /* 0 -> no parentheses seen, >0 nr of ( seen */ - int com, quoted; + int com, quoted, only_blank; char *t; size_t i; const char *d; @@ -53,6 +53,7 @@ sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *l com = 0; quoted = 0; prev_c = 0; + only_blank = 1; /* Assume we got only until now */ t = token; if (del[0] == '"') { quoted = 1; @@ -101,6 +102,22 @@ sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *l if (line_nr) { *line_nr = *line_nr + 1; } + if (only_blank && i > 0) { + /* Got only so far. Reset and try + * again with the next line. + */ + i = 0; + t = token; + } + if (p == 0) { + /* If p != 0 then the next line is a continuation. So + * we assume that the next line starts with a blank only + * if it is actually a new line. + */ + only_blank = 1; /* Assume next line starts with + * . + */ + } if (p == 0 && i > 0) { goto tokenread; } else { @@ -131,12 +148,29 @@ sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *l /* check if we hit the delim */ for (d = del; *d; d++) { - if (c == *d && i > 0 && prev_c != '\\' && p == 0) { - if (c == '\n' && line_nr) { - *line_nr = *line_nr + 1; - } - goto tokenread; + if (c == *d) + break; + } + + if (c == *d && i > 0 && prev_c != '\\' && p == 0) { + if (c == '\n' && line_nr) { + *line_nr = *line_nr + 1; } + if (only_blank) { + /* Got only so far. Reset and + * try again with the next line. + */ + i = 0; + t = token; + only_blank = 1; + prev_c = c; + continue; + } + goto tokenread; + } + if (c != ' ' && c != '\t') { + /* Found something that is not */ + only_blank= 0; } if (c != '\0' && c != '\n') { i++; @@ -149,8 +183,13 @@ sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *l if (c != '\0' && c != '\n') { *t++ = c; } - if (c == '\n' && line_nr) { - *line_nr = *line_nr + 1; + if (c == '\n') { + if (line_nr) { + *line_nr = *line_nr + 1; + } + only_blank = 1; /* Assume next line starts with + * . + */ } if (c == '\\' && prev_c == '\\') prev_c = 0; diff --git a/sldns/rrdef.c b/sldns/rrdef.c index fe5c8e104..322eff096 100644 --- a/sldns/rrdef.c +++ b/sldns/rrdef.c @@ -381,9 +381,9 @@ static sldns_rr_descriptor rdata_field_descriptors[] = { /* 63 */ {LDNS_RR_TYPE_ZONEMD, "ZONEMD", 4, 4, type_zonemd_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, /* 64 */ - {LDNS_RR_TYPE_SVCB, "SVCB", 2, 2, type_svcb_wireformat, LDNS_RDF_TYPE_SVCPARAM, LDNS_RR_NO_COMPRESS, 0 }, + {LDNS_RR_TYPE_SVCB, "SVCB", 2, 2, type_svcb_wireformat, LDNS_RDF_TYPE_SVCPARAM, LDNS_RR_NO_COMPRESS, 1 }, /* 65 */ - {LDNS_RR_TYPE_HTTPS, "HTTPS", 2, 2, type_svcb_wireformat, LDNS_RDF_TYPE_SVCPARAM, LDNS_RR_NO_COMPRESS, 0 }, + {LDNS_RR_TYPE_HTTPS, "HTTPS", 2, 2, type_svcb_wireformat, LDNS_RDF_TYPE_SVCPARAM, LDNS_RR_NO_COMPRESS, 1 }, {(enum sldns_enum_rr_type)0, "TYPE66", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE67", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE68", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, diff --git a/sldns/wire2str.c b/sldns/wire2str.c index 498ef716d..a2b20b6c6 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -1072,7 +1072,7 @@ static int sldns_wire2str_svcparam_mandatory2str(char** s, assert(data_len > 0); if (data_len % sizeof(uint16_t)) - return -1; // wireformat error, data_len must be multiple of shorts + return -1; /* wireformat error, data_len must be multiple of shorts */ w += sldns_str_print(s, slen, "="); w += sldns_print_svcparamkey(s, slen, sldns_read_uint16(data)); data += 2; diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 89543e45d..d473702c4 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -354,6 +354,7 @@ static void print_extended(struct ub_stats_info* s) /* transport */ PR_UL("num.query.tcp", s->svr.qtcp); PR_UL("num.query.tcpout", s->svr.qtcp_outgoing); + PR_UL("num.query.udpout", s->svr.qudp_outgoing); PR_UL("num.query.tls", s->svr.qtls); PR_UL("num.query.tls_resume", s->svr.qtls_resume); PR_UL("num.query.ipv6", s->svr.qipv6); @@ -486,6 +487,7 @@ static void print_stats_shm(const char* cfgfile, int quiet) config_delete(cfg); #else (void)cfgfile; + (void)quiet; #endif /* HAVE_SHMGET */ } diff --git a/testcode/dohclient.c b/testcode/dohclient.c index d35f5a82c..82e522f90 100644 --- a/testcode/dohclient.c +++ b/testcode/dohclient.c @@ -551,7 +551,7 @@ run(struct http2_session* h2_session, int port, int no_tls, int count, char** q) if(ctx) { SSL_CTX_free(ctx); } - close(fd); + sock_close(fd); } /** getopt global, in case header files fail to declare it. */ diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh index 0457a95e7..6bbece8d9 100755 --- a/testcode/mini_tdir.sh +++ b/testcode/mini_tdir.sh @@ -5,6 +5,10 @@ if test "$1" = "-a"; then shift shift fi + +# This will keep the temporary directory around and return 1 when the test failed. +DEBUG=0 + quiet=0 if test "$1" = "-q"; then quiet=1 @@ -184,11 +188,18 @@ echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result mv $result .. cd .. -rm -rf $dir -# compat for windows where deletion may not succeed initially (files locked -# by processes that still have to exit). -if test $? -eq 1; then - echo "minitdir waiting for processes to terminate" - sleep 2 # some time to exit, and try again +if test $DEBUG -eq 0; then rm -rf $dir + # compat for windows where deletion may not succeed initially (files locked + # by processes that still have to exit). + if test $? -eq 1; then + echo "minitdir waiting for processes to terminate" + sleep 2 # some time to exit, and try again + rm -rf $dir + fi +else + if test $success == "no"; then + exit 1 + fi + exit 0 fi diff --git a/testcode/unitecs.c b/testcode/unitecs.c index b240bfcc6..68d6907f8 100644 --- a/testcode/unitecs.c +++ b/testcode/unitecs.c @@ -173,7 +173,7 @@ static void consistency_test(void) for (i = 0; i < 1000; i++) { l = randomkey(&k, 128); elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); - addrtree_insert(t, k, l, 64, elem, timenow + 10, timenow); + addrtree_insert(t, k, l, 64, elem, timenow + 10, timenow, 0); /* This should always hold because no items ever expire. They * could be overwritten, though. */ unit_assert( count <= t->node_count ); @@ -189,7 +189,7 @@ static void consistency_test(void) for (i = 0; i < 1000; i++) { l = randomkey(&k, 128); elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); - addrtree_insert(t, k, l, 64, elem, i + 10, i); + addrtree_insert(t, k, l, 64, elem, i + 10, i, 0); free(k); unit_assert( !addrtree_inconsistent(t) ); } @@ -201,7 +201,7 @@ static void consistency_test(void) for (i = 0; i < 1000; i++) { l = randomkey(&k, 128); elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); - addrtree_insert(t, k, l, 64, elem, i + 10, i); + addrtree_insert(t, k, l, 64, elem, i + 10, i, 0); unit_assert( t->node_count <= 27); free(k); unit_assert( !addrtree_inconsistent(t) ); diff --git a/testcode/unitmain.c b/testcode/unitmain.c index b4c7d7fd1..d995de4fd 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -920,7 +920,7 @@ main(int argc, char* argv[]) checklock_stop(); printf("%d checks ok.\n", testcount); #ifdef HAVE_SSL -# if defined(USE_GOST) && defined(HAVE_LDNS_KEY_EVP_UNLOAD_GOST) +# if defined(USE_GOST) sldns_key_EVP_unload_gost(); # endif # ifdef HAVE_OPENSSL_CONFIG diff --git a/testdata/auth_https.tdir/auth_https.test b/testdata/auth_https.tdir/auth_https.test index cff93544b..c2471b7d6 100644 --- a/testdata/auth_https.tdir/auth_https.test +++ b/testdata/auth_https.tdir/auth_https.test @@ -5,6 +5,7 @@ [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." +. ../common.sh # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile @@ -48,4 +49,15 @@ else exit 1 fi +# Test that notify is allowed from the webserver address +get_ldns_notify +echo "> ldns-notify -z example.com" +$LDNS_NOTIFY -p $UNBOUND_PORT -z example.com 127.0.0.1 | tee outfile +if grep "rcode: REFUSED" outfile; then + echo "Not OK" + exit 1 +else + echo "OK" +fi + exit 0 diff --git a/testdata/blanks_cached_zone.tdir/blanks.example.com.zone b/testdata/blanks_cached_zone.tdir/blanks.example.com.zone new file mode 100644 index 000000000..f5eba1fbb --- /dev/null +++ b/testdata/blanks_cached_zone.tdir/blanks.example.com.zone @@ -0,0 +1,23 @@ +; Test if the zone parser accepts various blank lines +@ IN SOA ns1.example.com dnsmaster.example.com. ( + 1 ; Serial + 7200 ; Refresh 2 hours + 3600 ; Retry 1 hour + 2419200 ; expire - 4 weeks + 3600 ; Minimum 1 hour +) + 7200 IN NS ns1 +ns1 IN A 192.0.2.1 + IN AAAA 2001:dbb::1 +; completely blank line + +; line with one space + +; line with one tab + +; line with spaces followed by comment + ; test comment +; line with tabs followed by comment + ; test comment +; Final line with spaces, tabs and comment + ; test comment diff --git a/testdata/blanks_cached_zone.tdir/blanks_cached_zone.conf b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.conf new file mode 100644 index 000000000..b0eb4aa9a --- /dev/null +++ b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.conf @@ -0,0 +1,20 @@ +server: + verbosity: 7 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes + module-config: "respip validator iterator" + +auth-zone: + name: blanks.example.com + zonefile: "blanks.example.com.zone" + url: "https://127.0.0.1:@TOPORT@/blanks.example.com.zone" + for-upstream: yes + for-downstream: yes diff --git a/testdata/blanks_cached_zone.tdir/blanks_cached_zone.dsc b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.dsc new file mode 100644 index 000000000..1686aa4f3 --- /dev/null +++ b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.dsc @@ -0,0 +1,16 @@ +BaseName: blanks_cached_zone +Version: 1.0 +Description: Check if a cached zone with blank line can be loaded +CreationDate: Wed 08 Jun 2022 11:16:25 AM CEST +Maintainer: Philip Homburg +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: blanks_cached_zone.pre +Post: blanks_cached_zone.post +Test: blanks_cached_zone.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/blanks_cached_zone.tdir/blanks_cached_zone.post b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.post new file mode 100644 index 000000000..c79a88747 --- /dev/null +++ b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.post @@ -0,0 +1,10 @@ +# #-- blanks_cached_zone.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +PRE="../.." +. ../common.sh +kill_pid $UNBOUND_PID diff --git a/testdata/blanks_cached_zone.tdir/blanks_cached_zone.pre b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.pre new file mode 100644 index 000000000..f347a66cc --- /dev/null +++ b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.pre @@ -0,0 +1,23 @@ +# #-- blanks_cached_zone.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +UNUSED_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UNUSED_PORT'/' < blanks_cached_zone.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_unbound_up unbound.log + diff --git a/testdata/blanks_cached_zone.tdir/blanks_cached_zone.test b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.test new file mode 100644 index 000000000..c405950c3 --- /dev/null +++ b/testdata/blanks_cached_zone.tdir/blanks_cached_zone.test @@ -0,0 +1,51 @@ +# #-- blanks_cached_zone.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +TARGET=ns1.blanks.example.com. +echo "> dig $TARGET" +dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +if grep SERVFAIL outfile; then + echo "> try again" + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +echo "> cat logfiles" +cat unbound.log +echo "> check answer" +if grep "192.0.2.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/blanks_https.tdir/127.0.0.1/blanks.example.com.zone b/testdata/blanks_https.tdir/127.0.0.1/blanks.example.com.zone new file mode 100644 index 000000000..f5eba1fbb --- /dev/null +++ b/testdata/blanks_https.tdir/127.0.0.1/blanks.example.com.zone @@ -0,0 +1,23 @@ +; Test if the zone parser accepts various blank lines +@ IN SOA ns1.example.com dnsmaster.example.com. ( + 1 ; Serial + 7200 ; Refresh 2 hours + 3600 ; Retry 1 hour + 2419200 ; expire - 4 weeks + 3600 ; Minimum 1 hour +) + 7200 IN NS ns1 +ns1 IN A 192.0.2.1 + IN AAAA 2001:dbb::1 +; completely blank line + +; line with one space + +; line with one tab + +; line with spaces followed by comment + ; test comment +; line with tabs followed by comment + ; test comment +; Final line with spaces, tabs and comment + ; test comment diff --git a/testdata/blanks_https.tdir/blanks_https.conf b/testdata/blanks_https.tdir/blanks_https.conf new file mode 100644 index 000000000..836353356 --- /dev/null +++ b/testdata/blanks_https.tdir/blanks_https.conf @@ -0,0 +1,18 @@ +server: + verbosity: 7 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes +auth-zone: + name: "blanks.example.com" + for-upstream: yes + for-downstream: yes + url: "https://127.0.0.1:@TOPORT@/blanks.example.com.zone" + diff --git a/testdata/blanks_https.tdir/blanks_https.dsc b/testdata/blanks_https.tdir/blanks_https.dsc new file mode 100644 index 000000000..eb3d4d6d8 --- /dev/null +++ b/testdata/blanks_https.tdir/blanks_https.dsc @@ -0,0 +1,16 @@ +BaseName: blanks_https +Version: 1.0 +Description: Fetch a zone with blank lines over https +CreationDate: Tue 14 Jun 2022 04:43:21 PM CEST +Maintainer: Philip Homburg +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: blanks_https.pre +Post: blanks_https.post +Test: blanks_https.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/blanks_https.tdir/blanks_https.post b/testdata/blanks_https.tdir/blanks_https.post new file mode 100644 index 000000000..631150c02 --- /dev/null +++ b/testdata/blanks_https.tdir/blanks_https.post @@ -0,0 +1,11 @@ +# #-- blanks_https.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +PRE="../.." +. ../common.sh +kill_pid $UNBOUND_PID +kill_pid $PETAL_PID diff --git a/testdata/blanks_https.tdir/blanks_https.pre b/testdata/blanks_https.tdir/blanks_https.pre new file mode 100644 index 000000000..956ac0520 --- /dev/null +++ b/testdata/blanks_https.tdir/blanks_https.pre @@ -0,0 +1,34 @@ +# #-- blanks_https.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +PETAL_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "PETAL_PORT=$PETAL_PORT" >> .tpkg.var.test + +get_make +(cd $PRE; $MAKE petal) + +# start https daemon +$PRE/petal -v -a "127.0.0.1" -p $PETAL_PORT >petal.log 2>&1 & +PETAL_PID=$! +echo "PETAL_PID=$PETAL_PID" >> .tpkg.var.test +cat .tpkg.var.test +wait_petal_up petal.log + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$PETAL_PORT'/' < blanks_https.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_unbound_up unbound.log + diff --git a/testdata/blanks_https.tdir/blanks_https.test b/testdata/blanks_https.tdir/blanks_https.test new file mode 100644 index 000000000..2c4c5dc7a --- /dev/null +++ b/testdata/blanks_https.tdir/blanks_https.test @@ -0,0 +1,52 @@ +# #-- blanks_https.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +TARGET=ns1.blanks.example.com. +echo "> dig $TARGET" +dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +if grep SERVFAIL outfile; then + echo "> try again" + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT $TARGET | tee outfile +fi +echo "> cat logfiles" +cat petal.log +cat unbound.log +echo "> check answer" +if grep "192.0.2.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/blanks_https.tdir/petal.key b/testdata/blanks_https.tdir/petal.key new file mode 100644 index 000000000..6614e498f --- /dev/null +++ b/testdata/blanks_https.tdir/petal.key @@ -0,0 +1,21 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIDfQIBAAKBwQC1xQ/Kca6zszZbcCtdOTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJ +RuN+Rm304SonpwghfP2/ULZNnuDgpG03/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1 +QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ867K029ypjOQtAJ85qdO3mERy7TGtdUcu +O6hLeVet419YeQ2F8cfNxn63d7bOzNGLPW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeU +J/i4YDWexFYSL+ECAwEAAQKBwCLXXQl+9O+5AEhSnd1Go1Jh0pSA7eBJOuXQcebG +Rb7ykp+6C4G2NtDziwwPRNdI6wQQQ0sym18RfyVQHydGr78/nbiIbB3HCn5e92Mh +mefzW6ow9Kvm2txLzGKA1lvoyRbNm81jnG/eygi3u7Nqd5PNv+4dHj2RkTlmxOeh +qnDMVP5md8uZPv6lYNnrnIzvLCR5vnPNdVwn89AqzI85IcDZdy0R9ZX4NBbsDgAU +6ig6uXuRXvSGiyJ/OUXSrnogaQJhAOjvkHUhVZQkPOxO90TNH4j0GdKKtbSWxIdz +lKfuJeBAEqs0TL+C6vbS81Xw3W1alyDdUBk3rJMOBqW6Ryq5HNL+j5H+Jfsh7fvc +Yle+5wHGci0P9zCFZCrY8It7n9XFIwJhAMfEi6oJa2G8waPJ1bQhxka82Tf9pnKM +XCn/1BBOFjVIx5F842cpA+zp5a62GENTGYPQTTRBB/2/ZwnW5aIkrlg54AtmbqBZ +Oh+2kJdJQD/tfoVmc5soUE2ScTHadK5RKwJhAN4w9kjkXS+MSZjX0kIMsBIBVkhh +C+aREjJqa9ir7/Ey7RvmLXdYuCxtGLRXp7/R8+rjcK49Tx6O+IRJZe042mfhbq3C +EhS1Tr86f4xXix9EXlDhs9bSxrOgcAN9Dv/opQJhAK7eBcPaav0rVfYh/8emqQHS +3fJ9Pu6WnzbEksWTFS2ff9KDGCx9YspIFJ5TF/oXDAaumGZdZrlgirm6O1kr8tGY +F97i04PZl1+bWAaWQH+1TUNI43m2WFUPE7coG2tb8QJgcddDg9VlXliZqgcETZfJ +kJmYETxrcSn3ao6v116N8yxhEgUgjkmsCTiFgx36iDVnXwK6PIt+sIu8MC7eYNa3 +berrv/M21K0LRn20IWRxvUobG070weHCAgkko7fTWgr2 +-----END RSA PRIVATE KEY----- diff --git a/testdata/blanks_https.tdir/petal.pem b/testdata/blanks_https.tdir/petal.pem new file mode 100644 index 000000000..19c8b895b --- /dev/null +++ b/testdata/blanks_https.tdir/petal.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICFzCCAUACCQDO660L5y5LGDANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVw +ZXRhbDAeFw0xMDA5MzAxMzQzMDFaFw0zMDA2MTcxMzQzMDFaMBAxDjAMBgNVBAMT +BXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC1xQ/Kca6zszZbcCtd +OTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJRuN+Rm304SonpwghfP2/ULZNnuDgpG03 +/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ8 +67K029ypjOQtAJ85qdO3mERy7TGtdUcuO6hLeVet419YeQ2F8cfNxn63d7bOzNGL +PW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeUJ/i4YDWexFYSL+ECAwEAATANBgkqhkiG +9w0BAQUFAAOBwQBBkX9KDP2RXbg+xPmdJ4P6CwvA5x1LZwC++ydVx4NlvT0pWicD +ZUnXjcWAJlkeOuUBAqFG7WHTrXpUUAjmdqFVq2yFjteUYBdrFz0RDB2jM9feeKYO +mTgxdZyT9a6humxCxt5VfgT02axLjm/2AqCyFPMbf4PASoJDln01AEuZLZ8Xl2gV +bYHMnHTGoD1Hu6FNEzRgkMC6XT8X3YjHvzQhpc/qL5wEfEsinQGdX4twsuWbf8xd +q7miNnkO8vd0maw= +-----END CERTIFICATE----- diff --git a/testdata/common.sh b/testdata/common.sh index f6d72c2f0..280f5dac4 100644 --- a/testdata/common.sh +++ b/testdata/common.sh @@ -14,6 +14,7 @@ # info x : print info # test_tool_avail x : see if program in path and complain, exit if not. # get_ldns_testns : set LDNS_TESTNS to executable ldns-testns +# get_ldns_notify : set LDNS_NOTIFY to executable ldns-notify # get_make : set MAKE to gmake or make tool. # get_gcc : set cc or gcc in CC # get_pcat : set PCAT, PCAT_DIFF and PCAT_PRINT executables. @@ -62,6 +63,15 @@ get_ldns_testns () { fi } +# get ldns-notify tool in LDNS_NOTIFY variable. +get_ldns_notify () { + if test -x "`which ldns-notify 2>&1`"; then + LDNS_NOTIFY=ldns-notify + else + LDNS_NOTIFY=/home/wouter/bin/ldns-notify + fi +} + # get make tool in MAKE variable, gmake is used if present. get_make () { if test -x "`which gmake 2>&1`"; then diff --git a/testdata/iter_ghost_sub.rpl b/testdata/iter_ghost_sub.rpl new file mode 100644 index 000000000..ccd6b2984 --- /dev/null +++ b/testdata/iter_ghost_sub.rpl @@ -0,0 +1,309 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + minimal-responses: no + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test ghost subdomain of another subdomain. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. 86400 IN NS +SECTION ANSWER +. 86400 IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. 86400 IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. 86400 IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. 86400 IN A 192.5.6.30 +ENTRY_END + +RANGE_END + +; a.gtld-servers.net. +; this is the one where example.com is delegated. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. 86400 IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. 86400 IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +; this is the one where example.com is no longer delegated. +RANGE_BEGIN 100 200 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. 86400 IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. 86400 IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION ANSWER +ns.example.com. IN A 1.2.3.4 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.com. IN AAAA +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +s.example.com. IN A +SECTION ANSWER +s.example.com. IN A 1.2.3.4 +SECTION AUTHORITY +s.example.com. IN NS s.example.com. +SECTION ADDITIONAL +s.example.com IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +s.s.example.com. IN A +SECTION ANSWER +s.s.example.com. IN A 1.2.3.4 +SECTION AUTHORITY +s.s.example.com. IN NS s.s.example.com. +SECTION ADDITIONAL +s.s.example.com IN A 1.2.3.4 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; get the delegation in cache +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com IN A 1.2.3.4 +ENTRY_END + +; time passes +STEP 25 TIME_PASSES ELAPSE 1800 + +; get another delegation in cache +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +s.example.com. IN A +ENTRY_END + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +s.example.com. IN A +SECTION ANSWER +s.example.com. IN A 1.2.3.4 +SECTION AUTHORITY +s.example.com. IN NS s.example.com. +ENTRY_END + +; time passes, 1800 + 1000 = 2800 of 3600 TTL on NS of s.example.com. and +; example.com. +STEP 45 TIME_PASSES ELAPSE 1000 + +; get another delegation in cache +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +s.s.example.com. IN A +ENTRY_END + +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +s.s.example.com. IN A +SECTION ANSWER +s.s.example.com. IN A 1.2.3.4 +SECTION AUTHORITY +s.s.example.com. IN NS s.s.example.com. +ENTRY_END + + +; time passes, 1800 + 2000 = 3800 of 3600 TTL on NS of s.example.com. and +; example.com. +STEP 75 TIME_PASSES ELAPSE 1000 + +; domain no longer delegated +; is the domain still up? + +STEP 100 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.s.example.com. IN A +ENTRY_END + +STEP 110 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +www.s.example.com. IN A +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END + +STEP 120 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.s.s.example.com. IN A +ENTRY_END + +STEP 130 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +www.s.s.example.com. IN A +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END + +STEP 140 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +STEP 150 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +www.example.com. IN A +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END + +SCENARIO_END diff --git a/testdata/iter_ghost_timewindow.rpl b/testdata/iter_ghost_timewindow.rpl new file mode 100644 index 000000000..566be82a9 --- /dev/null +++ b/testdata/iter_ghost_timewindow.rpl @@ -0,0 +1,391 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + minimal-responses: no + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test ghost subdomain with extension reply in timewindow. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +. 86400 IN NS +SECTION ANSWER +. 86400 IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. 86400 IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. 86400 IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. 86400 IN A 192.5.6.30 +ENTRY_END + +RANGE_END + +; a.gtld-servers.net. +; this is the one where example.com is delegated. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. 86400 IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. 86400 IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example2.com. IN NS +SECTION AUTHORITY +example2.com. 3610 IN NS ns.example2.com. +SECTION ADDITIONAL +ns.example2.com. 3610 IN A 1.2.3.5 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +; this is the one where example.com is no longer delegated. +RANGE_BEGIN 100 300 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. 86400 IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. 86400 IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +example2.com. IN NS +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION ANSWER +ns.example.com. IN A 1.2.3.4 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN AAAA +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.example2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.5 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example2.com. IN NS +SECTION ANSWER +example2.com. 3610 IN NS ns.example2.com. +SECTION ADDITIONAL +ns.example2.com. 3610 IN A 1.2.3.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example2.com. IN A +SECTION ANSWER +ns.example2.com. 3610 IN A 1.2.3.5 +SECTION AUTHORITY +example2.com. 3610 IN NS ns.example2.com. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example2.com. IN AAAA +SECTION AUTHORITY +example2.com. 3610 IN NS ns.example2.com. +SECTION ADDITIONAL +ns.example2.com. 3610 IN A 1.2.3.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.example2.com. IN A +SECTION ANSWER +www.example2.com. 3610 IN A 10.20.30.40 +SECTION AUTHORITY +example2.com. 3610 IN NS ns.example2.com. +SECTION ADDITIONAL +ns.example2.com 3610 IN A 1.2.3.5 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; get the delegation in cache +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com IN A 1.2.3.4 +ENTRY_END + +; get example2 in cache too to check other response type +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example2.com. IN A +ENTRY_END + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example2.com. IN A +SECTION ANSWER +www.example2.com. IN A 10.20.30.40 +SECTION AUTHORITY +example2.com. IN NS ns.example2.com. +SECTION ADDITIONAL +ns.example2.com IN A 1.2.3.5 +ENTRY_END + +; time passes +STEP 95 TIME_PASSES ELAPSE 3595 + +STEP 100 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +ns.example.com. IN A +ENTRY_END + +; ns.example.com RANGE does not answer, only until step 100, +; so we provide an answer, but first, let time pass beyond the TTL. +; it is going to time 3605, just passed the 3600 expire TTL, but the +; query started at 3595 before the TTL expired. +STEP 110 TIME_PASSES ELAPSE 10 + +; provide the answer to the query sent. +STEP 120 CHECK_OUT_QUERY +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION ANSWER +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com IN A 1.2.3.4 +ENTRY_END + +STEP 130 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +; check if the domain is still live. +STEP 140 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www2.example.com. IN A +ENTRY_END + +STEP 150 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +www2.example.com. IN A +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END + +; example2 is valid with TTL of 3610, it is time 3605 +STEP 160 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +ns.example2.com. IN A +ENTRY_END + +; move to time 3615 +STEP 170 TIME_PASSES ELAPSE 10 + +STEP 180 CHECK_OUT_QUERY +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example2.com. IN A +SECTION ANSWER +ns.example2.com. IN A 1.2.3.5 +SECTION AUTHORITY +example2.com. IN NS ns.example2.com. +SECTION ADDITIONAL +ns.example2.com. IN A 1.2.3.5 +ENTRY_END + +STEP 190 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +ns.example2.com. IN A +SECTION ANSWER +ns.example2.com IN A 1.2.3.5 +SECTION AUTHORITY +example2.com. IN NS ns.example2.com. +SECTION ADDITIONAL +ENTRY_END + +; check if the domain is still live. +STEP 200 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www2.example2.com. IN A +ENTRY_END + +STEP 210 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NXDOMAIN +SECTION QUESTION +www2.example2.com. IN A +SECTION AUTHORITY +com. 86400 IN SOA a. b. 1 2 3 4 5 +ENTRY_END + +SCENARIO_END diff --git a/testdata/iter_nxns_cached.rpl b/testdata/iter_nxns_cached.rpl new file mode 100644 index 000000000..7671df663 --- /dev/null +++ b/testdata/iter_nxns_cached.rpl @@ -0,0 +1,384 @@ +; Check that cached NXDOMAIN replies for nameservers do not count towards the +; MAX_TARGET_NX limit. + +server: + module-config: "iterator" + trust-anchor-signaling: no + target-fetch-policy: "0 0 0 0 0" + verbosity: 3 + access-control: 127.0.0.1 allow_snoop + do-not-query-localhost: no + qname-minimisation: no + minimal-responses: no + rrset-roundrobin: no +stub-zone: + name: "example.com" + stub-addr: 127.0.0.2 +stub-zone: + name: "nameservers.com" + stub-addr: 127.0.0.3 +CONFIG_END + +SCENARIO_BEGIN Test that the NXNS countermeasure is not triggered for cached NXDOMAIN + +RANGE_BEGIN 0 100 + ADDRESS 127.0.0.1 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + b.a.example.com. IN A + SECTION ANSWER + b.a.example.com. IN A 127.0.0.0 + ENTRY_END +RANGE_END + +RANGE_BEGIN 31 100 + ADDRESS 127.0.0.3 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns1.nameservers.com. IN A + SECTION ANSWER + ns1.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns2.nameservers.com. IN A + SECTION ANSWER + ns2.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns3.nameservers.com. IN A + SECTION ANSWER + ns3.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns4.nameservers.com. IN A + SECTION ANSWER + ns4.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns5.nameservers.com. IN A + SECTION ANSWER + ns5.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns6.nameservers.com. IN A + SECTION ANSWER + ns6.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns7.nameservers.com. IN A + SECTION ANSWER + ns7.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns8.nameservers.com. IN A + SECTION ANSWER + ns8.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns9.nameservers.com. IN A + SECTION ANSWER + ns9.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns10.nameservers.com. IN A + SECTION ANSWER + ns10.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns11.nameservers.com. IN A + SECTION ANSWER + ns11.nameservers.com. IN A 127.0.0.1 + ENTRY_END + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns12.nameservers.com. IN A + SECTION ANSWER + ns12.nameservers.com. IN A 127.0.0.1 + ENTRY_END + + ; Reply no-data to AAAA queries + ENTRY_BEGIN + MATCH opcode subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + nameservers.com. IN A + ENTRY_END +RANGE_END + +; Query for a domain +STEP 0 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.example.com. IN A +ENTRY_END + +; Answer with delegation +STEP 1 REPLY +ENTRY_BEGIN +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a.example.com. IN A +SECTION AUTHORITY +a.example.com. IN NS ns1.nameservers.com. +a.example.com. IN NS ns2.nameservers.com. +a.example.com. IN NS ns3.nameservers.com. +a.example.com. IN NS ns4.nameservers.com. +a.example.com. IN NS ns5.nameservers.com. +a.example.com. IN NS ns6.nameservers.com. +a.example.com. IN NS ns7.nameservers.com. +a.example.com. IN NS ns8.nameservers.com. +a.example.com. IN NS ns9.nameservers.com. +a.example.com. IN NS ns10.nameservers.com. +a.example.com. IN NS ns11.nameservers.com. +a.example.com. IN NS ns12.nameservers.com. +ENTRY_END + +; Reply NXDOMAIN to MAX_TARGET_NX queries(6) x2 (A+AAAA) +STEP 2 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +SECTION AUTHORITY +example.com. IN SOA ns.example.com email.example.com 1 2 3 4 60 +ENTRY_END +STEP 3 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +SECTION AUTHORITY +example.com. IN SOA ns.ns email.email 1 2 3 4 60 +ENTRY_END +STEP 4 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 5 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 6 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 7 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 8 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 9 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 10 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 11 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 12 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 13 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END + +; We should receive SERVFAIL because MAX_TARGET_NX was reached +STEP 14 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +a.example.com. IN A +ENTRY_END + +; Query for another domain in the same delegation +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b.a.example.com. IN A +ENTRY_END + +; We still have 6 NSes that Unbound didn't try to resolve +; Reply with NXDOMAIN for 5 of them +STEP 21 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 22 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 23 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 24 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 25 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 26 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 27 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 28 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 29 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END +STEP 30 REPLY +ENTRY_BEGIN +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +a.query. IN A +ENTRY_END + +; Unbound will reach the upstream and get the answer for the final NS +; which has the answer for the client query. + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b.a.example.com. IN A +SECTION ANSWER +b.a.example.com. IN A 127.0.0.0 +ENTRY_END + +; Allow for possible pending NS query (AAAA) to get answered +STEP 41 TRAFFIC + +SCENARIO_END diff --git a/testdata/iter_nxns_fallback.rpl b/testdata/iter_nxns_fallback.rpl new file mode 100644 index 000000000..324068604 --- /dev/null +++ b/testdata/iter_nxns_fallback.rpl @@ -0,0 +1,380 @@ +; Check if fallback to the parent side works when MAX_TARGET_NX is reached. + +server: + module-config: "iterator" + trust-anchor-signaling: no + target-fetch-policy: "0 0 0 0 0" + verbosity: 3 + access-control: 127.0.0.1 allow_snoop + qname-minimisation: no + minimal-responses: no + rrset-roundrobin: no + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test the NXNS fallback + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + . IN NS + SECTION ANSWER + . IN NS K.ROOT-SERVERS.NET. + SECTION ADDITIONAL + K.ROOT-SERVERS.NET. IN A 193.0.14.129 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION AUTHORITY + com. IN NS a.gtld-servers.net. + SECTION ADDITIONAL + a.gtld-servers.net. IN A 192.5.6.30 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + nonexistant.com. IN A + SECTION AUTHORITY + com. IN NS a.gtld-servers.net. + SECTION ADDITIONAL + a.gtld-servers.net. IN A 192.5.6.30 + ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + com. IN NS + SECTION ANSWER + com. IN NS a.gtld-servers.net. + SECTION ADDITIONAL + a.gtld-servers.net. IN A 192.5.6.30 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. 10 IN A 1.2.3.4 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + nonexistant.com. IN A + SECTION AUTHORITY + nonexistant.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. 10 IN A 1.2.3.4 + ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN NS + SECTION ANSWER + example.com. IN NS ns1.nonexistant.com. + example.com. IN NS ns2.nonexistant.com. + example.com. IN NS ns3.nonexistant.com. + example.com. IN NS ns4.nonexistant.com. + example.com. IN NS ns5.nonexistant.com. + example.com. IN NS ns6.nonexistant.com. + example.com. IN NS ns7.nonexistant.com. + example.com. IN NS ns8.nonexistant.com. + example.com. IN NS ns9.nonexistant.com. + example.com. IN NS ns10.nonexistant.com. + example.com. IN NS ns11.nonexistant.com. + example.com. IN NS ns12.nonexistant.com. + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns.example.com. IN A + SECTION ANSWER + ns.example.com. 10 IN A 1.2.3.4 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + ns.example.com. IN AAAA + ENTRY_END + + ENTRY_BEGIN + MATCH opcode subdomain + ADJUST copy_id copy_query + REPLY QR NXDOMAIN + SECTION QUESTION + nonexistant.com. IN A + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + a.example.com. IN A + SECTION ANSWER + a.example.com. IN A 10.20.30.40 + SECTION AUTHORITY + example.com. IN NS ns1.nonexistant.com. + example.com. IN NS ns2.nonexistant.com. + example.com. IN NS ns3.nonexistant.com. + example.com. IN NS ns4.nonexistant.com. + example.com. IN NS ns5.nonexistant.com. + example.com. IN NS ns6.nonexistant.com. + example.com. IN NS ns7.nonexistant.com. + example.com. IN NS ns8.nonexistant.com. + example.com. IN NS ns9.nonexistant.com. + example.com. IN NS ns10.nonexistant.com. + example.com. IN NS ns11.nonexistant.com. + example.com. IN NS ns12.nonexistant.com. + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + b.example.com. IN A + SECTION ANSWER + b.example.com. IN A 10.20.30.40 + SECTION AUTHORITY + example.com. IN NS ns1.nonexistant.com. + example.com. IN NS ns2.nonexistant.com. + example.com. IN NS ns3.nonexistant.com. + example.com. IN NS ns4.nonexistant.com. + example.com. IN NS ns5.nonexistant.com. + example.com. IN NS ns6.nonexistant.com. + example.com. IN NS ns7.nonexistant.com. + example.com. IN NS ns8.nonexistant.com. + example.com. IN NS ns9.nonexistant.com. + example.com. IN NS ns10.nonexistant.com. + example.com. IN NS ns11.nonexistant.com. + example.com. IN NS ns12.nonexistant.com. + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + c.example.com. IN A + SECTION ANSWER + c.example.com. IN A 10.20.30.40 + SECTION AUTHORITY + example.com. IN NS ns1.nonexistant.com. + example.com. IN NS ns2.nonexistant.com. + example.com. IN NS ns3.nonexistant.com. + example.com. IN NS ns4.nonexistant.com. + example.com. IN NS ns5.nonexistant.com. + example.com. IN NS ns6.nonexistant.com. + example.com. IN NS ns7.nonexistant.com. + example.com. IN NS ns8.nonexistant.com. + example.com. IN NS ns9.nonexistant.com. + example.com. IN NS ns10.nonexistant.com. + example.com. IN NS ns11.nonexistant.com. + example.com. IN NS ns12.nonexistant.com. + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + d.example.com. IN A + SECTION ANSWER + d.example.com. IN A 10.20.30.40 + SECTION AUTHORITY + example.com. IN NS ns1.nonexistant.com. + example.com. IN NS ns2.nonexistant.com. + example.com. IN NS ns3.nonexistant.com. + example.com. IN NS ns4.nonexistant.com. + example.com. IN NS ns5.nonexistant.com. + example.com. IN NS ns6.nonexistant.com. + example.com. IN NS ns7.nonexistant.com. + example.com. IN NS ns8.nonexistant.com. + example.com. IN NS ns9.nonexistant.com. + example.com. IN NS ns10.nonexistant.com. + example.com. IN NS ns11.nonexistant.com. + example.com. IN NS ns12.nonexistant.com. + ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.example.com. IN A +ENTRY_END + +; This was resolved by asking the parent side nameservers +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +a.example.com. IN A +SECTION ANSWER +a.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns1.nonexistant.com. +example.com. IN NS ns2.nonexistant.com. +example.com. IN NS ns3.nonexistant.com. +example.com. IN NS ns4.nonexistant.com. +example.com. IN NS ns5.nonexistant.com. +example.com. IN NS ns6.nonexistant.com. +example.com. IN NS ns7.nonexistant.com. +example.com. IN NS ns8.nonexistant.com. +example.com. IN NS ns9.nonexistant.com. +example.com. IN NS ns10.nonexistant.com. +example.com. IN NS ns11.nonexistant.com. +example.com. IN NS ns12.nonexistant.com. +ENTRY_END + +; The child side nameservers are now known to Unbound + +; Query again, the child server nameservers will be asked now +STEP 3 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +b.example.com. IN A +ENTRY_END + +; This was resolved by falling back to the parent side nameservers +STEP 4 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +b.example.com. IN A +SECTION ANSWER +b.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns1.nonexistant.com. +example.com. IN NS ns2.nonexistant.com. +example.com. IN NS ns3.nonexistant.com. +example.com. IN NS ns4.nonexistant.com. +example.com. IN NS ns5.nonexistant.com. +example.com. IN NS ns6.nonexistant.com. +example.com. IN NS ns7.nonexistant.com. +example.com. IN NS ns8.nonexistant.com. +example.com. IN NS ns9.nonexistant.com. +example.com. IN NS ns10.nonexistant.com. +example.com. IN NS ns11.nonexistant.com. +example.com. IN NS ns12.nonexistant.com. +ENTRY_END + +; Query a third time, this will get the cached NXDOMAINs (no NX counter for +; those) and will go to the parent as a last resort. This query will test that +; we will not have resolution for the lame(parent side) addresses that could +; raise the NX counter because of no address addition to the delegation point +; (the same addresses are already there). +STEP 5 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.example.com. IN A +ENTRY_END + +; This was resolved by going back to the parent side nameservers (child side +; was exhausted from cache and queries < MAX_TARGET_NX). +STEP 6 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +c.example.com. IN A +SECTION ANSWER +c.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns1.nonexistant.com. +example.com. IN NS ns2.nonexistant.com. +example.com. IN NS ns3.nonexistant.com. +example.com. IN NS ns4.nonexistant.com. +example.com. IN NS ns5.nonexistant.com. +example.com. IN NS ns6.nonexistant.com. +example.com. IN NS ns7.nonexistant.com. +example.com. IN NS ns8.nonexistant.com. +example.com. IN NS ns9.nonexistant.com. +example.com. IN NS ns10.nonexistant.com. +example.com. IN NS ns11.nonexistant.com. +example.com. IN NS ns12.nonexistant.com. +ENTRY_END + +; Allow for the nameserver glue to expire +STEP 10 TIME_PASSES ELAPSE 11 + +; Query again for the parent side fallback +STEP 11 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.example.com. IN A +ENTRY_END + +; This was resolved by falling back to the parent side nameservers +STEP 12 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +d.example.com. IN A +SECTION ANSWER +d.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns1.nonexistant.com. +example.com. IN NS ns2.nonexistant.com. +example.com. IN NS ns3.nonexistant.com. +example.com. IN NS ns4.nonexistant.com. +example.com. IN NS ns5.nonexistant.com. +example.com. IN NS ns6.nonexistant.com. +example.com. IN NS ns7.nonexistant.com. +example.com. IN NS ns8.nonexistant.com. +example.com. IN NS ns9.nonexistant.com. +example.com. IN NS ns10.nonexistant.com. +example.com. IN NS ns11.nonexistant.com. +example.com. IN NS ns12.nonexistant.com. +ENTRY_END + +SCENARIO_END diff --git a/testdata/iter_nxns_parentside.rpl b/testdata/iter_nxns_parentside.rpl new file mode 100644 index 000000000..94a5a6f1b --- /dev/null +++ b/testdata/iter_nxns_parentside.rpl @@ -0,0 +1,118 @@ +; Check if the NXNS fallback to the parent side does not mess with normal +; parent side resolution. Parent side resolution should SERVFAIL when reaching +; the MAX_TARGET_NX limit. + +server: + module-config: "iterator" + trust-anchor-signaling: no + target-fetch-policy: "0 0 0 0 0" + verbosity: 3 + access-control: 127.0.0.1 allow_snoop + qname-minimisation: no + minimal-responses: no + rrset-roundrobin: no + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test that the NXNS fallback does not mess with parent side resolution + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + . IN NS + SECTION ANSWER + . IN NS K.ROOT-SERVERS.NET. + SECTION ADDITIONAL + K.ROOT-SERVERS.NET. IN A 193.0.14.129 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION AUTHORITY + com. IN NS a.gtld-servers.net. + SECTION ADDITIONAL + a.gtld-servers.net. IN A 192.5.6.30 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + nonexistant.com. IN A + SECTION AUTHORITY + com. IN NS a.gtld-servers.net. + SECTION ADDITIONAL + a.gtld-servers.net. IN A 192.5.6.30 + ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + com. IN NS + SECTION ANSWER + com. IN NS a.gtld-servers.net. + SECTION ADDITIONAL + a.gtld-servers.net. IN A 192.5.6.30 + ENTRY_END + + ENTRY_BEGIN + MATCH opcode qtype subdomain + ADJUST copy_id copy_query + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION AUTHORITY + example.com. IN NS ns1.nonexistant.com. + example.com. IN NS ns2.nonexistant.com. + example.com. IN NS ns3.nonexistant.com. + example.com. IN NS ns4.nonexistant.com. + example.com. IN NS ns5.nonexistant.com. + example.com. IN NS ns6.nonexistant.com. + example.com. IN NS ns7.nonexistant.com. + example.com. IN NS ns8.nonexistant.com. + ENTRY_END + + ENTRY_BEGIN + MATCH opcode subdomain + ADJUST copy_id copy_query + REPLY QR NXDOMAIN + SECTION QUESTION + nonexistant.com. IN A + ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.example.com. IN A +ENTRY_END + +STEP 2 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +a.example.com. IN A +ENTRY_END + +SCENARIO_END diff --git a/testdata/iter_prefetch_change.rpl b/testdata/iter_prefetch_change.rpl index 007025ad0..1be9e6abe 100644 --- a/testdata/iter_prefetch_change.rpl +++ b/testdata/iter_prefetch_change.rpl @@ -22,9 +22,9 @@ REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER -. IN NS K.ROOT-SERVERS.NET. +. 86400 IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL -K.ROOT-SERVERS.NET. IN A 193.0.14.129 +K.ROOT-SERVERS.NET. 86400 IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN @@ -34,9 +34,9 @@ REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY -com. IN NS a.gtld-servers.net. +com. 86400 IN NS a.gtld-servers.net. SECTION ADDITIONAL -a.gtld-servers.net. IN A 192.5.6.30 +a.gtld-servers.net. 86400 IN A 192.5.6.30 ENTRY_END RANGE_END @@ -50,9 +50,9 @@ REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER -com. IN NS a.gtld-servers.net. +com. 86400 IN NS a.gtld-servers.net. SECTION ADDITIONAL -a.gtld-servers.net. IN A 192.5.6.30 +a.gtld-servers.net. 86400 IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN @@ -78,9 +78,9 @@ REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER -com. IN NS a.gtld-servers.net. +com. 86400 IN NS a.gtld-servers.net. SECTION ADDITIONAL -a.gtld-servers.net. IN A 192.5.6.30 +a.gtld-servers.net. 86400 IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN diff --git a/testdata/serve_expired_client_timeout_no_prefetch.rpl b/testdata/serve_expired_client_timeout_no_prefetch.rpl new file mode 100644 index 000000000..aed397d9e --- /dev/null +++ b/testdata/serve_expired_client_timeout_no_prefetch.rpl @@ -0,0 +1,110 @@ +; config options +server: + module-config: "validator iterator" + qname-minimisation: "no" + minimal-responses: no + serve-expired: yes + serve-expired-client-timeout: 1 + serve-expired-reply-ttl: 123 + ede: yes + ede-serve-expired: yes + +stub-zone: + name: "example.com" + stub-addr: 1.2.3.4 +CONFIG_END + +SCENARIO_BEGIN Test that no prefetch is triggered for 0TTL records with serve-expired and client-timeout enabled +; Scenario overview: +; - query for example.com. IN A +; - check that we get an answer for example.com. IN A with the correct TTL +; - query again right at the 0TTL cached entry +; - check that we get the cached answer with no prefetching triggered + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN NS + SECTION ANSWER + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 + ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 10 + ADDRESS 1.2.3.4 + ; response to A query + ENTRY_BEGIN + MATCH opcode qtype qname + ADJUST copy_id + REPLY QR NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 + ENTRY_END +RANGE_END + +; Query with RD flag +STEP 0 QUERY +ENTRY_BEGIN + REPLY RD + SECTION QUESTION + example.com. IN A +ENTRY_END + +; Check that we got the correct answer (should be cached) +STEP 1 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RD RA NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 10 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. IN A 1.2.3.4 +ENTRY_END + +; Wait for the TTL to expire and produce a 0 TTL cached record. +STEP 10 TIME_PASSES ELAPSE 10 + +; Query again +STEP 20 QUERY +ENTRY_BEGIN + REPLY RD DO + SECTION QUESTION + example.com. IN A +ENTRY_END + +; This should come from the cache with no prefetch triggered (earlier bug). +STEP 21 CHECK_ANSWER +ENTRY_BEGIN + MATCH all ttl + REPLY QR RD RA DO NOERROR + SECTION QUESTION + example.com. IN A + SECTION ANSWER + example.com. 0 IN A 5.6.7.8 + SECTION AUTHORITY + example.com. 3590 IN NS ns.example.com. + SECTION ADDITIONAL + ns.example.com. 3590 IN A 1.2.3.4 +ENTRY_END + +; If a prefetch triggers the test will fail with 'messages pending'. + +SCENARIO_END diff --git a/testdata/stat_values.tdir/stat_values.conf b/testdata/stat_values.tdir/stat_values.conf index 5cec691f5..dc4553920 100644 --- a/testdata/stat_values.tdir/stat_values.conf +++ b/testdata/stat_values.tdir/stat_values.conf @@ -1,5 +1,5 @@ server: - verbosity: 2 + verbosity: 5 num-threads: 1 interface: 127.0.0.1 port: @PORT@ @@ -11,6 +11,9 @@ server: do-not-query-localhost: no extended-statistics: yes identity: "stat_values" + outbound-msg-retry: 0 + root-key-sentinel: no + trust-anchor-signaling: no local-zone: local.zone static local-data: "www.local.zone A 192.0.2.1" diff --git a/testdata/stat_values.tdir/stat_values.test b/testdata/stat_values.tdir/stat_values.test index 1cd19fa2b..ef86a0471 100644 --- a/testdata/stat_values.tdir/stat_values.test +++ b/testdata/stat_values.tdir/stat_values.test @@ -186,6 +186,7 @@ num.query.opcode.QUERY=1 num.query.flags.RD=1 num.query.flags.AD=1 num.query.edns.present=1 +num.query.udpout=1 msg.cache.count=1 rrset.cache.count=1 infra.cache.count=1 @@ -223,6 +224,7 @@ num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 +num.query.udpout=1 msg.cache.count=1 rrset.cache.count=1 infra.cache.count=1" @@ -249,6 +251,7 @@ num.query.opcode.QUERY=1 num.query.flags.RD=1 num.query.flags.AD=1 num.query.edns.present=1 +num.query.udpout=1 msg.cache.count=2 rrset.cache.count=2 infra.cache.count=2 @@ -263,6 +266,7 @@ if grep "192.0.2.1" outfile; then else end 1 fi +sleep 1 # make sure the outgoing UDP (and the edns1xx0 retry) are accounted for. check_stats "\ total.num.queries=1 total.num.expired=1 @@ -274,6 +278,7 @@ num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 +num.query.udpout=2 total.num.cachemiss=1 msg.cache.count=2 rrset.cache.count=2 @@ -327,6 +332,7 @@ num.query.edns.present=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 +num.query.udpout=1 total.num.queries=1 total.num.recursivereplies=1 msg.cache.count=3 diff --git a/testdata/subnet_prefetch.crpl b/testdata/subnet_prefetch.crpl index 7083aba6a..04922f2bb 100644 --- a/testdata/subnet_prefetch.crpl +++ b/testdata/subnet_prefetch.crpl @@ -12,7 +12,6 @@ server: access-control: 127.0.0.1 allow_snoop qname-minimisation: no minimal-responses: no - serve-expired: yes prefetch: yes stub-zone: @@ -20,7 +19,7 @@ stub-zone: stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END -SCENARIO_BEGIN Test prefetch option for global cache +SCENARIO_BEGIN Test prefetch option for global cache with ECS enabled ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 @@ -34,9 +33,6 @@ RANGE_BEGIN 0 100 SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END @@ -65,9 +61,6 @@ RANGE_BEGIN 0 100 SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END @@ -96,9 +89,6 @@ RANGE_BEGIN 0 10 SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END @@ -130,9 +120,6 @@ RANGE_BEGIN 11 100 SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END @@ -144,7 +131,7 @@ RANGE_BEGIN 11 100 SECTION QUESTION www.example.com. IN A SECTION ANSWER - www.example.com. IN A 10.20.30.40 + www.example.com. 10 IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL @@ -167,23 +154,23 @@ SECTION QUESTION www.example.com. IN A ENTRY_END -; This answer should be in the global cache +; This answer should be in the global cache (because no ECS from upstream) STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION -www.example.com. IN A +www.example.com. IN A SECTION ANSWER -www.example.com. IN A 10.20.30.40 +www.example.com. IN A 10.20.30.40 SECTION AUTHORITY -example.com. IN NS ns.example.com. +example.com. IN NS ns.example.com. SECTION ADDITIONAL -ns.example.com. IN A 1.2.3.4 +ns.example.com. IN A 1.2.3.4 ENTRY_END ; Try to trigger a prefetch -STEP 3 TIME_PASSES ELAPSE 11 +STEP 3 TIME_PASSES ELAPSE 9 STEP 11 QUERY ENTRY_BEGIN @@ -192,24 +179,46 @@ SECTION QUESTION www.example.com. IN A ENTRY_END -; This expired record came from the cache and a prefetch is triggered +; This record came from the global cache and a prefetch was triggered STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION -www.example.com. IN A +www.example.com. IN A SECTION ANSWER -www.example.com. 30 IN A 10.20.30.40 +www.example.com. 1 IN A 10.20.30.40 SECTION AUTHORITY -example.com. 3589 IN NS ns.example.com. +example.com. 3591 IN NS ns.example.com. SECTION ADDITIONAL -ns.example.com. 3589 IN A 1.2.3.4 +ns.example.com. 3591 IN A 1.2.3.4 ENTRY_END -; Allow upstream to reply to the prefetch query. -; It can only be answered if correct ECS was derived from the client's IP. -; Otherwise the test will fail with "messages pending". -STEP 13 TRAFFIC +; Allow time to pass so that the global cache record is expired +STEP 13 TIME_PASSES ELAPSE 2 + +; Query again to verify that the record was prefetched and stored in the ECS +; cache (because the server replied with ECS this time) +STEP 14 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; This record came from the ECS cache +STEP 15 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 8 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3598 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. 3598 IN A 1.2.3.4 +ENTRY_END SCENARIO_END diff --git a/testdata/subnet_prefetch_with_client_ecs.crpl b/testdata/subnet_prefetch_with_client_ecs.crpl index b0410255e..ddc832c47 100644 --- a/testdata/subnet_prefetch_with_client_ecs.crpl +++ b/testdata/subnet_prefetch_with_client_ecs.crpl @@ -12,7 +12,6 @@ server: access-control: 127.0.0.1 allow_snoop qname-minimisation: no minimal-responses: no - serve-expired: yes prefetch: yes stub-zone: @@ -20,7 +19,7 @@ stub-zone: stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END -SCENARIO_BEGIN Test prefetch option for global cache +SCENARIO_BEGIN Test prefetch option for global cache with ECS enabled and ECS client ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 @@ -34,9 +33,6 @@ RANGE_BEGIN 0 100 SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END @@ -65,9 +61,6 @@ RANGE_BEGIN 0 100 SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END @@ -96,9 +89,6 @@ RANGE_BEGIN 0 10 SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END @@ -130,9 +120,6 @@ RANGE_BEGIN 11 100 SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL - HEX_EDNSDATA_BEGIN - ;; we expect to receive empty - HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END @@ -144,7 +131,7 @@ RANGE_BEGIN 11 100 SECTION QUESTION www.example.com. IN A SECTION ANSWER - www.example.com. IN A 10.20.30.40 + www.example.com. 10 IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL @@ -173,17 +160,17 @@ ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION -www.example.com. IN A +www.example.com. IN A SECTION ANSWER -www.example.com. IN A 10.20.30.40 +www.example.com. IN A 10.20.30.40 SECTION AUTHORITY -example.com. IN NS ns.example.com. +example.com. IN NS ns.example.com. SECTION ADDITIONAL -ns.example.com. IN A 1.2.3.4 +ns.example.com. IN A 1.2.3.4 ENTRY_END ; Try to trigger a prefetch -STEP 3 TIME_PASSES ELAPSE 11 +STEP 3 TIME_PASSES ELAPSE 9 STEP 11 QUERY ENTRY_BEGIN @@ -192,30 +179,63 @@ SECTION QUESTION www.example.com. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN - 00 08 00 05 ; OPC, optlen - 00 01 08 00 ; ip4, source 8, scope 0 - 7f ; 127.0.0.0/8 + 00 08 00 05 ; OPC, optlen + 00 01 08 00 ; ip4, source 8, scope 0 + 7f ; 127.0.0.0/8 HEX_EDNSDATA_END ENTRY_END -; This expired record came from the cache and a prefetch is triggered +; This record came from the global cache and a prefetch was triggered STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION -www.example.com. IN A +www.example.com. IN A SECTION ANSWER -www.example.com. 30 IN A 10.20.30.40 +www.example.com. 1 IN A 10.20.30.40 SECTION AUTHORITY -example.com. 3589 IN NS ns.example.com. +example.com. 3591 IN NS ns.example.com. SECTION ADDITIONAL -ns.example.com. 3589 IN A 1.2.3.4 +ns.example.com. 3591 IN A 1.2.3.4 ENTRY_END -; Allow upstream to reply to the prefetch query. -; It can only be answered if correct ECS was derived from the client's IP. -; Otherwise the test will fail with "messages pending". -STEP 13 TRAFFIC +; Allow time to pass so that the global cache record is expired +STEP 13 TIME_PASSES ELAPSE 2 + +; Query again to verify that the record was prefetched and stored in the ECS +; cache (because the server replied with ECS this time) +STEP 14 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +www.example.com. IN A +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 00 05 ; OPC, optlen + 00 01 08 00 ; ip4, source 8, scope 0 + 7f ; 127.0.0.0/8 +HEX_EDNSDATA_END +ENTRY_END + +; This record came from the ECS cache +STEP 15 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ttl +REPLY QR RD RA DO NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 8 IN A 10.20.30.40 +SECTION AUTHORITY +example.com. 3598 IN NS ns.example.com. +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 00 05 ; OPC, optlen + 00 01 08 08 ; ip4, source 8, scope 0 + 7f ; 127.0.0.0/8 +HEX_EDNSDATA_END +ns.example.com. 3598 IN A 1.2.3.4 +ENTRY_END SCENARIO_END diff --git a/testdata/subnet_scopezero.crpl b/testdata/subnet_scopezero.crpl new file mode 100644 index 000000000..e00651422 --- /dev/null +++ b/testdata/subnet_scopezero.crpl @@ -0,0 +1,439 @@ +; scope of 0, if the query also had scope of 0, do not answer this +; to everyone, but only for scope 0 queries. Otherwise can answer cached. + +server: + target-fetch-policy: "0 0 0 0 0" + send-client-subnet: 1.2.3.4 + module-config: "subnetcache validator iterator" + verbosity: 4 + qname-minimisation: no + +stub-zone: + name: "." + stub-addr: 193.0.14.129 + +stub-zone: + name: "example.com" + stub-addr: 1.2.3.4 +CONFIG_END + +SCENARIO_BEGIN Test subnet cache with scope zero queries and responses. + +; the upstream server. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 + +ENTRY_BEGIN +MATCH opcode qtype qname ednsdata +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ;; we expect to receive empty +HEX_EDNSDATA_END +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END +RANGE_END + +RANGE_BEGIN 0 11 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +;copy_ednsdata_assume_clientsubnet +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.0.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 11 ; source mask, scopemask + 7f 00 00 ; address +HEX_EDNSDATA_END +ENTRY_END +RANGE_END + +RANGE_BEGIN 20 31 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +;copy_ednsdata_assume_clientsubnet +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.41 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.0.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 11 ; source mask, scopemask + 7f 01 00 ; address +HEX_EDNSDATA_END +ENTRY_END +RANGE_END + +RANGE_BEGIN 40 51 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +;copy_ednsdata_assume_clientsubnet +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.42 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 ; OPC + 00 04 ; option length + 00 01 ; Family + 00 00 ; source mask, scopemask + ; address 0.0.0.0/0 scope 0 +HEX_EDNSDATA_END +ENTRY_END +RANGE_END + +RANGE_BEGIN 120 131 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +;copy_ednsdata_assume_clientsubnet +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.43 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 00 ; source mask, scopemask + 7f 02 00 ; address 127.2.0.0/24 scope 0 +HEX_EDNSDATA_END +ENTRY_END +RANGE_END + +; query for 127.0.0.0/24 +STEP 1 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 0b + + 00 08 00 07 ; OPC, optlen + 00 01 18 00 ; ip4, scope 24, source 0 + 7f 00 00 ;127.0.0.0/24 +HEX_ANSWER_END +ENTRY_END + +; answer is 10.20.30.40 for 127.0.0.0/24 scope 17 +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.0.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 11 ; source mask, scopemask + 7f 00 00 ; address +HEX_EDNSDATA_END +ENTRY_END + +; query for 127.1.0.0/24 +STEP 20 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 0b + + 00 08 00 07 ; OPC, optlen + 00 01 18 00 ; ip4, scope 24, source 0 + 7f 01 00 ;127.1.0.0/24 +HEX_ANSWER_END +ENTRY_END + +; answer is 10.20.30.41 for 127.1.0.0/24 scope 17 +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.41 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.1.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 11 ; source mask, scopemask + 7f 01 00 ; address +HEX_EDNSDATA_END +ENTRY_END + +; query for 0.0.0.0/0 +STEP 40 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 08 + + 00 08 00 04 ; OPC, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ;0.0.0.0/0 +HEX_ANSWER_END +ENTRY_END + +; answer is 10.20.30.42 for 0.0.0.0/0 scope 0 +STEP 50 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.42 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 ; OPC + 00 04 ; option length + 00 01 ; Family + 00 00 ; source mask, scopemask + ; address +HEX_EDNSDATA_END +ENTRY_END + +; query for 127.0.0.0/24, again, it should be in cache. +; and not from the scope 0 answer. +STEP 60 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 0b + + 00 08 00 07 ; OPC, optlen + 00 01 18 00 ; ip4, scope 24, source 0 + 7f 00 00 ;127.0.0.0/24 +HEX_ANSWER_END +ENTRY_END + +; answer should be 10.20.30.40 for 127.0.0.0/24 scope 17 +STEP 70 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.0.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 11 ; source mask, scopemask + 7f 00 00 ; address +HEX_EDNSDATA_END +ENTRY_END + +; query for 127.1.0.0/24, again, it should be in cache. +STEP 80 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 0b + + 00 08 00 07 ; OPC, optlen + 00 01 18 00 ; ip4, scope 24, source 0 + 7f 01 00 ;127.1.0.0/24 +HEX_ANSWER_END +ENTRY_END + +; answer should be 10.20.30.41 for 127.1.0.0/24 scope 17 +STEP 90 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.41 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.1.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 11 ; source mask, scopemask + 7f 01 00 ; address +HEX_EDNSDATA_END +ENTRY_END + +; query for 0.0.0.0/0, again. +STEP 100 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 08 + + 00 08 00 04 ; OPC, optlen + 00 01 00 00 ; ip4, scope 0, source 0 + ;0.0.0.0/0 +HEX_ANSWER_END +ENTRY_END + +; answer should be 10.20.30.42 for 0.0.0.0/0 scope 0 +STEP 110 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.42 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + 00 08 ; OPC + 00 04 ; option length + 00 01 ; Family + 00 00 ; source mask, scopemask + ; address +HEX_EDNSDATA_END +ENTRY_END + +; now a query for a /24 that gets an answer for a /0. +STEP 120 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 0b + + 00 08 00 07 ; OPC, optlen + 00 01 18 00 ; ip4, scope 24, source 0 + 7f 02 00 ;127.2.0.0/24 +HEX_ANSWER_END +ENTRY_END + +; answer should be 10.20.30.43 for 127.2.0.0/24 scope 0 +STEP 130 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.43 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.2.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 00 ; source mask, scopemask + 7f 02 00 ; address +HEX_EDNSDATA_END +ENTRY_END + +; the scope 0 answer is now used to answer queries from +; query for 127.0.0.0/24 +STEP 140 QUERY +ENTRY_BEGIN +HEX_ANSWER_BEGIN + 00 00 01 00 00 01 00 00 ;ID 0 + 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) + 07 65 78 61 6d 70 6c 65 + 03 63 6f 6d 00 00 01 00 + 01 00 00 29 10 00 00 00 + 80 00 00 0b + + 00 08 00 07 ; OPC, optlen + 00 01 18 00 ; ip4, scope 24, source 0 + 7f 00 00 ;127.0.0.0/24 +HEX_ANSWER_END +ENTRY_END + +STEP 150 CHECK_ANSWER +ENTRY_BEGIN +MATCH all ednsdata +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.43 +SECTION AUTHORITY +SECTION ADDITIONAL +HEX_EDNSDATA_BEGIN + ; client is 127.0.0.1 + 00 08 ; OPC + 00 07 ; option length + 00 01 ; Family + 18 00 ; source mask, scopemask + 7f 00 00 ; address +HEX_EDNSDATA_END +ENTRY_END + +SCENARIO_END diff --git a/util/config_file.c b/util/config_file.c index 3c7f860cf..5259bf7c1 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -173,6 +173,7 @@ config_create(void) cfg->infra_cache_slabs = 4; cfg->infra_cache_numhosts = 10000; cfg->infra_cache_min_rtt = 50; + cfg->infra_cache_max_rtt = 120000; cfg->infra_keep_probing = 0; cfg->delay_close = 0; cfg->udp_connect = 1; @@ -596,8 +597,14 @@ int config_set_option(struct config_file* cfg, const char* opt, else if(strcmp(opt, "cache-min-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;} else if(strcmp(opt, "infra-cache-min-rtt:") == 0) { - IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val); - RTT_MIN_TIMEOUT=cfg->infra_cache_min_rtt; + IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val); + RTT_MIN_TIMEOUT=cfg->infra_cache_min_rtt; + } + else if(strcmp(opt, "infra-cache-max-rtt:") == 0) { + IS_NUMBER_OR_ZERO; cfg->infra_cache_max_rtt = atoi(val); + RTT_MAX_TIMEOUT=cfg->infra_cache_max_rtt; + USEFUL_SERVER_TOP_TIMEOUT = RTT_MAX_TIMEOUT; + BLACKLIST_PENALTY = USEFUL_SERVER_TOP_TIMEOUT*4; } else S_YNO("infra-keep-probing:", infra_keep_probing) else S_NUMBER_OR_ZERO("infra-host-ttl:", host_ttl) @@ -1027,6 +1034,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "infra-host-ttl", host_ttl) else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs) else O_DEC(opt, "infra-cache-min-rtt", infra_cache_min_rtt) + else O_UNS(opt, "infra-cache-max-rtt", infra_cache_max_rtt) else O_YNO(opt, "infra-keep-probing", infra_keep_probing) else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts) else O_UNS(opt, "delay-close", delay_close) @@ -1295,6 +1303,7 @@ create_cfg_parser(struct config_file* cfg, char* filename, const char* chroot) cfg_parser->errors = 0; cfg_parser->cfg = cfg; cfg_parser->chroot = chroot; + cfg_parser->started_toplevel = 0; init_cfg_parse(); } @@ -1793,6 +1802,9 @@ void ub_c_error_msg(const char* fmt, ...) void ub_c_error(const char *str) { cfg_parser->errors++; + if(strcmp(str, "syntax error")==0 && cfg_parser->started_toplevel ==0) + str = "syntax error, is there no section start after an " + "include-toplevel directive perhaps."; fprintf(stderr, "%s:%d: error: %s\n", cfg_parser->filename, cfg_parser->line, str); } @@ -2223,11 +2235,14 @@ config_apply(struct config_file* config) SERVE_ORIGINAL_TTL = config->serve_original_ttl; MAX_NEG_TTL = (time_t)config->max_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; + RTT_MAX_TIMEOUT = config->infra_cache_max_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; MINIMAL_RESPONSES = config->minimal_responses; RRSET_ROUNDROBIN = config->rrset_roundrobin; LOG_TAG_QUERYREPLY = config->log_tag_queryreply; UNKNOWN_SERVER_NICENESS = config->unknown_server_time_limit; + USEFUL_SERVER_TOP_TIMEOUT = RTT_MAX_TIMEOUT; + BLACKLIST_PENALTY = USEFUL_SERVER_TOP_TIMEOUT*4; log_set_time_asc(config->log_time_ascii); autr_permit_small_holddown = config->permit_small_holddown; stream_wait_max = config->stream_wait_size; diff --git a/util/config_file.h b/util/config_file.h index f6e4c3084..4b08d4524 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -186,8 +186,10 @@ struct config_file { size_t infra_cache_slabs; /** max number of hosts in the infra cache */ size_t infra_cache_numhosts; - /** min value for infra cache rtt */ + /** min value for infra cache rtt (min retransmit timeout) */ int infra_cache_min_rtt; + /** max value for infra cache rtt (max retransmit timeout) */ + int infra_cache_max_rtt; /** keep probing hosts that are down */ int infra_keep_probing; /** delay close of udp-timeouted ports, if 0 no delayclose. in msec */ @@ -1262,6 +1264,8 @@ struct config_parser_state { struct config_file* cfg; /** the current chroot dir (or NULL if none) */ const char* chroot; + /** if we are started in a toplevel, or not, after a force_toplevel */ + int started_toplevel; }; /** global config parser object used during config parsing */ diff --git a/util/configlexer.c b/util/configlexer.c index 7724b29af..7a1fd7f8e 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 363 -#define YY_END_OF_BUFFER 364 +#define YY_NUM_RULES 364 +#define YY_END_OF_BUFFER 365 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,405 +372,406 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[3609] = +static yyconst flex_int16_t yy_accept[3616] = { 0, - 1, 1, 337, 337, 341, 341, 345, 345, 349, 349, - 1, 1, 353, 353, 357, 357, 364, 361, 1, 335, - 335, 362, 2, 362, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 337, 338, 338, 339, - 362, 341, 342, 342, 343, 362, 348, 345, 346, 346, - 347, 362, 349, 350, 350, 351, 362, 360, 336, 2, - 340, 362, 360, 356, 353, 354, 354, 355, 362, 357, - 358, 358, 359, 362, 361, 0, 1, 2, 2, 2, - 2, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 1, 1, 338, 338, 342, 342, 346, 346, 350, 350, + 1, 1, 354, 354, 358, 358, 365, 362, 1, 336, + 336, 363, 2, 363, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 338, 339, 339, 340, + 363, 342, 343, 343, 344, 363, 349, 346, 347, 347, + 348, 363, 350, 351, 351, 352, 363, 361, 337, 2, + 341, 363, 361, 357, 354, 355, 355, 356, 363, 358, + 359, 359, 360, 363, 362, 0, 1, 2, 2, 2, + 2, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 337, 0, 341, 0, 348, 0, 345, 349, 0, 360, - 0, 2, 2, 360, 356, 0, 353, 357, 0, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 338, 0, 342, 0, 349, 0, 346, 350, 0, 361, + 0, 2, 2, 361, 357, 0, 354, 358, 0, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 360, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 361, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 333, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 132, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 142, 361, 361, 361, - 361, 361, 361, 361, 360, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 334, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 133, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 143, 362, 362, 362, + 362, 362, 362, 362, 361, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 114, 361, 332, 361, 361, - 361, 361, 361, 361, 361, 361, 8, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 115, 362, 333, 362, 362, + 362, 362, 362, 362, 362, 362, 8, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 133, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 147, 361, 361, 360, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 134, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 148, 362, 362, 361, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 325, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 326, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 360, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 69, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 254, 361, - 14, 15, 361, 19, 18, 361, 361, 238, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 361, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 69, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 255, 362, + 14, 15, 362, 19, 18, 362, 362, 239, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 140, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 236, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 3, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 141, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 237, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 3, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 360, 361, 361, 361, 361, 361, 361, 361, 319, - 361, 361, 318, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 361, 362, 362, 362, 362, 362, 362, 362, 320, + 362, 362, 319, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 344, 361, 361, 361, 361, 361, 361, - 361, 361, 68, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 72, - 361, 288, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 326, 327, 361, 361, 361, 361, 361, 361, 361, - 361, 73, 361, 361, 141, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 136, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 225, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 345, 362, 362, 362, 362, 362, 362, + 362, 362, 68, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 72, + 362, 289, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 327, 328, 362, 362, 362, 362, 362, 362, 362, + 362, 73, 362, 362, 142, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 137, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 226, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 21, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 167, 361, 361, - 361, 361, 361, 360, 344, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 112, 361, 361, 361, - 361, 361, 361, 361, 296, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 21, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 168, 362, 362, + 362, 362, 362, 361, 345, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 113, 362, 362, 362, + 362, 362, 362, 362, 297, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 194, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 166, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 111, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 195, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 167, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 112, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 35, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 36, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 70, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 139, 361, 361, 361, 360, 361, - 361, 361, 361, 361, 131, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 71, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 35, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 36, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 70, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 140, 362, 362, 362, 361, 362, + 362, 362, 362, 362, 132, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 71, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 258, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 195, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 58, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 259, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 196, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 58, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 276, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 63, 361, 64, 361, 361, - 361, 361, 361, 115, 361, 116, 361, 361, 361, 361, - 361, 113, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 7, 361, 361, 361, - 361, 360, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 277, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 63, 362, 64, 362, 362, + 362, 362, 362, 116, 362, 117, 362, 362, 362, 362, + 362, 114, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 7, 362, 362, 362, + 362, 361, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 247, 361, 361, 361, 361, 170, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 259, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 49, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 59, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 217, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 248, 362, 362, 362, 362, 171, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 260, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 49, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 59, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 218, 362, - 216, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 16, 17, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 74, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 224, 361, 361, 361, 361, 361, 361, 118, 361, 117, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 208, 361, 361, + 217, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 16, 17, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 74, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 225, 362, 362, 362, 362, 362, 362, 119, 362, 118, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 209, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 148, 361, 361, - 361, 360, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 106, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 94, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 237, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 99, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 149, 362, 362, + 362, 361, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 107, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 95, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 238, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 100, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 67, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 211, 212, 361, 361, 361, 290, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 6, 361, 361, 361, 361, 361, 361, 361, 309, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 294, 361, - 361, 361, 361, 361, 361, 361, 320, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 67, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 212, 213, 362, 362, 362, 291, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 6, 362, 362, 362, 362, 362, 362, 362, 310, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 295, 362, + 362, 362, 362, 362, 362, 362, 321, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 46, 361, 361, 361, 361, 361, 48, 361, 361, - 361, 95, 361, 361, 361, 361, 361, 361, 56, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 360, 361, 204, 361, 361, 361, 143, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 229, 361, 205, - 361, 361, 361, 244, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 57, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 145, 124, 361, 125, - 361, 361, 361, 361, 123, 361, 361, 361, 361, 361, + 362, 46, 362, 362, 362, 362, 362, 48, 362, 362, + 362, 96, 362, 362, 362, 362, 362, 362, 56, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 361, 362, 205, 362, 362, 362, 144, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 230, 362, 206, + 362, 362, 362, 245, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 57, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 146, 125, 362, 126, + 362, 362, 362, 362, 124, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 163, 361, 361, 54, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 275, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 206, 361, 361, 361, 361, - 361, 209, 361, 215, 361, 361, 361, 361, 361, 361, - 243, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 110, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 137, 361, - 361, 361, 361, 361, 361, 361, 361, 65, 361, 361, + 362, 362, 362, 362, 164, 362, 362, 54, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 276, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 207, 362, 362, 362, 362, + 362, 210, 362, 216, 362, 362, 362, 362, 362, 362, + 244, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 111, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 138, 362, + 362, 362, 362, 362, 362, 362, 362, 65, 362, 362, - 361, 29, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 20, 361, 361, 361, 361, 361, - 361, 361, 30, 39, 361, 175, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 202, 361, 361, 360, 361, 361, 361, 361, 361, - 361, 82, 84, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 298, 361, 361, 361, - 361, 255, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 126, 361, 361, 361, 361, + 362, 29, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 20, 362, 362, 362, 362, 362, + 362, 362, 30, 39, 362, 176, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 203, 362, 362, 361, 362, 362, 362, 362, 362, + 362, 82, 84, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 299, 362, 362, 362, + 362, 256, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 127, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 162, 361, 50, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 313, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 169, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 307, 361, 361, - 361, 235, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 323, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 187, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 163, 362, 50, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 314, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 170, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 308, 362, + 362, 362, 236, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 324, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 188, 362, 362, 362, - 361, 361, 361, 361, 361, 119, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 182, 361, 196, 361, 361, 361, 361, 361, 361, 361, - 360, 361, 151, 361, 361, 361, 361, 361, 105, 361, - 361, 361, 361, 227, 361, 361, 361, 361, 361, 361, - 245, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 267, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 144, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 120, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 183, 362, 197, 362, 362, 362, 362, 362, 362, + 362, 361, 362, 152, 362, 362, 362, 362, 362, 106, + 362, 362, 362, 362, 228, 362, 362, 362, 362, 362, + 362, 246, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 268, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 145, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 186, 361, 361, - 361, 361, 361, 361, 85, 361, 86, 361, 361, 361, - 361, 361, 361, 66, 316, 361, 361, 361, 361, 361, - 93, 197, 361, 218, 361, 248, 361, 361, 210, 291, - 361, 361, 361, 361, 361, 361, 78, 361, 199, 361, - 361, 361, 361, 361, 361, 9, 361, 361, 361, 361, - 361, 109, 361, 361, 361, 361, 361, 280, 361, 361, - 361, 361, 226, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 187, 362, + 362, 362, 362, 362, 362, 362, 85, 362, 86, 362, + 362, 362, 362, 362, 362, 66, 317, 362, 362, 362, + 362, 362, 94, 198, 362, 219, 362, 249, 362, 362, + 211, 292, 362, 362, 362, 362, 362, 362, 78, 362, + 200, 362, 362, 362, 362, 362, 362, 9, 362, 362, + 362, 362, 362, 110, 362, 362, 362, 362, 362, 281, + 362, 362, 362, 362, 227, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 360, 361, - 361, 361, 361, 185, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 171, 361, 297, 361, 361, 361, - 361, 361, 266, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 239, 361, 361, 361, 361, 361, - 361, 289, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 168, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 361, 362, 362, 362, 362, 186, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 172, 362, 298, 362, + 362, 362, 362, 362, 267, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 240, 362, 362, 362, + 362, 362, 362, 290, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 169, 362, 362, 362, 362, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 317, 361, 198, 361, - 361, 361, 361, 361, 361, 361, 361, 77, 79, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 108, - 361, 361, 361, 361, 361, 278, 361, 361, 361, 361, - 293, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 231, 37, 31, 33, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 38, 361, 32, 34, 361, 40, 361, 361, 361, 361, - 361, 361, 361, 361, 104, 361, 181, 361, 361, 361, - 361, 361, 361, 361, 360, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 318, + 362, 199, 362, 362, 362, 362, 362, 362, 362, 362, + 77, 79, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 109, 362, 362, 362, 362, 362, 279, 362, + 362, 362, 362, 294, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 232, 37, 31, + 33, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 38, 362, 32, 34, 362, 40, 362, + 362, 362, 362, 362, 362, 362, 362, 105, 362, 182, + 362, 362, 362, 362, 362, 362, 362, 361, 362, 362, - 361, 361, 361, 361, 361, 361, 233, 230, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 76, 361, 361, - 361, 146, 361, 127, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 164, 51, 361, 361, 361, 352, - 13, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 311, 361, 314, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 12, 361, 361, - 22, 361, 361, 361, 361, 361, 361, 284, 361, 361, - 361, 361, 295, 361, 361, 361, 361, 80, 361, 241, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 234, + 231, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 76, 362, 362, 362, 147, 362, 128, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 165, 51, 362, + 362, 362, 353, 13, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 312, 362, 315, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 12, 362, 362, 22, 362, 362, 362, 362, 362, + 362, 285, 362, 362, 362, 362, 296, 362, 362, 362, - 361, 361, 361, 361, 361, 232, 361, 361, 75, 361, - 361, 361, 361, 361, 361, 23, 361, 361, 47, 361, - 361, 361, 361, 361, 361, 361, 361, 334, 361, 361, - 361, 361, 180, 179, 361, 361, 352, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 234, 228, 361, 246, - 361, 361, 299, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 192, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 87, 361, - 361, 361, 361, 361, 279, 361, 361, 361, 361, 214, + 362, 80, 362, 242, 362, 362, 362, 362, 362, 233, + 362, 362, 75, 362, 362, 362, 362, 362, 362, 23, + 362, 362, 47, 362, 362, 362, 362, 362, 362, 362, + 362, 335, 362, 362, 362, 362, 181, 180, 362, 362, + 353, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 235, 229, 362, 247, 362, 362, 300, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 193, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 87, 362, 362, 362, 362, 362, 280, - 361, 361, 361, 361, 361, 240, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 286, 361, 361, 361, 321, - 322, 177, 361, 361, 361, 81, 361, 361, 361, 361, - 188, 361, 361, 361, 120, 122, 121, 361, 361, 361, - 25, 361, 361, 172, 361, 174, 361, 219, 361, 361, - 361, 361, 178, 361, 361, 361, 361, 249, 361, 361, - 361, 361, 361, 361, 361, 153, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 257, 361, - 361, 361, 361, 361, 361, 361, 330, 361, 27, 361, - 292, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 215, 362, 362, 362, 362, 362, + 241, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 287, 362, 362, 362, 322, 323, 178, 362, 362, 362, + 81, 362, 362, 362, 362, 189, 362, 362, 362, 121, + 123, 122, 362, 362, 362, 25, 362, 362, 173, 362, + 175, 362, 220, 362, 362, 362, 362, 179, 362, 362, + 362, 362, 250, 362, 362, 362, 362, 362, 362, 362, + 154, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 258, 362, 362, 362, 362, 362, 362, + 362, 331, 362, 27, 362, 293, 362, 362, 362, 362, - 361, 361, 361, 361, 361, 361, 361, 91, 220, 361, - 361, 361, 277, 361, 315, 361, 213, 361, 361, 361, - 361, 361, 287, 60, 361, 361, 361, 361, 361, 361, - 4, 361, 361, 361, 361, 135, 361, 152, 361, 361, - 361, 193, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 252, 41, 42, 361, 361, 361, 361, 361, 361, 361, - 300, 361, 361, 361, 361, 361, 361, 361, 265, 361, - 361, 361, 361, 361, 361, 361, 361, 223, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 92, 221, 362, 362, 362, 278, 362, + 316, 362, 214, 362, 362, 362, 362, 362, 288, 60, + 362, 362, 362, 362, 362, 362, 4, 362, 362, 362, + 362, 136, 362, 153, 362, 362, 362, 194, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 253, 41, 42, 362, + 362, 362, 362, 362, 362, 362, 301, 362, 362, 362, + 362, 362, 362, 362, 266, 362, 362, 362, 362, 362, + 362, 362, 362, 224, 362, 362, 362, 362, 362, 362, - 361, 361, 90, 361, 361, 61, 361, 283, 361, 253, - 361, 361, 361, 361, 361, 11, 361, 361, 361, 361, - 361, 361, 361, 361, 134, 361, 361, 361, 361, 361, - 221, 96, 361, 361, 44, 361, 361, 361, 361, 361, - 361, 361, 361, 184, 361, 361, 361, 361, 361, 361, - 361, 155, 361, 361, 361, 361, 256, 361, 361, 361, - 361, 361, 264, 361, 361, 361, 361, 149, 361, 361, - 361, 128, 130, 129, 361, 361, 361, 98, 102, 97, - 165, 361, 361, 361, 361, 88, 361, 285, 361, 361, - 361, 361, 361, 361, 10, 361, 361, 361, 361, 361, + 362, 362, 362, 362, 362, 362, 362, 362, 91, 90, + 362, 362, 61, 362, 284, 362, 254, 362, 362, 362, + 362, 362, 11, 362, 362, 362, 362, 362, 362, 362, + 362, 135, 362, 362, 362, 362, 362, 222, 97, 362, + 362, 44, 362, 362, 362, 362, 362, 362, 362, 362, + 185, 362, 362, 362, 362, 362, 362, 362, 156, 362, + 362, 362, 362, 257, 362, 362, 362, 362, 362, 265, + 362, 362, 362, 362, 150, 362, 362, 362, 129, 131, + 130, 362, 362, 362, 99, 103, 98, 166, 362, 362, + 362, 362, 88, 362, 286, 362, 362, 362, 362, 362, - 281, 324, 361, 361, 361, 361, 361, 361, 329, 43, - 361, 361, 361, 361, 361, 183, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 103, 101, 361, 55, 361, 361, 89, 361, 312, - 361, 361, 361, 361, 24, 361, 361, 361, 361, 361, - 207, 361, 361, 361, 361, 361, 361, 222, 361, 361, - 361, 361, 361, 361, 361, 361, 203, 361, 361, 173, - 83, 361, 361, 361, 361, 361, 301, 361, 361, 361, - 361, 361, 361, 361, 261, 361, 361, 260, 150, 361, + 362, 10, 362, 362, 362, 362, 362, 282, 325, 362, + 362, 362, 362, 362, 362, 330, 43, 362, 362, 362, + 362, 362, 184, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 104, 102, + 362, 55, 362, 362, 89, 362, 313, 362, 362, 362, + 362, 24, 362, 362, 362, 362, 362, 208, 362, 362, + 362, 362, 362, 362, 223, 362, 362, 362, 362, 362, + 362, 362, 362, 204, 362, 362, 174, 83, 362, 362, + 362, 362, 362, 302, 362, 362, 362, 362, 362, 362, - 361, 100, 52, 361, 361, 156, 157, 160, 161, 158, - 159, 92, 310, 361, 361, 282, 138, 361, 361, 361, - 26, 361, 176, 361, 361, 361, 361, 201, 361, 251, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 190, 189, 45, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 308, 361, 361, - 361, 361, 107, 361, 250, 361, 274, 305, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 331, + 362, 262, 362, 362, 261, 151, 362, 362, 101, 52, + 362, 362, 157, 158, 161, 162, 159, 160, 93, 311, + 362, 362, 283, 139, 362, 362, 362, 26, 362, 177, + 362, 362, 362, 362, 202, 362, 252, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 191, 190, + 45, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 309, 362, 362, 362, 362, 108, + 362, 251, 362, 275, 306, 362, 362, 362, 362, 362, - 361, 53, 62, 5, 361, 361, 242, 361, 361, 306, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 262, - 28, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 263, 361, 361, 361, 154, 361, 361, - 361, 361, 361, 361, 361, 361, 191, 361, 200, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 302, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 328, 361, 361, 270, - 361, 361, 361, 361, 361, 303, 361, 361, 361, 361, - 361, 361, 304, 361, 361, 361, 268, 361, 271, 272, + 362, 362, 362, 362, 362, 362, 332, 362, 53, 62, + 5, 362, 362, 243, 362, 362, 307, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 263, 28, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 264, 362, 362, 362, 155, 362, 362, 362, 362, 362, + 362, 362, 362, 192, 362, 201, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 303, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 329, 362, 362, 271, 362, 362, 362, + 362, 362, 304, 362, 362, 362, 362, 362, 362, 305, - 361, 361, 361, 361, 361, 269, 273, 0 + 362, 362, 362, 269, 362, 272, 273, 362, 362, 362, + 362, 362, 270, 274, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -813,17 +814,17 @@ static yyconst flex_int32_t yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[3627] = +static yyconst flex_int16_t yy_base[3634] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3820, 3700, 81, 7041, - 7041, 7041, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 3820, 3700, 81, 7055, + 7055, 7055, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 197, 145, - 185, 199, 208, 213, 178, 123, 3655, 7041, 7041, 7041, - 107, 3541, 7041, 7041, 7041, 154, 2955, 2678, 7041, 7041, - 7041, 245, 2580, 7041, 7041, 7041, 163, 2543, 7041, 249, - 7041, 253, 148, 2396, 1863, 7041, 7041, 7041, 257, 1657, - 7041, 7041, 7041, 233, 1528, 263, 201, 0, 267, 0, + 185, 199, 208, 213, 178, 123, 3655, 7055, 7055, 7055, + 107, 3541, 7055, 7055, 7055, 154, 2955, 2678, 7055, 7055, + 7055, 245, 2580, 7055, 7055, 7055, 163, 2543, 7055, 249, + 7055, 253, 148, 2396, 1863, 7055, 7055, 7055, 257, 1657, + 7055, 7055, 7055, 233, 1528, 263, 201, 0, 267, 0, 0, 165, 191, 221, 252, 205, 181, 265, 92, 261, 216, 263, 271, 272, 259, 279, 274, 282, 280, 286, @@ -848,15 +849,15 @@ static yyconst flex_int16_t yy_base[3627] = 665, 673, 664, 671, 678, 675, 677, 680, 681, 684, 657, 689, 685, 694, 686, 700, 693, 701, 703, 699, - 705, 706, 708, 707, 710, 713, 7041, 723, 714, 724, + 705, 706, 708, 707, 710, 713, 7055, 723, 714, 724, 725, 735, 722, 730, 733, 740, 742, 721, 737, 739, 744, 745, 747, 748, 749, 751, 754, 758, 756, 762, 752, 769, 768, 767, 783, 775, 773, 776, 793, 777, 786, 778, 785, 810, 794, 806, 807, 808, 813, 812, 816, 817, 819, 815, 821, 831, 833, 834, 835, 836, - 837, 838, 846, 842, 7041, 844, 851, 858, 860, 862, + 837, 838, 846, 842, 7055, 844, 851, 858, 860, 862, 863, 869, 871, 841, 875, 878, 880, 877, 893, 915, - 881, 886, 870, 884, 891, 895, 7041, 900, 898, 939, + 881, 886, 870, 884, 891, 895, 7055, 900, 898, 939, 908, 888, 910, 920, 922, 921, 917, 928, 925, 930, 935, 927, 945, 956, 957, 929, 946, 948, 964, 967, @@ -866,16 +867,16 @@ static yyconst flex_int16_t yy_base[3627] = 1020, 1039, 1050, 1021, 1045, 1049, 1057, 1047, 1056, 1063, 1061, 1066, 1067, 1068, 1069, 1077, 1075, 1073, 1078, 1080, 1082, 1083, 1086, 1089, 1090, 1091, 1093, 1095, 1097, 1094, - 1104, 1102, 1110, 1111, 1113, 7041, 1114, 7041, 1116, 1117, - 1118, 1119, 1120, 1121, 1122, 1124, 7041, 1127, 1130, 1123, + 1104, 1102, 1110, 1111, 1113, 7055, 1114, 7055, 1116, 1117, + 1118, 1119, 1120, 1121, 1122, 1124, 7055, 1127, 1130, 1123, 1023, 1138, 1140, 1150, 1129, 1146, 1151, 1152, 1153, 1154, 1156, 1163, 1158, 1161, 1172, 1168, 1170, 1171, 1173, 1176, - 1174, 1177, 1181, 1183, 1184, 1185, 1204, 7041, 1187, 1188, + 1174, 1177, 1181, 1183, 1184, 1185, 1204, 7055, 1187, 1188, 1191, 1196, 1189, 1197, 1195, 1213, 1216, 1214, 1222, 1215, 1219, 1232, 1233, 1235, 1236, 1238, 1240, 1241, 1242, 1244, 1249, 1252, 1245, 1253, 1254, 1256, 1258, 1259, 1262, 1263, - 1266, 1270, 7041, 1265, 1273, 1279, 1278, 1284, 1285, 1286, + 1266, 1270, 7055, 1265, 1273, 1279, 1278, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1293, 210, 1298, 1309, 1316, 1299, 1318, 1302, 1317, 1313, 1315, 1292, 1319, 1323, 1321, 1334, 1325, 1336, 1341, 1349, 1345, 1347, 1354, 1356, 1351, @@ -883,7 +884,7 @@ static yyconst flex_int16_t yy_base[3627] = 1368, 1379, 1371, 1374, 1375, 1376, 1380, 1382, 1384, 1385, 1390, 1386, 1388, 1392, 1402, 1398, 1397, 1407, 1408, 1400, - 1409, 1413, 1416, 1417, 1414, 1420, 7041, 1430, 1423, 1431, + 1409, 1413, 1416, 1417, 1414, 1420, 7055, 1430, 1423, 1431, 1433, 1436, 1439, 1438, 1440, 1444, 1445, 1447, 1446, 1448, 1450, 1454, 1453, 1455, 1457, 1458, 1465, 1470, 1469, 1471, 1481, 1480, 1461, 1482, 1484, 1485, 1486, 1487, 1494, 1490, @@ -897,20 +898,20 @@ static yyconst flex_int16_t yy_base[3627] = 1624, 1625, 1626, 1627, 1632, 1633, 1634, 1636, 1640, 1642, 1638, 1641, 1650, 1651, 1653, 1654, 1644, 1656, 1659, 1667, 1668, 1672, 1666, 1664, 1674, 1676, 1679, 1677, 1681, 1685, - 1688, 1684, 1690, 7041, 1682, 1702, 1692, 1700, 1695, 1697, - 1703, 1711, 1706, 1708, 1709, 1710, 1713, 1736, 7041, 1716, - 7041, 7041, 1717, 7041, 7041, 1719, 1718, 7041, 1720, 1723, + 1688, 1684, 1690, 7055, 1682, 1702, 1692, 1700, 1695, 1697, + 1703, 1711, 1706, 1708, 1709, 1710, 1713, 1736, 7055, 1716, + 7055, 7055, 1717, 7055, 7055, 1719, 1718, 7055, 1720, 1723, 1730, 1737, 1740, 1725, 1746, 1732, 1749, 1750, 1751, 1760, 1772, 1757, 1761, 1759, 1752, 1765, 1762, 1778, 1763, 1775, 1783, 1781, 1785, 1789, 1801, 1797, 1802, 1793, 1806, 1812, 1809, 1815, 1816, 1820, 1805, 1787, 1817, 1822, 1823, 1825, 1824, 1827, 1830, 1833, 1834, 1831, 1829, 1837, 1846, 1848, - 1839, 1856, 7041, 1852, 1860, 1842, 1864, 1862, 1869, 1865, + 1839, 1856, 7055, 1852, 1860, 1842, 1864, 1862, 1869, 1865, 1866, 1870, 1874, 1876, 1871, 1877, 1880, 1882, 1881, 1883, - 1884, 1887, 1890, 1893, 1891, 1897, 1898, 1894, 7041, 1903, + 1884, 1887, 1890, 1893, 1891, 1897, 1898, 1894, 7055, 1903, 1905, 1904, 1910, 1907, 1908, 1917, 1909, 1918, 1920, 1919, - 1927, 1924, 1930, 1925, 1933, 1935, 1934, 1936, 1939, 7041, + 1927, 1924, 1930, 1925, 1933, 1935, 1934, 1936, 1939, 7055, 1945, 1949, 1941, 1946, 1953, 1937, 1955, 1956, 1959, 1960, 1961, 1963, 1964, 1966, 1971, 1968, 1976, 1970, 1972, 1973, @@ -918,708 +919,710 @@ static yyconst flex_int16_t yy_base[3627] = 2003, 2004, 2005, 2007, 2009, 2012, 2017, 2014, 2022, 2018, 2015, 2025, 2036, 2033, 2031, 2020, 2034, 2038, 2040, 2041, 2051, 2053, 2049, 2048, 2050, 2062, 2055, 2058, 2059, 2060, - 2064, 2074, 2069, 2072, 2070, 2078, 2079, 2081, 2083, 7041, - 2085, 2087, 7041, 2090, 2088, 2089, 2111, 2091, 2093, 2098, + 2064, 2074, 2069, 2072, 2070, 2078, 2079, 2081, 2083, 7055, + 2085, 2087, 7055, 2090, 2088, 2089, 2111, 2091, 2093, 2098, 2095, 2096, 2115, 2118, 2112, 2123, 2117, 2130, 2125, 2135, 2136, 2138, 2139, 2143, 2137, 2145, 2141, 2146, 2147, 2158, 2151, 2161, 2170, 2171, 2105, 2172, 2174, 2169, 2173, 2175, 2194, 2176, 2177, 2183, 2178, 2106, 2179, 2181, 2180, 2185, 2186, 2187, 2201, 2204, 2207, 2203, 2209, 2210, 2211, 2216, - 2219, 2221, 2222, 7041, 2230, 2228, 2232, 2233, 2223, 2241, - 2239, 2237, 7041, 2240, 2243, 2245, 2253, 2246, 2248, 2254, - 2250, 2257, 2258, 2260, 2264, 2265, 2262, 2263, 2275, 7041, - 2266, 7041, 2276, 2277, 2279, 2281, 2285, 2283, 2287, 2286, - 2288, 7041, 7041, 2289, 2295, 2305, 2298, 2309, 2307, 2296, - 2308, 7041, 2310, 2318, 7041, 2319, 2322, 2313, 2314, 2315, - 2324, 2328, 2329, 2336, 2332, 2339, 2335, 2338, 2337, 7041, + 2219, 2221, 2222, 7055, 2230, 2228, 2232, 2233, 2223, 2241, + 2239, 2237, 7055, 2240, 2243, 2245, 2253, 2246, 2248, 2254, + 2250, 2257, 2258, 2260, 2264, 2265, 2262, 2263, 2275, 7055, + 2266, 7055, 2276, 2277, 2279, 2281, 2285, 2283, 2287, 2286, + 2288, 7055, 7055, 2289, 2295, 2305, 2298, 2309, 2307, 2296, + 2308, 7055, 2310, 2318, 7055, 2319, 2322, 2313, 2314, 2315, + 2324, 2328, 2329, 2336, 2332, 2339, 2335, 2338, 2337, 7055, 2345, 2353, 2340, 2349, 2355, 2347, 2348, 2359, 2362, 2358, - 7041, 2365, 2366, 2368, 2375, 2373, 2376, 2377, 2378, 2379, + 7055, 2365, 2366, 2368, 2375, 2373, 2376, 2377, 2378, 2379, 2383, 2384, 2386, 2387, 2389, 2394, 2397, 2398, 2399, 2400, - 2413, 2409, 2416, 7041, 2412, 2393, 2408, 2421, 2418, 2420, + 2413, 2409, 2416, 7055, 2412, 2393, 2408, 2421, 2418, 2420, 2422, 2424, 2425, 2426, 2427, 2429, 2434, 2436, 2435, 2438, 2439, 2441, 2448, 2449, 2458, 2450, 2454, 2462, 2445, 2453, - 2457, 2455, 2470, 2463, 2468, 2471, 2472, 7041, 2474, 2476, + 2457, 2455, 2470, 2463, 2468, 2471, 2472, 7055, 2474, 2476, 2478, 2479, 2480, 2482, 171, 2487, 2483, 2488, 2489, 2495, 2492, 2496, 2505, 2509, 2506, 2507, 2148, 2508, 2510, 2511, - 2514, 2515, 2517, 2520, 2518, 2521, 7041, 2529, 2523, 2526, - 2531, 2532, 2534, 2542, 7041, 2535, 2548, 2545, 2552, 2553, + 2514, 2515, 2517, 2520, 2518, 2521, 7055, 2529, 2523, 2526, + 2531, 2532, 2534, 2542, 7055, 2535, 2548, 2545, 2552, 2553, 2541, 2559, 2557, 2563, 2564, 2565, 2566, 2567, 2574, 2572, - 2569, 2571, 2575, 7041, 2587, 2584, 2588, 2578, 2590, 2592, + 2569, 2571, 2575, 7055, 2587, 2584, 2588, 2578, 2590, 2592, 2591, 2597, 2599, 2601, 2603, 2602, 2604, 2607, 2605, 2608, 2609, 2610, 2613, 2631, 2618, 2621, 2623, 2622, 2626, 2630, - 2633, 2634, 2635, 2646, 2636, 7041, 2649, 2639, 2644, 2647, + 2633, 2634, 2635, 2646, 2636, 7055, 2649, 2639, 2644, 2647, 2648, 2651, 2657, 2653, 2670, 2660, 2661, 2663, 2671, 2680, 2673, 2674, 2684, 2690, 2677, 2687, 2698, 2695, 2697, 2704, 2694, 2706, 2708, 2701, 2709, 2716, 2714, 2712, 2717, 2719, 2718, 2726, 2730, 2729, 2731, 2725, 2728, 2740, 2739, 2749, - 2754, 2747, 7041, 2755, 2741, 2743, 2757, 2768, 2760, 2763, + 2754, 2747, 7055, 2755, 2741, 2743, 2757, 2768, 2760, 2763, 2765, 2764, 2771, 2772, 2773, 2774, 2781, 2776, 2782, 2779, 2783, 2784, 2786, 2790, 2795, 2793, 2796, 2798, 2805, 2801, - 2807, 2808, 7041, 2809, 2813, 2814, 2815, 2820, 2817, 2823, + 2807, 2808, 7055, 2809, 2813, 2814, 2815, 2820, 2817, 2823, 2825, 2827, 2828, 2829, 2830, 2835, 2836, 2831, 2838, 2839, - 2846, 2842, 2843, 2853, 2844, 7041, 2854, 2845, 2858, 2861, + 2846, 2842, 2843, 2853, 2844, 7055, 2854, 2845, 2858, 2861, 2863, 2864, 2865, 2867, 2875, 2874, 2880, 2882, 2868, 2885, - 2870, 2883, 2884, 7041, 2895, 2898, 2891, 2894, 2906, 2893, - 2901, 2903, 2905, 2907, 7041, 2908, 2910, 849, 2909, 2911, - 2912, 2921, 2922, 2917, 7041, 2925, 2918, 2926, 2929, 2930, + 2870, 2883, 2884, 7055, 2895, 2898, 2891, 2894, 2906, 2893, + 2901, 2903, 2905, 2907, 7055, 2908, 2910, 849, 2909, 2911, + 2912, 2921, 2922, 2917, 7055, 2925, 2918, 2926, 2929, 2930, 2933, 2934, 2936, 2939, 2940, 2943, 2945, 2954, 2941, 2951, - 7041, 2944, 2968, 2948, 2960, 2970, 2957, 2958, 2972, 2974, + 7055, 2944, 2968, 2948, 2960, 2970, 2957, 2958, 2972, 2974, - 2975, 2981, 2977, 7041, 2986, 2985, 2988, 2998, 2976, 2993, - 2994, 2996, 3000, 3002, 3003, 3004, 3006, 3008, 7041, 3009, + 2975, 2981, 2977, 7055, 2986, 2985, 2988, 2998, 2976, 2993, + 2994, 2996, 3000, 3002, 3003, 3004, 3006, 3008, 7055, 3009, 3013, 3014, 3015, 3018, 3017, 3010, 3026, 3025, 3027, 3030, 3033, 3036, 3038, 3039, 3040, 3034, 3050, 3042, 3044, 3048, 3061, 3052, 3054, 3046, 3068, 3070, 3077, 3059, 3074, 3079, - 3076, 3056, 3080, 3081, 3089, 3090, 3091, 3087, 3092, 7041, + 3076, 3056, 3080, 3081, 3089, 3090, 3091, 3087, 3092, 7055, 3095, 3096, 3097, 3098, 3099, 3103, 3104, 3102, 3107, 3105, 3110, 3115, 3112, 3113, 3128, 3130, 3114, 3135, 3121, 3123, 3137, 3133, 3131, 3139, 3143, 3147, 3144, 3145, 3148, 3157, 3152, 3154, 3162, 3153, 3158, 3163, 3164, 3166, 3155, 3167, 3175, 3178, 3170, 3168, 3176, 3180, 3194, 3197, 3181, 3198, - 3191, 3199, 3200, 3201, 7041, 3205, 3184, 3206, 3209, 3210, + 3191, 3199, 3200, 3201, 7055, 3205, 3184, 3206, 3209, 3210, 3212, 3214, 3222, 3215, 3218, 3233, 3232, 3224, 3234, 3225, - 3217, 3239, 3236, 3246, 3242, 7041, 3243, 7041, 3244, 3247, - 3249, 3257, 3253, 7041, 3255, 7041, 3259, 3264, 3258, 3260, - 3266, 7041, 3267, 3268, 3271, 3269, 3272, 3279, 3275, 3277, + 3217, 3239, 3236, 3246, 3242, 7055, 3243, 7055, 3244, 3247, + 3249, 3257, 3253, 7055, 3255, 7055, 3259, 3264, 3258, 3260, + 3266, 7055, 3267, 3268, 3271, 3269, 3272, 3279, 3275, 3277, 3281, 3283, 3285, 3293, 3294, 3296, 3284, 3286, 3297, 3303, 3306, 3304, 3308, 3309, 3310, 3312, 3316, 3313, 3311, 3319, - 3321, 3328, 3324, 3329, 3330, 3332, 7041, 3339, 3341, 3340, + 3321, 3328, 3324, 3329, 3330, 3332, 7055, 3339, 3341, 3340, 3345, 3336, 3342, 3334, 3346, 3354, 3351, 3355, 3357, 3358, 3359, 3364, 3361, 3367, 3369, 3371, 3375, 3383, 3374, 3387, - 7041, 3382, 3385, 3386, 3391, 7041, 3388, 3390, 3398, 3400, + 7055, 3382, 3385, 3386, 3391, 7055, 3388, 3390, 3398, 3400, 3392, 3395, 3402, 3404, 3408, 3403, 3410, 3411, 3412, 3425, - 3423, 3424, 7041, 3420, 3432, 3416, 3433, 3435, 3426, 3444, + 3423, 3424, 7055, 3420, 3432, 3416, 3433, 3435, 3426, 3444, 3445, 3442, 3448, 3451, 3446, 3453, 3454, 3455, 3456, 3457, 3459, 3466, 3469, 3470, 3471, 3474, 3461, 3478, 3480, 3481, 3472, 3465, 3482, 3487, 3488, 3489, 3491, 3492, 3493, 3494, - 3495, 3496, 3499, 7041, 3500, 3504, 3508, 3517, 3509, 3514, - 3513, 3520, 3519, 7041, 3523, 3524, 3526, 3525, 3527, 3532, - 3535, 3536, 3538, 3539, 3542, 3543, 3546, 3545, 7041, 3551, + 3495, 3496, 3499, 7055, 3500, 3504, 3508, 3517, 3509, 3514, + 3513, 3520, 3519, 7055, 3523, 3524, 3526, 3525, 3527, 3532, + 3535, 3536, 3538, 3539, 3542, 3543, 3546, 3545, 7055, 3551, - 7041, 3552, 3559, 3554, 3564, 3567, 3565, 3569, 3574, 3568, + 7055, 3552, 3559, 3554, 3564, 3567, 3565, 3569, 3574, 3568, 3570, 3575, 3582, 3586, 3576, 3578, 3584, 3587, 3588, 3590, 3598, 3602, 3596, 3604, 3605, 3607, 3608, 3610, 3615, 3611, - 3617, 7041, 7041, 3612, 3613, 3619, 3623, 3621, 3627, 3633, - 3635, 3636, 3638, 3640, 3642, 3651, 7041, 3643, 3649, 3646, + 3617, 7055, 7055, 3612, 3613, 3619, 3623, 3621, 3627, 3633, + 3635, 3636, 3638, 3640, 3642, 3651, 7055, 3643, 3649, 3646, 3653, 3652, 3665, 3654, 3663, 3673, 3669, 3670, 3677, 3675, - 7041, 3676, 3678, 3685, 3680, 3686, 3688, 7041, 3683, 7041, + 7055, 3676, 3678, 3685, 3680, 3686, 3688, 7055, 3683, 7055, 3687, 3690, 3694, 3697, 3698, 3699, 3701, 3702, 3704, 3707, 3710, 3716, 3718, 3725, 3720, 3722, 3727, 3728, 3729, 3730, - 3732, 3733, 3740, 3736, 3738, 3741, 3739, 7041, 3743, 3744, + 3732, 3733, 3740, 3736, 3738, 3741, 3739, 7055, 3743, 3744, - 3751, 3745, 3752, 3760, 3761, 3753, 3759, 7041, 3763, 3767, + 3751, 3745, 3752, 3760, 3761, 3753, 3759, 7055, 3763, 3767, 3768, 3769, 3770, 3778, 3773, 3775, 3779, 3784, 3780, 3786, - 3788, 3789, 7041, 3790, 3791, 3802, 3795, 3797, 3799, 3804, - 3810, 3817, 7041, 3814, 3812, 3824, 3823, 3808, 3825, 3826, + 3788, 3789, 7055, 3790, 3791, 3802, 3795, 3797, 3799, 3804, + 3810, 3817, 7055, 3814, 3812, 3824, 3823, 3808, 3825, 3826, 3828, 3830, 3831, 3832, 3833, 3834, 3835, 3841, 3836, 3837, - 3845, 3840, 3856, 3857, 3843, 3847, 3865, 3855, 7041, 3863, + 3845, 3840, 3856, 3857, 3843, 3847, 3865, 3855, 7055, 3863, 3864, 3866, 3870, 3869, 3871, 3874, 3877, 3881, 3892, 3875, - 3894, 3896, 3882, 3884, 3887, 3899, 3900, 3907, 3906, 7041, + 3894, 3896, 3882, 3884, 3887, 3899, 3900, 3907, 3906, 7055, 3916, 3902, 3917, 3913, 3912, 3919, 3915, 3921, 3923, 3925, 3927, 3926, 3929, 3930, 3931, 3933, 3945, 3936, 3940, 3943, - 3944, 3952, 3951, 7041, 3959, 3954, 3957, 3963, 3956, 3962, + 3944, 3952, 3951, 7055, 3959, 3954, 3957, 3963, 3956, 3962, 3975, 3970, 3966, 3973, 3981, 3974, 3982, 3976, 3984, 3987, - 3990, 3978, 7041, 7041, 3992, 3985, 3993, 7041, 3995, 3997, + 3990, 3978, 7055, 7055, 3992, 3985, 3993, 7055, 3995, 3997, 4005, 4001, 4008, 4003, 4011, 4009, 4012, 4013, 4014, 4019, - 4020, 7041, 4028, 4025, 4029, 4027, 4031, 4040, 4033, 7041, + 4020, 7055, 4028, 4025, 4029, 4027, 4031, 4040, 4033, 7055, 4032, 4043, 4042, 4044, 4046, 4048, 4050, 4053, 4052, 4054, - 4058, 4059, 4060, 4071, 4072, 4062, 4063, 4070, 7041, 4067, - 4073, 4075, 4084, 4077, 4079, 4081, 7041, 4086, 4088, 4093, + 4058, 4059, 4060, 4071, 4072, 4062, 4063, 4070, 7055, 4067, + 4073, 4075, 4084, 4077, 4079, 4081, 7055, 4086, 4088, 4093, 4091, 4099, 4103, 4100, 4106, 4110, 4107, 4111, 4112, 4113, 4114, 4115, 4116, 4126, 4119, 4123, 4124, 4127, 4133, 4141, - 4139, 7041, 4121, 4144, 4145, 4146, 4148, 7041, 4150, 4158, - 4159, 7041, 4162, 4154, 4161, 4163, 4167, 4170, 7041, 4169, + 4139, 7055, 4121, 4144, 4145, 4146, 4148, 7055, 4150, 4158, + 4159, 7055, 4162, 4154, 4161, 4163, 4167, 4170, 7055, 4169, 4168, 4171, 4173, 4176, 4185, 4177, 4188, 4187, 4184, 4189, - 4190, 4192, 7041, 4193, 4191, 4197, 7041, 4208, 4206, 4213, - 4215, 4196, 4200, 4217, 4219, 4220, 4218, 7041, 4225, 7041, - 4228, 4221, 4234, 7041, 4229, 4232, 4237, 4239, 4236, 4243, + 4190, 4192, 7055, 4193, 4191, 4197, 7055, 4208, 4206, 4213, + 4215, 4196, 4200, 4217, 4219, 4220, 4218, 7055, 4225, 7055, + 4228, 4221, 4234, 7055, 4229, 4232, 4237, 4239, 4236, 4243, 4246, 4247, 4253, 4240, 4249, 4254, 4255, 4257, 4259, 4262, - 4263, 4266, 4265, 4268, 7041, 4276, 4267, 4269, 4270, 4271, - 4286, 4280, 4284, 4273, 4290, 4292, 7041, 7041, 4298, 7041, - 4299, 4293, 4300, 4301, 7041, 4303, 4306, 4310, 4307, 4311, + 4263, 4266, 4265, 4268, 7055, 4276, 4267, 4269, 4270, 4271, + 4286, 4280, 4284, 4273, 4290, 4292, 7055, 7055, 4298, 7055, + 4299, 4293, 4300, 4301, 7055, 4303, 4306, 4310, 4307, 4311, - 4313, 4308, 4322, 4319, 7041, 4329, 4330, 7041, 4314, 4332, + 4313, 4308, 4322, 4319, 7055, 4329, 4330, 7055, 4314, 4332, 4339, 4334, 4335, 4323, 4336, 4340, 4343, 4325, 4347, 4349, - 4350, 4351, 4344, 4353, 4358, 7041, 4354, 4355, 4357, 4367, - 4362, 4371, 4372, 4376, 4373, 7041, 4379, 4383, 4382, 4387, - 4388, 7041, 4389, 7041, 4386, 4390, 4394, 4401, 4396, 4408, - 7041, 4405, 4397, 4410, 4412, 4413, 4414, 4417, 4419, 4421, - 4423, 4420, 4431, 4427, 4429, 4433, 4436, 4426, 7041, 4428, - 4437, 4444, 4448, 4446, 4450, 4452, 4459, 4455, 4454, 4458, - 4461, 4463, 4466, 4467, 4470, 4464, 4474, 4475, 7041, 4480, - 4482, 4481, 4485, 4496, 4486, 4488, 4487, 7041, 4489, 4500, + 4350, 4351, 4353, 4354, 4358, 7055, 4355, 4357, 4362, 4367, + 4368, 4370, 4373, 4378, 4371, 7055, 4382, 4392, 4381, 4384, + 4388, 7055, 4393, 7055, 4385, 4396, 4397, 4398, 4401, 4410, + 7055, 4406, 4407, 4412, 4413, 4414, 4415, 4418, 4422, 4416, + 4424, 4425, 4432, 4428, 4430, 4429, 4437, 4438, 7055, 4435, + 4444, 4448, 4449, 4440, 4452, 4453, 4461, 4457, 4463, 4456, + 4460, 4470, 4459, 4477, 4479, 4466, 4481, 4464, 7055, 4483, + 4484, 4488, 4485, 4495, 4491, 4492, 4497, 7055, 4498, 4499, - 4502, 7041, 4503, 4492, 4504, 4509, 4510, 4511, 4514, 4515, - 4517, 4519, 4520, 4518, 7041, 4522, 4524, 4521, 4525, 4538, - 4537, 4526, 7041, 7041, 4539, 7041, 4547, 4527, 4540, 4548, - 4549, 4551, 4552, 4557, 4554, 4565, 4559, 4562, 4567, 4568, - 4569, 7041, 4570, 4578, 4575, 4585, 4586, 4593, 4588, 4590, - 4576, 7041, 7041, 4595, 4599, 4583, 4602, 4603, 4605, 4606, - 4613, 4610, 4608, 4612, 4616, 4626, 7041, 4618, 4619, 4623, - 4628, 7041, 4629, 4630, 4632, 4631, 4633, 4634, 4637, 4636, - 4640, 4641, 4643, 4647, 4644, 4657, 4649, 4650, 4660, 4658, - 4661, 4664, 4666, 4665, 4672, 7041, 4673, 4668, 4674, 4675, + 4500, 7055, 4502, 4507, 4508, 4512, 4513, 4514, 4516, 4519, + 4518, 4522, 4523, 4520, 7055, 4521, 4528, 4524, 4537, 4541, + 4530, 4529, 7055, 7055, 4545, 7055, 4548, 4526, 4550, 4552, + 4553, 4557, 4558, 4556, 4559, 4561, 4562, 4563, 4569, 4571, + 4572, 7055, 4574, 4581, 4577, 4589, 4590, 4592, 4591, 4579, + 4595, 7055, 7055, 4597, 4601, 4598, 4604, 4605, 4600, 4608, + 4617, 4609, 4618, 4621, 4623, 4630, 7055, 4625, 4613, 4631, + 4622, 7055, 4632, 4634, 4636, 4637, 4638, 4640, 4644, 4641, + 4645, 4646, 4648, 4649, 4651, 4662, 4654, 4655, 4656, 4663, + 4664, 4665, 4669, 4671, 4677, 7055, 4678, 4673, 4679, 4680, - 4677, 4198, 4682, 4684, 4685, 4686, 4695, 7041, 4688, 7041, - 4691, 4692, 4690, 4708, 4698, 4712, 4709, 4699, 4713, 4715, - 4717, 4719, 4722, 4723, 4728, 4716, 4724, 4732, 4734, 4736, - 4739, 4741, 4742, 7041, 4744, 4743, 4746, 4750, 4752, 4754, - 4755, 4757, 4758, 4760, 4764, 4765, 4768, 4772, 4761, 4769, - 4773, 4777, 4780, 7041, 4781, 4783, 4784, 4788, 4789, 4792, - 4794, 4793, 4801, 4805, 4795, 4798, 4806, 7041, 4809, 4810, - 4812, 7041, 4815, 4816, 4818, 4819, 4821, 4823, 4820, 4827, - 4828, 4830, 7041, 4837, 4826, 4833, 4838, 4842, 4844, 4848, - 4847, 4849, 4855, 4851, 4854, 7041, 4865, 4856, 4861, 4870, + 4684, 4198, 4685, 4687, 4688, 4690, 4697, 7055, 4694, 7055, + 4693, 4696, 4695, 4703, 4702, 4713, 4714, 4715, 4716, 4717, + 4720, 4723, 4724, 4727, 4728, 4732, 4733, 4737, 4738, 4742, + 4735, 4746, 4752, 4749, 7055, 4753, 4740, 4755, 4756, 4762, + 4764, 4757, 4766, 4759, 4770, 4767, 4773, 4772, 4780, 4774, + 4781, 4783, 4784, 4785, 7055, 4786, 4793, 4787, 4795, 4789, + 4796, 4797, 4799, 4808, 4811, 4812, 4805, 4813, 7055, 4814, + 4816, 4818, 7055, 4819, 4821, 4822, 4823, 4826, 4828, 4825, + 4832, 4833, 4834, 7055, 4841, 4842, 4843, 4846, 4847, 4851, + 4852, 4853, 4854, 4857, 4856, 4868, 7055, 4870, 4861, 4872, - 4858, 4867, 4869, 4871, 4877, 7041, 4879, 4881, 4882, 4878, - 4891, 4894, 4889, 4892, 4901, 4897, 4899, 4896, 4898, 4905, - 4900, 4906, 4909, 4913, 4914, 4912, 4925, 4930, 4927, 4929, - 7041, 4916, 7041, 4917, 4931, 4934, 4944, 4941, 4939, 4945, - 4947, 4943, 7041, 4951, 4953, 4955, 4949, 4957, 7041, 4956, - 4958, 4960, 4959, 7041, 4970, 4972, 4961, 4976, 4979, 4982, - 7041, 4985, 4986, 4987, 4996, 4997, 4993, 4995, 4998, 4999, - 5001, 5003, 5004, 5005, 5014, 5007, 5010, 7041, 5016, 5019, - 5025, 5026, 5027, 5009, 5028, 5029, 5030, 5036, 5033, 7041, - 5038, 5039, 5040, 5041, 5042, 5044, 5045, 5047, 5057, 5058, + 4875, 4859, 4863, 4874, 4878, 4881, 7055, 4882, 4885, 4889, + 4891, 4898, 4899, 4896, 4897, 4908, 4900, 4904, 4901, 4903, + 4910, 4911, 4914, 4915, 4918, 4919, 4920, 4935, 4936, 4932, + 4921, 7055, 4922, 7055, 4933, 4938, 4939, 4949, 4945, 4941, + 4951, 4955, 4944, 7055, 4956, 4957, 4959, 4948, 4961, 7055, + 4962, 4965, 4967, 4968, 7055, 4975, 4971, 4969, 4979, 4984, + 4985, 7055, 4988, 4990, 4992, 5000, 5001, 4996, 4999, 5002, + 5003, 5006, 5007, 5008, 5009, 5017, 5012, 5014, 7055, 5020, + 5022, 5029, 5030, 5031, 5023, 5033, 5034, 5037, 5039, 5040, + 7055, 5043, 5044, 5045, 5046, 5047, 5051, 5049, 5052, 5056, - 5053, 4962, 5050, 5055, 5062, 5063, 5071, 7041, 5066, 5072, - 5068, 5081, 5077, 5080, 7041, 5083, 7041, 5076, 5086, 5091, - 5093, 5079, 5097, 7041, 7041, 5095, 5106, 5089, 5103, 5104, - 7041, 7041, 5108, 7041, 5109, 7041, 5110, 5112, 7041, 7041, - 5111, 5114, 5115, 5117, 5118, 5120, 7041, 5126, 7041, 5135, - 5121, 5130, 5132, 5133, 5134, 7041, 5137, 5142, 5138, 5146, - 5144, 7041, 5151, 5147, 5163, 5149, 5154, 7041, 5162, 5165, - 5152, 5159, 7041, 5172, 5175, 5176, 5164, 5170, 5178, 5180, - 5184, 5183, 5187, 5188, 5189, 5190, 5192, 5193, 5196, 5203, - 5205, 5207, 5199, 5208, 5209, 5215, 5217, 5219, 5213, 5221, + 5062, 5058, 5060, 5063, 5067, 5070, 5071, 5073, 7055, 5076, + 5074, 5079, 5083, 5087, 5085, 5013, 7055, 5080, 7055, 5091, + 5094, 5096, 5097, 5098, 5101, 7055, 7055, 5103, 5110, 5106, + 5109, 5111, 7055, 7055, 5113, 7055, 5114, 7055, 5115, 5117, + 7055, 7055, 5116, 5119, 5122, 5123, 5125, 5127, 7055, 5135, + 7055, 5137, 5136, 5138, 5141, 5140, 5142, 7055, 5144, 5146, + 5148, 5152, 5151, 7055, 5158, 5153, 5161, 5154, 5165, 7055, + 5169, 5170, 5166, 5171, 7055, 5174, 5177, 5178, 5179, 5181, + 5182, 5186, 5192, 5184, 5187, 5188, 5199, 5193, 5196, 5202, + 5206, 5209, 5211, 5215, 5212, 5203, 5217, 5218, 5225, 5227, - 5222, 5223, 5224, 5228, 5230, 5227, 5232, 5236, 5237, 5239, - 5240, 5242, 5247, 5233, 5250, 5251, 5254, 5256, 5258, 5260, - 5262, 5263, 5264, 5265, 5266, 5267, 5270, 5277, 5268, 5272, - 5276, 5282, 5283, 7041, 5286, 5287, 5288, 5291, 5293, 5295, - 5296, 5303, 5306, 5312, 7041, 5314, 7041, 5316, 5308, 5299, - 5318, 5319, 7041, 5320, 5321, 5322, 5323, 5324, 5325, 5327, - 5328, 5331, 5332, 5335, 7041, 5338, 5347, 5341, 5330, 5351, - 5354, 7041, 5356, 5358, 5359, 5361, 5362, 5363, 5366, 5364, - 5367, 5368, 5369, 5371, 5373, 5375, 5376, 5383, 5386, 7041, - 5390, 5394, 5397, 5387, 5395, 5398, 5399, 5402, 5400, 5403, + 5220, 5223, 5229, 5230, 5231, 5233, 5235, 5236, 5238, 5240, + 5242, 5245, 5246, 5247, 5248, 5251, 5256, 5257, 5259, 5262, + 5264, 5265, 5267, 5268, 5269, 5270, 5272, 5273, 5275, 5276, + 5280, 5284, 5282, 5286, 5288, 7055, 5290, 5293, 5295, 5299, + 5298, 5300, 5304, 5307, 5311, 5313, 7055, 5316, 7055, 5319, + 5321, 5322, 5323, 5325, 7055, 5324, 5327, 5326, 5329, 5328, + 5330, 5332, 5331, 5335, 5336, 5346, 7055, 5352, 5358, 5341, + 5338, 5359, 5362, 7055, 5363, 5365, 5366, 5367, 5369, 5370, + 5371, 5373, 5374, 5378, 5376, 5375, 5380, 5389, 5381, 5390, + 5393, 7055, 5397, 5403, 5404, 5400, 5405, 5406, 5407, 5410, - 5404, 5406, 5416, 5409, 5419, 5423, 7041, 5412, 7041, 5425, - 5426, 5415, 5428, 5430, 5432, 5429, 5433, 7041, 7041, 5436, - 5439, 5438, 5443, 5440, 5444, 5447, 5450, 5451, 5454, 7041, - 5453, 5459, 5460, 5470, 5463, 7041, 5467, 5471, 5472, 5474, - 7041, 5475, 5477, 5479, 5480, 5485, 5478, 5489, 5490, 5493, - 5494, 5496, 5498, 5500, 7041, 7041, 7041, 7041, 5503, 5501, - 5506, 5507, 5509, 5511, 5512, 5516, 5517, 5514, 5515, 5519, - 7041, 5528, 7041, 7041, 5531, 7041, 5532, 5529, 5533, 5539, - 5530, 5541, 5540, 5545, 7041, 5542, 7041, 5546, 5553, 5552, - 5555, 5560, 5556, 5562, 5564, 5565, 5566, 5568, 5569, 5576, + 5409, 5411, 5416, 5412, 5415, 5417, 5429, 5433, 5437, 7055, + 5422, 7055, 5425, 5430, 5438, 5439, 5440, 5442, 5443, 5446, + 7055, 7055, 5444, 5448, 5451, 5453, 5455, 5456, 5458, 5460, + 5461, 5468, 7055, 5462, 5467, 5475, 5481, 5469, 7055, 5478, + 5483, 5484, 5486, 7055, 5487, 5488, 5490, 5491, 5496, 5489, + 5501, 5502, 5505, 5506, 5498, 5509, 5512, 7055, 7055, 7055, + 7055, 5515, 5513, 5518, 5519, 5520, 5521, 5527, 5528, 5530, + 5524, 5525, 5526, 7055, 5543, 7055, 7055, 5544, 7055, 5546, + 5538, 5548, 5547, 5531, 5554, 5556, 5558, 7055, 5559, 7055, + 5560, 5561, 5562, 5568, 5570, 5571, 5572, 5579, 5573, 5581, - 5573, 5574, 5577, 5579, 5583, 5589, 7041, 7041, 5580, 5591, - 5594, 5601, 5598, 5599, 5596, 5608, 5605, 5606, 5607, 5612, - 5613, 5614, 5623, 5624, 5615, 5619, 5626, 7041, 5622, 5628, - 5634, 7041, 5630, 7041, 5636, 5638, 5639, 5632, 5640, 5645, - 5646, 5647, 5649, 5651, 7041, 7041, 5652, 5663, 5659, 7041, - 7041, 5660, 5661, 5664, 5667, 5662, 5668, 5671, 5673, 5674, - 5676, 5672, 7041, 5677, 7041, 5678, 5682, 5685, 5690, 5699, - 5700, 5695, 5702, 5704, 5697, 5701, 5706, 7041, 5707, 5708, - 7041, 5718, 5714, 5719, 5710, 5728, 5720, 7041, 5729, 5722, - 5732, 5734, 7041, 5737, 5738, 5739, 5741, 7041, 5746, 7041, + 5575, 5582, 5589, 5585, 5587, 5584, 5592, 5595, 5602, 7055, + 7055, 5596, 5604, 5605, 5612, 5610, 5613, 5607, 5620, 5619, + 5617, 5616, 5624, 5626, 5627, 5635, 5636, 5628, 5631, 5638, + 7055, 5640, 5641, 5642, 7055, 5632, 7055, 5649, 5650, 5651, + 5652, 5653, 5658, 5659, 5660, 5662, 5664, 7055, 7055, 5657, + 5678, 5673, 7055, 7055, 5663, 5665, 5674, 5676, 5681, 5677, + 5683, 5687, 5686, 5688, 5690, 5691, 7055, 5692, 7055, 5693, + 5700, 5698, 5699, 5711, 5712, 5708, 5715, 5717, 5714, 5718, + 5720, 7055, 5719, 5721, 7055, 5729, 5727, 5731, 5732, 5737, + 5733, 7055, 5738, 5740, 5742, 5745, 7055, 5750, 5747, 5752, - 5743, 5747, 5748, 5755, 5753, 7041, 5751, 5756, 7041, 5759, - 5762, 5767, 5769, 5764, 5768, 7041, 5774, 5770, 7041, 5775, - 5779, 5782, 5785, 5776, 5787, 5780, 5789, 7041, 5790, 5798, - 5797, 5799, 7041, 7041, 5800, 5801, 135, 5811, 5802, 5808, - 5809, 5812, 5819, 5814, 5816, 5822, 7041, 7041, 5826, 7041, - 5815, 5824, 7041, 5817, 5830, 5834, 5832, 5836, 5837, 5838, - 5840, 5844, 5845, 5853, 5846, 5847, 5857, 7041, 5868, 5875, - 5851, 5872, 5876, 5878, 5880, 5882, 5884, 5709, 5886, 5873, - 5861, 5888, 5889, 5890, 5892, 5895, 5896, 5898, 7041, 5900, - 5906, 5907, 5908, 5901, 7041, 5912, 5913, 5922, 5923, 7041, + 5753, 7055, 5755, 7055, 5756, 5759, 5760, 5767, 5763, 7055, + 5765, 5768, 7055, 5771, 5774, 5778, 5779, 5780, 5781, 7055, + 5784, 5786, 7055, 5787, 5789, 5790, 5796, 5797, 5799, 5792, + 5800, 7055, 5801, 5808, 5810, 5813, 7055, 7055, 5820, 5806, + 135, 5822, 5803, 5819, 5823, 5824, 5831, 5827, 5828, 5834, + 7055, 7055, 5835, 7055, 5829, 5838, 7055, 5836, 5842, 5846, + 5848, 5844, 5850, 5851, 5853, 5855, 5856, 5869, 5859, 5857, + 5874, 7055, 5864, 5884, 5860, 5886, 5887, 5889, 5891, 5893, + 5895, 5881, 5898, 5899, 5875, 5900, 5902, 5904, 5905, 5906, + 5908, 5909, 5911, 7055, 5913, 5917, 5918, 5920, 5922, 7055, - 5925, 5917, 5927, 5929, 5930, 7041, 5915, 5932, 5935, 5848, - 5937, 5940, 5941, 5942, 5949, 7041, 5945, 5944, 5947, 7041, - 7041, 7041, 5950, 5961, 5954, 7041, 5963, 5956, 5964, 5965, - 7041, 5967, 5969, 5972, 7041, 7041, 7041, 5971, 5974, 5973, - 7041, 5975, 5986, 7041, 5976, 7041, 5977, 7041, 5985, 5987, - 5993, 5991, 7041, 5997, 5999, 6001, 6003, 7041, 6006, 6009, - 6011, 6013, 6014, 6016, 6018, 7041, 6025, 6021, 6024, 6028, - 6020, 6030, 6031, 6032, 6033, 6045, 6036, 6041, 7041, 6043, - 6044, 6048, 6054, 6046, 6056, 6057, 7041, 6050, 7041, 6059, - 7041, 6060, 6062, 6063, 6064, 6069, 6066, 6067, 6077, 6074, + 5925, 5927, 5933, 5930, 7055, 5937, 5938, 5939, 5941, 5942, + 7055, 5943, 5945, 5953, 5954, 5946, 5949, 5956, 5862, 5963, + 7055, 5959, 5960, 5966, 7055, 7055, 7055, 5971, 5965, 5973, + 7055, 5975, 5977, 5978, 5979, 7055, 5981, 5983, 5982, 7055, + 7055, 7055, 5984, 5985, 5986, 7055, 5988, 5999, 7055, 5989, + 7055, 5996, 7055, 6000, 6002, 6010, 6004, 7055, 6014, 6012, + 6006, 6022, 7055, 6016, 6028, 6030, 6024, 5998, 6021, 6031, + 7055, 6038, 6034, 6037, 6044, 6035, 6045, 6041, 6046, 6047, + 6054, 6049, 6056, 7055, 6059, 6061, 6064, 6067, 6052, 6058, + 6060, 7055, 6050, 7055, 6077, 7055, 6072, 6078, 6079, 6080, - 6080, 6083, 6081, 6087, 6088, 6092, 6089, 7041, 7041, 6099, - 6095, 6097, 7041, 6094, 7041, 6103, 7041, 6104, 6106, 6107, - 6109, 6111, 7041, 7041, 6118, 6110, 6119, 6127, 6113, 6123, - 7041, 6131, 6124, 6126, 6134, 7041, 6135, 7041, 6137, 6146, - 6139, 7041, 6141, 6148, 6150, 6143, 6151, 6153, 6154, 6155, - 6156, 6166, 6159, 6161, 6162, 6168, 6169, 6174, 6180, 6185, - 7041, 7041, 7041, 6175, 6170, 6194, 6192, 6193, 6195, 6179, - 7041, 6198, 6200, 6201, 6202, 6210, 6205, 6208, 7041, 6212, - 6209, 6211, 6213, 6215, 6216, 6217, 6219, 7041, 6230, 6232, - 6238, 6220, 6234, 6239, 6241, 6243, 6246, 6250, 6247, 6251, + 6081, 6082, 6083, 6086, 6088, 6087, 6095, 6097, 6099, 6089, + 6101, 6104, 6105, 7055, 7055, 6114, 6110, 6112, 7055, 6109, + 7055, 6119, 7055, 6120, 6121, 6122, 6123, 6126, 7055, 7055, + 6129, 6125, 6132, 6140, 6133, 6135, 7055, 6142, 6138, 6144, + 6147, 7055, 6155, 7055, 6148, 6157, 6153, 7055, 6150, 6160, + 6162, 6164, 6165, 6167, 6169, 6173, 6170, 6177, 6174, 6175, + 6176, 6184, 6188, 6178, 6189, 6194, 7055, 7055, 7055, 6197, + 6191, 6204, 6200, 6202, 6207, 6206, 7055, 6208, 6215, 6212, + 6210, 6222, 6218, 6220, 7055, 6221, 6223, 6225, 6226, 6228, + 6230, 6231, 6234, 7055, 6238, 6245, 6252, 6248, 6232, 6254, - 6258, 6254, 7041, 6256, 6253, 7041, 6262, 7041, 6257, 7041, - 6263, 6264, 6265, 6266, 6267, 7041, 6271, 6272, 6273, 6275, - 6274, 6278, 6280, 6282, 7041, 6283, 6296, 6291, 6293, 6295, - 7041, 7041, 6297, 6303, 7041, 6305, 6308, 6306, 6315, 6307, - 6314, 6317, 6321, 7041, 6323, 6324, 6310, 6325, 6328, 6331, - 6332, 7041, 6334, 6335, 6336, 6337, 7041, 6340, 6339, 6344, - 6346, 6347, 7041, 6348, 6349, 6365, 6363, 7041, 6350, 6371, - 6351, 7041, 7041, 7041, 6373, 6376, 6377, 7041, 7041, 7041, - 7041, 6379, 6380, 6341, 6383, 7041, 6384, 7041, 6387, 6391, - 6395, 6397, 6403, 6390, 7041, 6402, 6404, 6406, 6398, 6408, + 6256, 6258, 6261, 6263, 6264, 6240, 6271, 6267, 7055, 7055, + 6269, 6270, 7055, 6274, 7055, 6275, 7055, 6276, 6278, 6280, + 6279, 6281, 7055, 6284, 6285, 6287, 6288, 6289, 6295, 6291, + 6293, 7055, 6296, 6303, 6305, 6307, 6308, 7055, 7055, 6310, + 6316, 7055, 6318, 6319, 6320, 6327, 6323, 6322, 6329, 6332, + 7055, 6336, 6333, 6339, 6341, 6342, 6343, 6344, 7055, 6345, + 6346, 6348, 6349, 7055, 6352, 6351, 6354, 6356, 6357, 7055, + 6358, 6360, 6379, 6376, 7055, 6364, 6375, 6374, 7055, 7055, + 7055, 6383, 6386, 6388, 7055, 7055, 7055, 7055, 6390, 6391, + 6393, 6395, 7055, 6398, 7055, 6400, 6404, 6408, 6410, 6417, - 7041, 7041, 6409, 6411, 6412, 6414, 6418, 6415, 7041, 7041, - 6420, 6421, 6423, 6424, 6425, 7041, 6426, 6429, 6437, 6430, - 6441, 6447, 6449, 6438, 6450, 6451, 6458, 6462, 6443, 6454, - 6459, 6461, 6465, 6464, 6472, 6473, 6475, 6477, 6479, 6474, - 6482, 7041, 7041, 6485, 7041, 6491, 6486, 7041, 6488, 7041, - 6493, 6497, 6499, 6501, 7041, 6503, 6505, 6508, 6510, 6494, - 7041, 6512, 6514, 6516, 6517, 6511, 6518, 7041, 6525, 6522, - 6528, 6519, 6529, 6531, 6532, 6536, 7041, 6530, 6540, 7041, - 7041, 6537, 6544, 6546, 6548, 6550, 7041, 6551, 6558, 6553, - 6556, 6557, 6559, 6562, 7041, 6560, 6564, 7041, 7041, 6565, + 6403, 7055, 6411, 6418, 6420, 6421, 6422, 7055, 7055, 6423, + 6425, 6426, 6428, 6430, 6431, 7055, 7055, 6432, 6434, 6438, + 6435, 6437, 7055, 6440, 6443, 6450, 6447, 6453, 6460, 6462, + 6455, 6463, 6464, 6472, 6475, 6465, 6467, 6474, 6478, 6479, + 6477, 6481, 6491, 6486, 6488, 6494, 6489, 6497, 7055, 7055, + 6499, 7055, 6501, 6503, 7055, 6505, 7055, 6507, 6509, 6511, + 6514, 7055, 6516, 6518, 6520, 6522, 6524, 7055, 6525, 6527, + 6529, 6530, 6531, 6532, 7055, 6536, 6537, 6541, 6533, 6538, + 6542, 6544, 6547, 7055, 6549, 6558, 7055, 7055, 6553, 6559, + 6555, 6560, 6565, 7055, 6563, 6573, 6568, 6569, 6570, 6572, - 6570, 7041, 7041, 6563, 6571, 7041, 7041, 7041, 7041, 7041, - 7041, 7041, 7041, 6574, 6580, 7041, 7041, 6575, 6582, 6587, - 7041, 6593, 7041, 6584, 6590, 6594, 6595, 7041, 6596, 7041, - 6597, 6600, 6601, 6602, 6603, 6608, 6612, 6605, 6613, 6614, - 6616, 6617, 6619, 6621, 6622, 6623, 6629, 6626, 6636, 6637, - 6638, 7041, 7041, 7041, 6639, 6640, 6647, 6642, 6649, 6654, - 6659, 6662, 6650, 6652, 6663, 6665, 6668, 6656, 6664, 6677, - 6674, 6675, 6678, 6685, 6676, 6690, 6692, 7041, 6694, 6667, - 6680, 6698, 7041, 6686, 7041, 6695, 7041, 7041, 6703, 6704, - 6700, 6706, 6715, 6716, 6707, 6711, 6712, 6714, 6718, 7041, + 6575, 7055, 6578, 6576, 7055, 7055, 6588, 6579, 7055, 7055, + 6577, 6580, 7055, 7055, 7055, 7055, 7055, 7055, 7055, 7055, + 6593, 6596, 7055, 7055, 6595, 6587, 6602, 7055, 6605, 7055, + 6597, 6606, 6607, 6609, 7055, 6610, 7055, 6612, 6614, 6613, + 6617, 6616, 6621, 6623, 6626, 6628, 6627, 6630, 6632, 6633, + 6637, 6634, 6638, 6648, 6641, 6651, 6644, 6652, 7055, 7055, + 7055, 6640, 6656, 6662, 6658, 6666, 6668, 6671, 6673, 6663, + 6674, 6675, 6679, 6680, 6677, 6681, 6689, 6686, 6687, 6688, + 6691, 6692, 6698, 6704, 7055, 6706, 6695, 6701, 6708, 7055, + 6709, 7055, 6711, 7055, 7055, 6714, 6715, 6717, 6718, 6727, - 6723, 7041, 7041, 7041, 6720, 6726, 7041, 6728, 6729, 7041, - 6727, 6730, 6732, 6736, 6737, 6734, 6738, 6739, 6755, 7041, - 7041, 6740, 6745, 6748, 6757, 6759, 6758, 6761, 6765, 6766, - 6768, 6769, 6778, 7041, 6775, 6776, 6780, 7041, 6782, 6777, - 6783, 6784, 6785, 6793, 6789, 6792, 7041, 6794, 7041, 6798, - 6800, 6801, 6791, 6799, 6802, 6813, 6811, 6807, 7041, 6817, - 6821, 6819, 6823, 6825, 6827, 6828, 6829, 6831, 6834, 6840, - 6837, 6844, 6845, 6841, 6849, 6846, 7041, 6856, 6847, 7041, - 6853, 6857, 6850, 6859, 6863, 7041, 6868, 6861, 6870, 6871, - 6874, 6875, 7041, 6877, 6884, 6879, 7041, 6885, 7041, 7041, + 6728, 6719, 6723, 6726, 6730, 6732, 7055, 6739, 7055, 7055, + 7055, 6734, 6740, 7055, 6742, 6743, 7055, 6741, 6744, 6746, + 6750, 6751, 6748, 6752, 6753, 6769, 7055, 7055, 6754, 6759, + 6762, 6771, 6773, 6772, 6775, 6779, 6780, 6782, 6783, 6792, + 7055, 6789, 6790, 6794, 7055, 6796, 6791, 6797, 6798, 6799, + 6807, 6803, 6806, 7055, 6808, 7055, 6812, 6814, 6815, 6805, + 6813, 6816, 6827, 6825, 6821, 7055, 6831, 6835, 6833, 6837, + 6839, 6841, 6842, 6843, 6845, 6848, 6854, 6851, 6858, 6859, + 6855, 6863, 6860, 7055, 6870, 6861, 7055, 6867, 6871, 6864, + 6873, 6877, 7055, 6882, 6875, 6884, 6885, 6888, 6889, 7055, - 6887, 6881, 6888, 6894, 6896, 7041, 7041, 7041, 6921, 6928, - 6935, 6942, 6949, 6956, 6963, 88, 6970, 6977, 6984, 6991, - 6998, 7005, 7012, 7019, 7026, 7033 + 6891, 6898, 6893, 7055, 6899, 7055, 7055, 6901, 6895, 6902, + 6908, 6910, 7055, 7055, 7055, 6935, 6942, 6949, 6956, 6963, + 6970, 6977, 88, 6984, 6991, 6998, 7005, 7012, 7019, 7026, + 7033, 7040, 7047 } ; -static yyconst flex_int16_t yy_def[3627] = +static yyconst flex_int16_t yy_def[3634] = { 0, - 3608, 1, 3609, 3609, 3610, 3610, 3611, 3611, 3612, 3612, - 3613, 3613, 3614, 3614, 3615, 3615, 3608, 3616, 3608, 3608, - 3608, 3608, 3617, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3618, 3608, 3608, 3608, - 3618, 3619, 3608, 3608, 3608, 3619, 3620, 3608, 3608, 3608, - 3608, 3620, 3621, 3608, 3608, 3608, 3621, 3622, 3608, 3623, - 3608, 3622, 3622, 3624, 3608, 3608, 3608, 3608, 3624, 3625, - 3608, 3608, 3608, 3625, 3616, 3616, 3608, 3626, 3617, 3626, - 3617, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3615, 1, 3616, 3616, 3617, 3617, 3618, 3618, 3619, 3619, + 3620, 3620, 3621, 3621, 3622, 3622, 3615, 3623, 3615, 3615, + 3615, 3615, 3624, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3625, 3615, 3615, 3615, + 3625, 3626, 3615, 3615, 3615, 3626, 3627, 3615, 3615, 3615, + 3615, 3627, 3628, 3615, 3615, 3615, 3628, 3629, 3615, 3630, + 3615, 3629, 3629, 3631, 3615, 3615, 3615, 3615, 3631, 3632, + 3615, 3615, 3615, 3632, 3623, 3623, 3615, 3633, 3624, 3633, + 3624, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3618, 3618, 3619, 3619, 3620, 3620, 3608, 3621, 3621, 3622, - 3622, 3623, 3623, 3622, 3624, 3624, 3608, 3625, 3625, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3625, 3625, 3626, 3626, 3627, 3627, 3615, 3628, 3628, 3629, + 3629, 3630, 3630, 3629, 3631, 3631, 3615, 3632, 3632, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3622, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3629, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3622, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3629, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3622, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3629, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3622, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3608, 3608, 3616, 3608, 3608, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3629, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3615, 3615, 3623, 3615, 3615, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3622, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3629, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3622, 3622, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3629, 3629, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3622, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3629, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3622, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3629, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3622, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3629, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3608, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3615, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3622, 3616, 3608, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3608, 3616, 3608, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3629, 3623, 3615, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, 3615, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3608, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3622, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3615, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3629, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3622, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3629, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3608, 3616, 3616, 3616, 3616, 3616, - 3608, 3608, 3616, 3608, 3616, 3608, 3616, 3616, 3608, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, 3623, 3623, + 3623, 3623, 3615, 3615, 3623, 3615, 3623, 3615, 3623, 3623, + 3615, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3622, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3629, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3608, 3608, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3608, 3608, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3622, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3615, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3615, 3615, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3629, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3608, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3608, 3616, 3616, 3616, 3608, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3608, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3615, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, + 3623, 3623, 3615, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3608, 3608, 3616, 3616, 3622, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3608, 3616, 3608, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3608, + 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3615, 3615, 3623, 3623, + 3629, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3615, 3623, 3615, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3608, - 3608, 3608, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3608, 3608, 3608, 3616, 3616, 3616, - 3608, 3616, 3616, 3608, 3616, 3608, 3616, 3608, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3615, 3615, 3615, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3615, + 3615, 3615, 3623, 3623, 3623, 3615, 3623, 3623, 3615, 3623, + 3615, 3623, 3615, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3608, 3616, - 3616, 3616, 3608, 3616, 3608, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3615, 3623, 3623, 3623, 3615, 3623, + 3615, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, 3615, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3616, 3608, 3616, 3616, 3608, 3616, 3608, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3608, 3608, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3608, 3608, 3608, 3616, 3616, 3616, 3608, 3608, 3608, - 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, + 3623, 3623, 3615, 3623, 3615, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3615, 3615, + 3615, 3623, 3623, 3623, 3615, 3615, 3615, 3615, 3623, 3623, + 3623, 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, 3623, - 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3608, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3608, 3616, 3608, 3616, 3616, 3608, 3616, 3608, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, 3616, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3608, - 3608, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3608, 3608, 3616, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, + 3623, 3615, 3623, 3623, 3615, 3623, 3615, 3623, 3623, 3623, + 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3615, 3615, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, - 3616, 3608, 3608, 3616, 3616, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3616, 3616, 3608, 3608, 3616, 3616, 3616, - 3608, 3616, 3608, 3616, 3616, 3616, 3616, 3608, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3608, 3608, 3608, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3608, 3616, 3608, 3616, 3608, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, + 3623, 3615, 3623, 3623, 3615, 3615, 3623, 3623, 3615, 3615, + 3623, 3623, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3623, 3623, 3615, 3615, 3623, 3623, 3623, 3615, 3623, 3615, + 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, + 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3615, + 3623, 3615, 3623, 3615, 3615, 3623, 3623, 3623, 3623, 3623, - 3616, 3608, 3608, 3608, 3616, 3616, 3608, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, - 3608, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3608, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, 3616, - 3616, 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3608, - 3616, 3616, 3616, 3616, 3616, 3608, 3616, 3616, 3616, 3616, - 3616, 3616, 3608, 3616, 3616, 3616, 3608, 3616, 3608, 3608, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3615, 3615, + 3615, 3623, 3623, 3615, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3615, 3615, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3615, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3615, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, 3623, + 3623, 3623, 3623, 3615, 3623, 3623, 3615, 3623, 3623, 3623, + 3623, 3623, 3615, 3623, 3623, 3623, 3623, 3623, 3623, 3615, - 3616, 3616, 3616, 3616, 3616, 3608, 3608, 0, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608 + 3623, 3623, 3623, 3615, 3623, 3615, 3615, 3623, 3623, 3623, + 3623, 3623, 3615, 3615, 0, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615 } ; -static yyconst flex_int16_t yy_nxt[7082] = +static yyconst flex_int16_t yy_nxt[7096] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -2040,14 +2043,14 @@ static yyconst flex_int16_t yy_nxt[7082] = 2033, 86, 86, 86, 2031, 2027, 2037, 86, 2032, 86, 2035, 86, 86, 86, 86, 2034, 2039, 2038, 86, 2044, - 86, 2036, 86, 2040, 2041, 86, 2048, 86, 2047, 3608, + 86, 2036, 86, 2040, 2041, 86, 2048, 86, 2047, 3615, 2045, 86, 2042, 86, 2043, 86, 2049, 86, 2046, 2050, 86, 2053, 2051, 2055, 2052, 2054, 86, 86, 86, 86, 2056, 86, 2057, 86, 86, 86, 86, 86, 86, 86, 86, 2062, 2063, 86, 86, 2067, 86, 2064, 86, 2075, 86, 2058, 2060, 2061, 2066, 2059, 2065, 2068, 86, 86, 86, 2074, 2076, 2070, 2071, 2073, 86, 86, 86, 86, - 2069, 2072, 86, 86, 86, 3608, 2083, 86, 86, 2077, + 2069, 2072, 86, 86, 86, 3615, 2083, 86, 86, 2077, 86, 2086, 2078, 2087, 86, 86, 2079, 86, 2080, 2081, 86, 2084, 2082, 2085, 2088, 86, 2090, 86, 2089, 86, @@ -2072,7 +2075,7 @@ static yyconst flex_int16_t yy_nxt[7082] = 86, 2172, 2173, 86, 86, 86, 86, 2184, 86, 2177, 86, 2183, 86, 2188, 86, 2182, 2189, 86, 2178, 86, - 2186, 86, 3608, 2185, 86, 2194, 86, 2195, 2187, 2192, + 2186, 86, 3615, 2185, 86, 2194, 86, 2195, 2187, 2192, 2196, 2191, 86, 86, 2190, 2198, 86, 2199, 2193, 86, 86, 2197, 2202, 86, 86, 86, 86, 86, 86, 86, 2200, 2206, 86, 2210, 86, 2201, 86, 86, 2204, 86, @@ -2086,7 +2089,7 @@ static yyconst flex_int16_t yy_nxt[7082] = 86, 86, 86, 171, 86, 86, 86, 2255, 2245, 86, 86, 86, 2240, 86, 2238, 2249, 2243, 2246, 2247, 86, 2251, 86, 2244, 2248, 2250, 2252, 86, 2253, 86, 2254, - 86, 86, 86, 86, 86, 2496, 2256, 2257, 86, 2258, + 86, 86, 86, 86, 86, 2497, 2256, 2257, 86, 2258, 2259, 86, 86, 2260, 2261, 86, 2262, 86, 2263, 86, 86, 2267, 86, 86, 2264, 2266, 86, 2265, 2268, 86, 86, 2269, 86, 2271, 2270, 2272, 86, 86, 86, 2279, @@ -2099,310 +2102,312 @@ static yyconst flex_int16_t yy_nxt[7082] = 86, 86, 2298, 86, 86, 2305, 86, 86, 2306, 2299, 2300, 2301, 86, 2302, 2308, 86, 86, 2304, 86, 2307, 2309, 2310, 86, 86, 2311, 86, 2314, 86, 86, 86, - 2312, 2313, 86, 86, 2319, 2316, 86, 86, 2317, 2321, - 86, 2315, 86, 86, 86, 2320, 86, 86, 86, 2318, - 86, 86, 2322, 2328, 2323, 86, 2325, 2329, 2324, 2334, - 86, 2327, 2333, 2326, 86, 86, 86, 2331, 2337, 86, - 2330, 2332, 86, 2335, 2338, 86, 86, 2340, 2341, 86, + 2312, 2313, 86, 86, 2319, 2316, 86, 2320, 2317, 2322, + 86, 2315, 86, 86, 86, 2321, 86, 86, 86, 2318, + 86, 86, 2323, 2329, 2324, 86, 2326, 2330, 2325, 2335, + 86, 86, 2328, 86, 86, 3615, 86, 2334, 2332, 2338, + 2331, 86, 2327, 2333, 86, 86, 2339, 86, 86, 2336, - 86, 86, 86, 86, 2336, 2343, 2339, 86, 2344, 86, - 86, 2345, 2347, 2342, 86, 2351, 2349, 2346, 86, 2348, - 2352, 86, 2354, 86, 2353, 86, 86, 86, 2350, 2357, - 86, 2356, 86, 86, 86, 2358, 86, 2359, 2363, 86, - 86, 86, 86, 2367, 86, 2364, 86, 2369, 2368, 86, - 86, 2355, 2360, 2362, 2361, 2365, 2372, 86, 2366, 86, - 2370, 86, 2373, 86, 2371, 86, 2377, 86, 86, 2379, - 2374, 86, 86, 2378, 86, 2383, 86, 86, 2375, 86, - 86, 2385, 2381, 86, 2386, 2376, 2387, 86, 86, 2380, - 2382, 2384, 2388, 86, 86, 86, 2393, 2390, 86, 86, + 2341, 86, 2344, 2337, 2340, 86, 86, 2342, 2345, 86, + 86, 86, 2343, 2350, 86, 2346, 2347, 2352, 2348, 86, + 86, 2353, 2349, 86, 2355, 86, 86, 86, 86, 86, + 2358, 86, 2357, 2351, 2354, 86, 2359, 86, 86, 2364, + 2360, 86, 86, 86, 2368, 86, 2365, 2361, 86, 2369, + 86, 86, 2356, 86, 2367, 2362, 2366, 86, 2363, 2370, + 2373, 86, 86, 2374, 2375, 86, 86, 2371, 2378, 86, + 86, 2372, 86, 86, 86, 2379, 86, 86, 2380, 86, + 2376, 2382, 2384, 86, 2385, 3615, 2377, 2381, 2388, 2383, + 86, 2386, 86, 2387, 86, 2390, 86, 86, 86, 2389, - 86, 86, 86, 2395, 2391, 86, 2389, 2392, 2396, 86, - 2398, 2397, 2399, 86, 2400, 86, 86, 86, 2401, 2394, - 2402, 2406, 86, 86, 86, 2404, 2405, 86, 86, 2403, - 86, 86, 86, 86, 86, 86, 2414, 86, 86, 86, - 86, 2407, 2408, 2418, 2410, 2409, 2412, 2415, 2413, 2416, - 86, 86, 86, 86, 2417, 2411, 2419, 2421, 2422, 2420, - 86, 86, 86, 2425, 86, 86, 2424, 86, 2426, 2431, - 86, 2423, 86, 2429, 2430, 86, 2432, 2433, 86, 2427, - 86, 86, 86, 86, 2436, 2440, 2437, 2428, 171, 86, - 2434, 86, 2442, 2444, 2435, 2438, 86, 2443, 86, 86, + 2391, 86, 2396, 2394, 86, 86, 2392, 2397, 86, 2393, + 86, 86, 86, 86, 2399, 86, 2398, 2402, 2403, 2395, + 86, 86, 2400, 2401, 2407, 86, 86, 86, 2404, 86, + 2406, 86, 86, 86, 86, 86, 86, 86, 2415, 86, + 2405, 86, 86, 86, 2408, 2409, 2416, 2410, 2411, 2413, + 86, 2414, 2421, 2417, 86, 2419, 2412, 2418, 86, 2420, + 2422, 86, 2426, 86, 2423, 86, 86, 2425, 2432, 86, + 86, 86, 86, 2434, 86, 86, 86, 2424, 2427, 2430, + 2431, 2433, 86, 2428, 86, 86, 2437, 86, 2441, 2438, + 171, 2429, 86, 2435, 86, 2436, 2443, 2445, 2439, 2446, - 2445, 86, 2439, 86, 2446, 2453, 86, 2449, 86, 2448, - 2441, 2447, 86, 2450, 2454, 86, 86, 2455, 86, 86, - 2458, 86, 2460, 86, 2461, 86, 86, 2451, 2459, 86, - 2456, 86, 86, 2463, 2462, 2464, 86, 2457, 2452, 86, - 2466, 86, 86, 86, 86, 86, 86, 86, 2469, 86, - 86, 2472, 2465, 86, 86, 2478, 86, 86, 2476, 2471, - 86, 2467, 86, 86, 2479, 2473, 2474, 2468, 2470, 2475, - 86, 86, 2480, 86, 86, 2481, 2477, 86, 86, 86, - 2482, 86, 2487, 2485, 2490, 86, 86, 86, 86, 2483, - 86, 2484, 2488, 2486, 2491, 86, 2489, 86, 86, 86, + 2448, 2444, 86, 86, 86, 86, 2440, 2447, 86, 2450, + 86, 86, 2442, 86, 86, 2451, 2455, 86, 86, 2456, + 2454, 86, 86, 3615, 2459, 2457, 86, 2460, 2449, 2452, + 86, 86, 2461, 2462, 86, 86, 86, 2464, 86, 2458, + 2453, 2463, 2465, 86, 86, 86, 2466, 86, 2467, 86, + 86, 86, 2470, 86, 86, 2468, 2473, 86, 86, 86, + 2479, 86, 86, 2477, 86, 2472, 2480, 86, 86, 86, + 2469, 2474, 2471, 2475, 2476, 86, 86, 86, 86, 2481, + 2482, 2478, 86, 2488, 86, 2483, 86, 2485, 2486, 2491, + 86, 86, 86, 86, 2484, 2489, 2487, 86, 86, 2492, - 2492, 86, 2501, 86, 86, 86, 2493, 2494, 86, 2505, - 2499, 86, 86, 2495, 2497, 2510, 2502, 2503, 2498, 2504, - 2500, 86, 86, 2506, 2508, 86, 86, 2509, 86, 86, - 86, 2507, 86, 2514, 2515, 86, 86, 86, 2516, 2511, - 2517, 86, 2512, 2513, 2518, 86, 2520, 86, 2521, 86, - 2519, 2524, 86, 2525, 86, 86, 86, 86, 2522, 86, - 2526, 2523, 2527, 86, 2531, 86, 2532, 86, 86, 2534, - 86, 86, 2536, 86, 86, 2530, 2528, 86, 86, 2529, - 2539, 86, 86, 2538, 2540, 86, 86, 2533, 2541, 2535, - 86, 2542, 2537, 86, 86, 2547, 86, 86, 3608, 2546, + 86, 86, 2490, 86, 2502, 2493, 86, 86, 86, 86, + 86, 2494, 2495, 2500, 2506, 86, 86, 2498, 2507, 2504, + 2496, 2499, 2503, 2505, 2501, 2509, 86, 86, 86, 86, + 86, 2511, 2510, 86, 3615, 2508, 86, 86, 2516, 2517, + 86, 86, 2512, 2518, 2519, 86, 86, 2514, 86, 2515, + 86, 86, 2522, 86, 2513, 86, 2523, 2524, 2526, 86, + 2525, 2520, 86, 2521, 2527, 86, 86, 2528, 86, 86, + 86, 2529, 86, 2530, 2533, 86, 2534, 86, 2536, 86, + 86, 2532, 2538, 86, 2541, 86, 86, 86, 2531, 2535, + 2537, 2540, 2542, 86, 86, 2539, 86, 86, 86, 86, - 2549, 86, 86, 2543, 2544, 86, 86, 86, 86, 2553, - 2551, 86, 2545, 2552, 86, 2554, 2548, 2556, 86, 86, - 2550, 2559, 86, 86, 2562, 86, 2558, 2557, 86, 86, - 2555, 86, 86, 86, 86, 2568, 86, 2560, 2567, 86, - 86, 86, 2561, 86, 2564, 2570, 86, 2566, 2563, 2573, - 86, 86, 2569, 2575, 2565, 86, 2571, 86, 2572, 2574, - 86, 86, 86, 2581, 86, 2576, 2583, 86, 86, 86, - 2584, 86, 2587, 2577, 86, 2578, 2579, 2582, 86, 2589, - 86, 2588, 86, 86, 86, 2585, 2580, 2586, 2590, 2594, - 86, 86, 86, 2592, 86, 86, 2591, 2596, 2600, 2597, + 86, 2543, 86, 2544, 2548, 2549, 86, 2551, 86, 86, + 86, 2546, 86, 2545, 2553, 2555, 2554, 2547, 86, 2550, + 2552, 86, 2556, 2558, 86, 86, 86, 86, 2561, 86, + 2564, 86, 86, 2560, 86, 86, 86, 2557, 86, 86, + 2570, 86, 2562, 2569, 2559, 86, 86, 86, 2563, 2566, + 2572, 2568, 2565, 2575, 86, 86, 86, 2571, 2567, 86, + 86, 2573, 2574, 2577, 86, 86, 86, 86, 2583, 86, + 86, 2585, 86, 2578, 86, 2576, 86, 2589, 2579, 2584, + 2581, 86, 2580, 86, 2586, 86, 2590, 86, 86, 2594, + 2591, 86, 2582, 2592, 86, 86, 2596, 2593, 86, 2587, - 2598, 2601, 86, 2593, 86, 86, 2599, 86, 2604, 86, - 86, 86, 86, 86, 86, 2605, 2595, 2606, 86, 86, - 2603, 2609, 86, 2602, 2608, 86, 86, 86, 2611, 86, - 86, 2612, 2616, 2610, 2607, 2613, 2614, 2617, 86, 2615, - 86, 3608, 86, 86, 86, 2618, 2619, 86, 2623, 2620, - 2621, 2624, 86, 2622, 86, 2625, 86, 86, 86, 2628, - 171, 2627, 86, 2626, 86, 2629, 86, 2634, 86, 86, - 86, 86, 86, 86, 86, 86, 2630, 2635, 2631, 2636, - 2632, 2637, 2633, 86, 2640, 86, 2641, 2638, 2639, 86, - 2642, 2645, 86, 2685, 2643, 86, 2646, 2647, 86, 86, + 2598, 2588, 86, 2599, 86, 2602, 2603, 2600, 2595, 86, + 86, 86, 86, 86, 86, 2606, 86, 86, 2607, 2601, + 2597, 86, 2608, 86, 86, 2605, 2611, 86, 86, 2610, + 2604, 86, 86, 86, 86, 86, 2613, 2614, 2621, 2609, + 2615, 2616, 2618, 2619, 2612, 86, 86, 2617, 86, 86, + 2620, 86, 86, 2625, 86, 2622, 2626, 86, 86, 2627, + 2624, 86, 86, 2629, 86, 2630, 2623, 2628, 171, 86, + 86, 2636, 86, 2631, 86, 86, 2637, 2632, 86, 2633, + 86, 86, 86, 2638, 86, 2634, 2635, 2639, 86, 2644, + 3615, 2643, 86, 2642, 2640, 2641, 2647, 86, 86, 2648, - 86, 2644, 2648, 2650, 2651, 2649, 86, 2653, 86, 86, - 86, 86, 86, 2655, 86, 2652, 86, 86, 86, 2659, - 86, 2660, 86, 86, 3608, 2654, 2656, 86, 2662, 86, - 2657, 2668, 86, 2663, 2661, 2664, 2658, 2665, 86, 86, - 86, 86, 86, 86, 2666, 2667, 86, 2671, 2672, 86, - 2669, 86, 86, 86, 86, 86, 2674, 86, 86, 2673, - 86, 2679, 2670, 86, 2682, 2681, 86, 2684, 86, 2678, - 86, 86, 2675, 2676, 2677, 86, 86, 2683, 2680, 86, - 2688, 86, 2686, 2690, 86, 86, 2693, 2687, 2694, 86, - 86, 2691, 86, 86, 86, 2696, 86, 2689, 2695, 86, + 2649, 86, 2645, 86, 2646, 86, 2650, 2652, 2653, 86, + 2651, 2655, 86, 86, 86, 86, 86, 2657, 2654, 86, + 86, 86, 86, 2661, 2662, 86, 86, 86, 2699, 2656, + 86, 2658, 2664, 86, 2659, 86, 86, 2665, 2666, 2663, + 2660, 2667, 86, 86, 86, 2670, 86, 86, 2668, 2669, + 86, 2674, 86, 86, 2673, 2671, 86, 86, 86, 86, + 86, 2676, 86, 2684, 86, 86, 2675, 2672, 2681, 86, + 2683, 86, 2686, 86, 2680, 86, 86, 2677, 2678, 2679, + 86, 2685, 2682, 86, 86, 2692, 86, 86, 2690, 86, + 2696, 2687, 86, 86, 2697, 2688, 86, 2695, 86, 2689, - 2699, 2692, 86, 2698, 86, 2697, 86, 2700, 86, 2701, - 86, 2703, 2704, 2705, 2706, 2707, 86, 86, 2702, 86, - 2709, 86, 86, 86, 86, 86, 2708, 86, 86, 2713, - 86, 86, 2718, 86, 86, 2716, 2717, 2711, 2719, 86, - 2710, 2712, 2720, 86, 2722, 86, 86, 86, 86, 2715, - 86, 86, 2725, 2714, 2721, 86, 2730, 86, 2727, 86, - 86, 2723, 86, 2728, 86, 86, 2732, 86, 2724, 2726, - 2733, 2729, 86, 2731, 2736, 86, 86, 86, 86, 3608, - 2734, 2737, 2735, 86, 2738, 86, 2740, 2741, 86, 86, - 2739, 86, 2744, 86, 2742, 2743, 86, 86, 2746, 2747, + 86, 2693, 2700, 2694, 86, 2691, 2698, 86, 2702, 86, + 86, 86, 2703, 2704, 86, 2706, 86, 2708, 2701, 86, + 2707, 2710, 86, 86, 86, 2712, 86, 86, 86, 86, + 86, 2709, 86, 2711, 2716, 86, 86, 2705, 86, 2721, + 86, 2719, 2714, 2720, 2723, 2713, 2715, 2722, 86, 86, + 86, 86, 2725, 86, 86, 86, 2718, 86, 2717, 86, + 2728, 86, 2730, 2733, 86, 86, 86, 86, 2736, 2724, + 2726, 86, 2735, 2731, 86, 2727, 2729, 2732, 86, 86, + 2734, 2739, 86, 86, 86, 2737, 2740, 86, 2743, 2744, + 86, 86, 86, 2738, 86, 86, 2745, 86, 2741, 86, - 86, 86, 86, 86, 2745, 86, 86, 2751, 2755, 86, - 2748, 2754, 86, 2750, 2749, 2756, 86, 2757, 86, 2758, - 86, 86, 86, 2752, 2759, 2753, 86, 2761, 86, 2762, - 86, 2763, 86, 2764, 86, 86, 86, 86, 2765, 2760, - 86, 86, 2771, 86, 2773, 86, 86, 2767, 2774, 86, - 86, 2776, 86, 86, 2766, 86, 2768, 2770, 2769, 2772, - 86, 2775, 2778, 86, 86, 2777, 2780, 86, 2781, 86, - 2785, 86, 2779, 86, 2787, 86, 86, 86, 86, 86, - 86, 171, 2786, 86, 2782, 86, 2796, 2783, 2784, 86, - 86, 2790, 2794, 2795, 2792, 86, 86, 2789, 2797, 86, + 86, 86, 2742, 2747, 2749, 86, 86, 2750, 2748, 86, + 2746, 2751, 86, 2753, 2752, 86, 86, 2754, 2758, 86, + 2757, 2759, 86, 2760, 86, 86, 2755, 2761, 86, 2756, + 86, 86, 2765, 86, 2763, 2764, 86, 2762, 86, 2766, + 86, 2767, 86, 86, 86, 2768, 86, 2774, 86, 86, + 2776, 86, 2777, 86, 2770, 86, 2769, 2779, 86, 86, + 86, 86, 2773, 2771, 86, 2772, 2778, 2781, 2775, 86, + 86, 2780, 86, 2782, 2784, 86, 2788, 86, 86, 2790, + 86, 86, 86, 86, 2783, 86, 86, 2789, 86, 86, + 2785, 2797, 2786, 171, 2787, 86, 2793, 86, 2799, 86, - 86, 86, 2788, 2791, 86, 2793, 86, 2803, 86, 86, - 2798, 2799, 86, 2805, 2806, 2807, 86, 2800, 2808, 86, - 2804, 86, 2801, 2813, 2802, 86, 2809, 86, 2810, 86, - 2811, 86, 86, 86, 86, 86, 86, 86, 86, 2812, - 86, 86, 2822, 86, 86, 86, 2820, 2815, 86, 2826, - 2814, 86, 2817, 2816, 86, 2827, 2819, 2818, 2821, 2828, - 86, 2823, 2824, 2825, 86, 2830, 2832, 86, 2829, 86, - 2834, 86, 86, 2831, 86, 86, 86, 86, 2833, 86, - 86, 86, 86, 2838, 86, 2845, 86, 2846, 86, 86, - 2835, 2844, 2836, 2837, 2839, 2840, 86, 2842, 2841, 86, + 2795, 86, 2792, 86, 2800, 2798, 86, 2791, 86, 2794, + 2796, 86, 86, 86, 2801, 2806, 2802, 86, 2808, 2810, + 86, 2803, 2809, 2811, 86, 2807, 86, 2812, 2804, 86, + 2813, 2805, 86, 2814, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 2816, 2825, 86, 86, + 2823, 86, 2815, 2818, 86, 2817, 3615, 2819, 2820, 86, + 2829, 2821, 2822, 2824, 2826, 86, 2827, 2828, 2832, 2830, + 2831, 86, 86, 2833, 2835, 86, 86, 2837, 86, 86, + 86, 2834, 86, 86, 86, 2836, 86, 86, 86, 86, + 2841, 86, 2848, 86, 86, 2847, 3615, 2838, 2839, 2842, - 86, 2843, 2850, 86, 2852, 2849, 2851, 86, 86, 2847, - 86, 86, 86, 86, 2848, 86, 86, 86, 2853, 86, - 2857, 2863, 86, 2854, 2861, 86, 2856, 2859, 86, 86, - 2855, 2862, 86, 2858, 2864, 2865, 86, 2860, 86, 86, - 2869, 86, 86, 86, 2866, 86, 86, 2867, 2871, 86, - 2872, 86, 86, 86, 2877, 2878, 86, 86, 2868, 2881, - 86, 2870, 2873, 86, 86, 2874, 86, 86, 2879, 2875, - 2876, 2884, 86, 86, 2882, 2880, 86, 2887, 2886, 2883, - 86, 2885, 2888, 86, 86, 86, 2893, 86, 86, 2889, - 86, 86, 86, 86, 2897, 2890, 2896, 2898, 86, 2895, + 2840, 2849, 86, 86, 2843, 2844, 86, 2845, 2846, 2853, + 86, 2855, 2852, 86, 2850, 2854, 86, 86, 86, 86, + 86, 2851, 86, 86, 86, 86, 3615, 2861, 86, 86, + 86, 2856, 2866, 2865, 2858, 86, 2857, 2860, 86, 2859, + 2863, 2867, 86, 86, 2862, 2864, 86, 2871, 2868, 2869, + 86, 86, 86, 86, 2870, 86, 86, 86, 2875, 86, + 2876, 86, 2872, 2873, 86, 2882, 86, 2881, 86, 86, + 2885, 86, 2874, 86, 86, 86, 2877, 2879, 2878, 2880, + 86, 86, 86, 2883, 2886, 2888, 2890, 2884, 86, 2887, + 2889, 86, 2891, 2892, 86, 2893, 86, 86, 2897, 86, - 2894, 2900, 86, 86, 2891, 2892, 86, 86, 2901, 86, - 2899, 86, 2906, 86, 86, 2902, 86, 2907, 2909, 86, - 86, 2904, 86, 2903, 86, 86, 2916, 86, 86, 86, - 86, 2905, 86, 2910, 2913, 2911, 2908, 2912, 2914, 2915, - 2919, 86, 86, 86, 86, 86, 86, 2918, 2917, 2920, - 2921, 2923, 86, 86, 86, 86, 2922, 2928, 86, 86, - 2924, 2927, 2925, 2926, 2930, 86, 86, 2933, 86, 86, - 2929, 2931, 2934, 86, 2935, 86, 2937, 171, 86, 86, - 2932, 86, 86, 2942, 2939, 2938, 86, 86, 2944, 86, - 86, 2943, 86, 86, 2936, 2947, 86, 2946, 3608, 2940, + 86, 86, 86, 86, 86, 2901, 2894, 2900, 2902, 86, + 2899, 86, 2898, 2904, 86, 86, 2895, 2896, 86, 86, + 2905, 2903, 86, 2908, 2910, 86, 86, 2906, 86, 2911, + 2913, 86, 86, 86, 86, 2907, 2920, 86, 86, 86, + 86, 86, 2909, 86, 86, 2914, 2915, 2916, 2912, 2917, + 2918, 86, 2919, 3615, 2922, 2923, 86, 86, 2921, 86, + 86, 86, 2924, 2929, 2925, 2926, 2927, 86, 2928, 86, + 2932, 86, 86, 86, 86, 86, 2930, 2931, 2934, 2935, + 2937, 86, 2938, 86, 86, 86, 86, 2933, 86, 2939, + 2936, 2941, 171, 2942, 86, 86, 2946, 86, 86, 2943, - 2941, 2948, 86, 2950, 86, 2945, 2949, 86, 2952, 86, - 2951, 86, 86, 2953, 86, 2957, 2954, 2955, 86, 86, - 86, 86, 2958, 2956, 2959, 86, 86, 86, 86, 2960, - 2964, 2965, 86, 2966, 2962, 86, 86, 86, 2968, 86, - 2961, 86, 2969, 86, 2967, 86, 2970, 86, 2963, 86, - 2971, 86, 86, 86, 2973, 2972, 2974, 2975, 86, 86, - 86, 2980, 86, 2976, 86, 86, 2977, 2978, 2979, 2982, - 2984, 2981, 86, 86, 86, 86, 86, 86, 2985, 2989, - 86, 86, 2990, 2983, 86, 86, 86, 86, 2995, 86, - 86, 86, 2986, 2992, 2987, 86, 2988, 3000, 86, 2999, + 86, 2948, 86, 2947, 2940, 86, 2944, 2951, 86, 86, + 2950, 3615, 2949, 2945, 2952, 86, 2954, 86, 86, 2956, + 86, 2955, 2953, 86, 2957, 86, 86, 2961, 2958, 86, + 86, 2959, 86, 86, 2960, 2963, 2962, 86, 2964, 86, + 86, 86, 2968, 2969, 86, 86, 2970, 2966, 86, 86, + 2972, 86, 2965, 86, 86, 86, 2971, 2976, 2975, 2974, + 2973, 2967, 86, 86, 86, 86, 86, 2977, 2978, 2979, + 86, 86, 86, 86, 2984, 86, 86, 86, 86, 2981, + 2982, 2983, 2986, 2980, 2985, 2988, 86, 86, 2987, 86, + 86, 86, 2989, 2994, 86, 2990, 86, 2995, 2991, 86, - 2991, 2993, 2994, 86, 2996, 2997, 3002, 3003, 86, 3005, - 86, 2998, 86, 86, 86, 86, 3006, 86, 3007, 86, - 86, 86, 86, 86, 3009, 3012, 3004, 86, 3001, 3010, - 3013, 86, 86, 86, 3011, 86, 3014, 3015, 3097, 3008, - 3016, 86, 86, 3018, 3020, 86, 3021, 86, 3017, 3022, - 86, 86, 86, 3019, 86, 3023, 86, 3024, 3026, 86, - 86, 86, 3030, 3025, 86, 3028, 86, 3031, 86, 86, - 3034, 3035, 86, 3029, 3036, 86, 3027, 86, 3032, 3037, - 86, 86, 86, 86, 3033, 3038, 3041, 86, 86, 86, - 3039, 3044, 86, 86, 3040, 86, 3045, 3046, 86, 3048, + 86, 86, 3000, 86, 86, 86, 86, 2992, 2993, 2997, + 3005, 86, 86, 86, 2998, 2996, 2999, 3004, 3007, 3008, + 3002, 86, 3010, 3001, 86, 86, 3003, 86, 86, 3011, + 86, 86, 86, 86, 86, 3012, 3017, 3006, 3014, 3009, + 86, 3015, 86, 3018, 86, 86, 86, 3016, 3019, 3021, + 86, 86, 3023, 86, 3025, 86, 3013, 3026, 86, 3020, + 86, 3022, 3027, 86, 3028, 86, 86, 3031, 86, 86, + 3029, 3024, 86, 86, 3035, 3030, 86, 3033, 86, 3036, + 86, 86, 3039, 3040, 86, 3034, 3041, 86, 3037, 3032, + 3042, 86, 86, 86, 86, 3043, 3046, 86, 3038, 86, - 86, 3042, 86, 86, 3047, 3052, 3049, 3055, 3043, 3053, - 86, 86, 86, 86, 86, 86, 3054, 3051, 3057, 3056, - 3050, 86, 86, 3058, 86, 86, 3063, 86, 86, 86, - 86, 3062, 86, 3065, 3066, 86, 3068, 86, 3059, 86, - 3069, 3060, 3061, 86, 3067, 86, 3071, 86, 3072, 86, - 86, 86, 3064, 86, 3075, 3070, 3079, 86, 86, 86, - 86, 86, 3073, 3074, 86, 3125, 86, 3078, 3076, 3081, - 86, 3077, 3080, 3083, 86, 3086, 3608, 3082, 3085, 3084, - 3087, 86, 3088, 3090, 3091, 86, 86, 3089, 86, 86, - 3092, 86, 3093, 86, 3094, 86, 3095, 86, 3096, 86, + 86, 3049, 86, 86, 3050, 86, 3044, 3045, 3051, 86, + 86, 3053, 86, 86, 86, 3057, 86, 3047, 3054, 86, + 3048, 86, 3058, 86, 3061, 3052, 86, 3060, 3056, 3062, + 3059, 3055, 86, 86, 3063, 86, 86, 86, 3068, 3064, + 86, 86, 86, 3067, 86, 3070, 3071, 86, 86, 86, + 3073, 86, 3065, 3072, 3074, 86, 3066, 86, 3076, 86, + 3077, 86, 3080, 86, 86, 3069, 86, 3084, 86, 86, + 86, 3091, 86, 86, 3075, 86, 3092, 86, 3078, 3079, + 3083, 3081, 86, 3085, 3082, 3086, 3088, 86, 86, 3089, + 3135, 3093, 3095, 3087, 86, 3090, 3094, 86, 3096, 86, - 3100, 86, 86, 86, 3098, 86, 3099, 3102, 86, 86, - 3104, 86, 3108, 86, 86, 3101, 3608, 3105, 3109, 86, - 86, 86, 3103, 3110, 3113, 86, 86, 3111, 86, 3106, - 86, 3107, 3112, 3114, 3115, 86, 86, 3117, 86, 3118, - 86, 3116, 86, 86, 3123, 86, 3122, 3124, 86, 3119, - 86, 3120, 3121, 86, 86, 86, 3130, 86, 86, 3126, - 86, 3131, 86, 86, 3134, 3128, 3133, 86, 3135, 86, - 3129, 3132, 3127, 3136, 86, 3138, 86, 86, 86, 3142, - 86, 3137, 86, 3139, 86, 86, 86, 86, 86, 86, - 86, 3143, 3146, 3149, 3608, 3147, 3141, 3144, 86, 86, + 86, 3097, 86, 3098, 86, 3099, 86, 3100, 86, 3101, + 3102, 86, 86, 86, 3105, 86, 3103, 86, 86, 86, + 3107, 86, 86, 3109, 86, 3114, 86, 3106, 3110, 3115, + 86, 86, 3104, 86, 3116, 86, 3108, 3119, 86, 3117, + 86, 3111, 3112, 86, 3113, 3121, 86, 3120, 3122, 3123, + 86, 86, 86, 3118, 86, 86, 86, 3129, 86, 86, + 3124, 3125, 86, 3126, 3127, 3130, 86, 86, 3132, 86, + 3136, 3131, 86, 86, 3128, 3137, 86, 3142, 86, 86, + 3134, 3133, 3139, 3140, 86, 3138, 86, 3144, 86, 3141, + 86, 86, 86, 3148, 86, 86, 86, 86, 86, 86, - 86, 3150, 3140, 3152, 86, 3153, 86, 3154, 3148, 3145, - 86, 3151, 86, 3155, 86, 3156, 86, 3159, 3161, 86, - 3160, 3162, 86, 3163, 86, 3157, 86, 86, 3158, 86, - 3608, 86, 3168, 86, 86, 3164, 3167, 86, 86, 3169, - 3171, 86, 3170, 86, 86, 86, 86, 3165, 3166, 86, - 3175, 3172, 3177, 3179, 86, 3173, 86, 86, 86, 86, - 3180, 86, 3181, 86, 3176, 3174, 3182, 86, 3183, 86, - 86, 3188, 86, 86, 3178, 86, 86, 86, 3184, 86, - 86, 3192, 86, 3187, 3185, 3186, 3189, 86, 3190, 3191, - 86, 3193, 3197, 86, 86, 3194, 86, 3199, 3196, 3195, + 3143, 86, 86, 3152, 3145, 3149, 3155, 3150, 3153, 86, + 3147, 86, 86, 86, 3156, 86, 3146, 86, 3158, 86, + 3159, 3154, 3151, 86, 3160, 86, 3161, 86, 3167, 86, + 3157, 3171, 3162, 3164, 86, 86, 3165, 86, 3163, 3166, + 3168, 86, 3169, 86, 86, 3174, 3170, 86, 86, 3173, + 86, 86, 3175, 3172, 86, 3176, 3177, 86, 86, 86, + 86, 3183, 86, 86, 3181, 86, 3178, 86, 3185, 86, + 3179, 86, 86, 86, 86, 3180, 3186, 86, 3182, 3187, + 86, 3189, 3188, 3193, 3190, 86, 3191, 3184, 3192, 3194, + 86, 86, 86, 86, 86, 86, 86, 3198, 3195, 86, - 86, 86, 86, 3200, 3203, 86, 3205, 86, 86, 3208, - 86, 3206, 86, 3198, 3207, 3210, 86, 86, 3201, 86, - 86, 3204, 86, 86, 86, 3213, 86, 3202, 3209, 3215, - 3216, 86, 86, 3211, 3219, 3212, 86, 86, 3214, 86, - 86, 3218, 3226, 3217, 86, 3222, 3225, 86, 86, 3220, - 86, 3223, 86, 3228, 86, 3221, 86, 3229, 3224, 86, - 3231, 86, 3232, 86, 86, 3235, 86, 86, 86, 86, - 3227, 3233, 86, 3240, 86, 86, 3230, 3238, 3237, 86, - 3244, 86, 86, 86, 3234, 3236, 3242, 86, 86, 3239, - 3246, 3241, 86, 86, 3608, 3243, 3247, 3245, 86, 3248, + 86, 86, 86, 3199, 3196, 3197, 3203, 3202, 86, 3205, + 86, 3200, 86, 3209, 86, 3201, 3210, 86, 86, 3206, + 3204, 3212, 86, 86, 3215, 86, 3213, 86, 3208, 3214, + 3207, 3217, 86, 86, 86, 86, 86, 3211, 86, 86, + 3220, 3223, 86, 3216, 3222, 86, 86, 3226, 86, 3218, + 3219, 86, 3221, 86, 3225, 86, 3229, 86, 3224, 3232, + 86, 86, 3233, 86, 3235, 3230, 86, 3228, 86, 3227, + 86, 3236, 3238, 86, 3239, 86, 3231, 86, 86, 3242, + 86, 3234, 86, 86, 3247, 3237, 86, 86, 86, 86, + 86, 86, 3240, 3244, 3253, 3245, 3251, 86, 3241, 3243, - 3249, 3251, 3254, 3250, 3252, 86, 86, 86, 86, 3253, - 3255, 86, 3257, 86, 86, 86, 3256, 3260, 86, 3258, - 3263, 86, 86, 86, 86, 86, 86, 3268, 86, 86, - 86, 3608, 86, 86, 3259, 3261, 3262, 3264, 3275, 3267, - 3265, 3271, 3272, 86, 3273, 86, 3270, 86, 3269, 3266, - 3274, 86, 86, 3278, 86, 3279, 86, 3277, 3280, 86, - 86, 3276, 3281, 86, 86, 3284, 86, 86, 3286, 86, - 86, 86, 3285, 3282, 3288, 86, 86, 86, 86, 86, - 86, 3294, 3287, 3295, 86, 86, 86, 86, 86, 3289, - 3283, 86, 3301, 86, 3302, 86, 86, 3292, 3290, 3291, + 3249, 86, 86, 3246, 86, 3254, 3248, 86, 3255, 3250, + 86, 3258, 3259, 86, 3261, 86, 3252, 86, 3260, 86, + 86, 86, 3256, 86, 3257, 86, 3263, 3264, 86, 3267, + 3265, 86, 3270, 86, 86, 86, 86, 3262, 86, 86, + 3275, 86, 3266, 86, 86, 86, 3271, 86, 3268, 3269, + 3279, 86, 3274, 86, 3272, 3615, 3278, 3280, 86, 3283, + 3277, 86, 3276, 3273, 3281, 86, 3282, 86, 3285, 86, + 3286, 86, 3284, 3287, 86, 3288, 86, 86, 3291, 3290, + 86, 3293, 86, 86, 86, 3292, 3295, 86, 86, 86, + 3289, 86, 86, 86, 86, 3301, 3302, 86, 86, 3294, - 3300, 3293, 3298, 3304, 86, 3297, 86, 3299, 86, 86, - 86, 3296, 3608, 3307, 3303, 3309, 86, 3310, 86, 86, - 86, 86, 3313, 86, 3305, 3306, 3311, 86, 86, 3316, - 86, 3308, 3314, 3312, 86, 3315, 86, 86, 86, 3317, - 3318, 86, 3319, 3320, 86, 86, 3322, 86, 86, 86, - 86, 3324, 86, 86, 86, 3325, 3323, 86, 3321, 86, - 86, 86, 86, 86, 86, 3334, 3335, 3326, 3330, 3327, - 3328, 3329, 3337, 3347, 3331, 3332, 86, 3341, 86, 3608, - 3333, 3338, 3336, 3339, 86, 3342, 86, 3340, 3343, 86, - 86, 3345, 86, 86, 3344, 3348, 86, 86, 3346, 3350, + 86, 86, 86, 3308, 86, 3309, 86, 3296, 86, 86, + 3311, 3297, 3299, 3298, 3300, 3305, 86, 3307, 86, 3304, + 86, 86, 3306, 86, 3303, 3615, 3314, 3310, 3316, 86, + 3317, 86, 86, 86, 3320, 86, 86, 3318, 3312, 3313, + 86, 3323, 86, 3322, 3315, 86, 86, 3319, 3321, 86, + 3324, 3326, 86, 3325, 86, 86, 86, 86, 86, 86, + 3329, 86, 86, 3331, 86, 86, 3332, 86, 3330, 86, + 86, 86, 3327, 86, 3328, 3341, 3342, 86, 3333, 3615, + 3337, 3334, 3335, 3336, 3338, 3339, 3344, 86, 86, 86, + 3340, 3347, 86, 3343, 3345, 3349, 86, 3346, 3350, 86, - 86, 3351, 3352, 86, 86, 3353, 3354, 3358, 86, 3355, - 86, 86, 3349, 3356, 3357, 86, 86, 86, 3361, 86, - 3359, 86, 86, 3364, 86, 86, 3360, 86, 86, 3362, - 3368, 86, 3367, 86, 86, 3363, 86, 86, 86, 86, - 3372, 3371, 86, 86, 3365, 3366, 3373, 3376, 3369, 3377, - 86, 86, 3378, 3374, 86, 3379, 86, 3375, 3370, 3380, - 86, 3381, 86, 86, 86, 3386, 3382, 86, 3383, 3388, - 3387, 86, 86, 3384, 86, 86, 3385, 86, 86, 3392, - 3396, 3389, 3390, 3393, 3395, 86, 86, 86, 86, 3398, - 86, 3399, 86, 3391, 3397, 86, 3394, 3402, 86, 86, + 3348, 86, 3352, 86, 86, 3351, 86, 3355, 86, 3353, + 3615, 86, 3357, 86, 3358, 3359, 86, 86, 3360, 3361, + 3365, 86, 3362, 86, 86, 3354, 3356, 3363, 3364, 3366, + 86, 86, 3368, 86, 86, 86, 86, 3371, 86, 86, + 3367, 86, 3375, 86, 86, 86, 3374, 86, 86, 3370, + 86, 86, 3369, 86, 3378, 3379, 86, 3380, 3372, 3373, + 86, 3383, 3384, 86, 3376, 3381, 86, 3386, 86, 3385, + 3377, 3382, 3387, 86, 3388, 86, 86, 86, 86, 3393, + 86, 3390, 3395, 3389, 3394, 86, 3391, 86, 86, 3392, + 86, 86, 86, 3402, 86, 3397, 3399, 3400, 3403, 86, - 3401, 86, 3400, 3403, 86, 3406, 86, 86, 3404, 3407, - 86, 3408, 86, 3409, 86, 3410, 86, 3411, 86, 3405, - 3412, 86, 3413, 86, 86, 86, 3416, 86, 3417, 86, - 86, 86, 86, 3414, 3415, 86, 3419, 3421, 86, 3418, - 3423, 86, 86, 86, 86, 86, 3427, 3424, 3428, 86, - 86, 3420, 3430, 86, 3422, 3425, 3426, 86, 3429, 86, - 3432, 86, 3434, 86, 86, 3437, 86, 3436, 3431, 86, - 86, 86, 86, 86, 3439, 86, 86, 86, 86, 3443, - 3438, 3435, 3445, 86, 86, 3433, 3444, 86, 86, 3440, - 3441, 3442, 3449, 86, 3452, 86, 3450, 86, 3446, 3453, + 3405, 86, 86, 3396, 86, 3404, 3406, 86, 3398, 3401, + 86, 3409, 86, 3410, 86, 3408, 86, 3407, 86, 3413, + 86, 3414, 86, 3415, 86, 3411, 3416, 86, 3417, 86, + 3418, 86, 3419, 86, 3420, 86, 3412, 86, 86, 3423, + 86, 3424, 86, 86, 86, 86, 86, 3422, 3428, 86, + 86, 86, 3425, 3430, 86, 86, 3426, 86, 3434, 3435, + 86, 3431, 86, 3421, 3432, 3427, 86, 3433, 86, 3429, + 3437, 86, 86, 86, 3441, 3439, 86, 3436, 86, 3443, + 3444, 86, 86, 86, 3438, 86, 86, 3446, 86, 86, + 86, 86, 86, 86, 3440, 3445, 3442, 3450, 3451, 3459, - 86, 3451, 3447, 86, 3448, 3454, 86, 86, 86, 86, - 86, 3457, 3456, 86, 86, 86, 86, 3463, 86, 3462, - 3455, 86, 3465, 3459, 3461, 86, 86, 86, 3458, 86, - 86, 3464, 86, 3460, 86, 86, 86, 3467, 3466, 86, - 3474, 3472, 86, 3469, 3468, 3471, 3473, 3476, 3478, 86, - 86, 86, 86, 86, 3470, 86, 3480, 3475, 3477, 3483, - 86, 3485, 86, 86, 3484, 86, 3481, 86, 3486, 86, - 3479, 3487, 86, 3482, 3488, 86, 86, 86, 86, 3491, - 86, 86, 3489, 3492, 3496, 3490, 3493, 86, 86, 86, - 86, 86, 3495, 86, 3494, 3505, 3499, 3500, 86, 86, + 86, 86, 3447, 3448, 3449, 3452, 86, 3453, 86, 86, + 86, 3456, 3457, 3455, 3460, 86, 3454, 3461, 86, 86, + 86, 3458, 86, 86, 3464, 86, 86, 86, 3463, 86, + 86, 3469, 3470, 3462, 86, 3472, 86, 3466, 3468, 86, + 86, 86, 3465, 86, 3471, 86, 86, 86, 3467, 3473, + 86, 86, 3481, 86, 86, 3479, 3476, 86, 3474, 3475, + 3478, 86, 3480, 3485, 86, 86, 3483, 3488, 3477, 86, + 3487, 86, 3482, 3484, 3490, 86, 86, 3486, 3492, 86, + 3491, 86, 3493, 3494, 86, 3495, 86, 86, 86, 3489, + 86, 3498, 86, 86, 86, 3496, 3503, 3499, 3500, 86, - 3498, 3497, 3502, 86, 3503, 86, 3504, 86, 86, 3501, - 3507, 86, 3506, 86, 3508, 3510, 86, 86, 3511, 86, - 86, 3512, 3514, 3515, 86, 86, 3509, 86, 86, 86, - 3520, 86, 3519, 86, 3516, 3521, 86, 3517, 3513, 86, - 86, 86, 86, 86, 3518, 86, 3525, 86, 3527, 86, - 86, 86, 86, 86, 3522, 3524, 3532, 3533, 86, 3523, - 3526, 86, 3529, 3530, 3528, 3540, 3531, 3534, 86, 3538, - 86, 86, 86, 3535, 86, 3541, 3536, 3539, 86, 86, - 3537, 86, 86, 3542, 3543, 3546, 3544, 3547, 86, 86, - 86, 86, 3549, 86, 3548, 86, 86, 86, 86, 3550, + 86, 86, 86, 3507, 86, 86, 3506, 3497, 86, 3502, + 3509, 86, 3505, 3504, 86, 3501, 3510, 86, 3511, 86, + 3514, 86, 86, 3512, 86, 3508, 3517, 86, 86, 3518, + 86, 86, 86, 3513, 3521, 3522, 86, 3515, 3519, 86, + 86, 86, 3516, 86, 3527, 86, 3523, 86, 3526, 3524, + 3520, 3528, 86, 86, 86, 86, 86, 86, 3525, 86, + 3532, 86, 3534, 86, 86, 86, 86, 86, 3529, 3531, + 3539, 3540, 86, 3530, 3533, 86, 3536, 3537, 3535, 3547, + 3538, 3541, 86, 3545, 86, 86, 86, 3542, 86, 3548, + 3543, 3546, 86, 86, 3544, 86, 86, 3549, 3550, 3553, - 3555, 3545, 86, 3552, 86, 86, 86, 86, 3558, 3551, - 3559, 86, 86, 86, 86, 86, 3553, 3554, 3557, 3562, - 86, 3556, 3560, 3563, 86, 3561, 86, 3566, 3565, 3567, - 86, 3564, 86, 3568, 86, 3570, 86, 3572, 86, 3573, - 86, 86, 86, 3577, 86, 3574, 3608, 86, 3575, 3580, - 86, 3571, 3578, 86, 86, 3579, 3569, 86, 86, 86, - 86, 3576, 86, 86, 3581, 3582, 86, 3584, 3586, 86, - 86, 3588, 86, 3583, 86, 3589, 86, 3592, 3585, 3587, - 3593, 86, 3590, 86, 86, 3596, 3597, 86, 86, 3599, - 86, 3591, 86, 3594, 86, 3598, 3600, 86, 86, 3601, + 3551, 3554, 86, 86, 86, 86, 3556, 86, 3555, 86, + 86, 86, 86, 3557, 3562, 3552, 86, 3559, 86, 86, + 86, 86, 3565, 3558, 3566, 86, 86, 86, 86, 86, + 3560, 3561, 3564, 3569, 86, 3563, 3567, 3570, 86, 3568, + 86, 3573, 3572, 3574, 86, 3571, 86, 3575, 86, 3577, + 86, 3579, 86, 3580, 86, 86, 86, 3584, 86, 3581, + 3615, 86, 3582, 3587, 86, 3578, 3585, 86, 86, 3586, + 3576, 86, 86, 86, 86, 3583, 86, 86, 3588, 3589, + 86, 3591, 3593, 86, 86, 3595, 86, 3590, 86, 3596, + 86, 3599, 3592, 3594, 3600, 86, 3597, 86, 86, 3603, - 86, 86, 3595, 3602, 3608, 3603, 3606, 86, 3607, 86, - 3608, 3608, 3608, 3604, 3608, 3608, 3608, 3608, 3608, 3608, - 3605, 47, 47, 47, 47, 47, 47, 47, 52, 52, - 52, 52, 52, 52, 52, 57, 57, 57, 57, 57, - 57, 57, 63, 63, 63, 63, 63, 63, 63, 68, - 68, 68, 68, 68, 68, 68, 74, 74, 74, 74, - 74, 74, 74, 80, 80, 80, 80, 80, 80, 80, - 89, 89, 3608, 89, 89, 89, 89, 161, 161, 3608, - 3608, 3608, 161, 161, 163, 163, 3608, 3608, 163, 3608, - 163, 165, 3608, 3608, 3608, 3608, 3608, 165, 168, 168, + 3604, 86, 86, 3606, 86, 3598, 86, 3601, 86, 3605, + 3607, 86, 86, 3608, 86, 86, 3602, 3609, 3615, 3610, + 3613, 86, 3614, 86, 3615, 3615, 3615, 3611, 3615, 3615, + 3615, 3615, 3615, 3615, 3612, 47, 47, 47, 47, 47, + 47, 47, 52, 52, 52, 52, 52, 52, 52, 57, + 57, 57, 57, 57, 57, 57, 63, 63, 63, 63, + 63, 63, 63, 68, 68, 68, 68, 68, 68, 68, + 74, 74, 74, 74, 74, 74, 74, 80, 80, 80, + 80, 80, 80, 80, 89, 89, 3615, 89, 89, 89, + 89, 161, 161, 3615, 3615, 3615, 161, 161, 163, 163, + + 3615, 3615, 163, 3615, 163, 165, 3615, 3615, 3615, 3615, + 3615, 165, 168, 168, 3615, 3615, 3615, 168, 168, 170, + 3615, 3615, 3615, 3615, 3615, 170, 172, 172, 3615, 172, + 172, 172, 172, 175, 3615, 3615, 3615, 3615, 3615, 175, + 178, 178, 3615, 3615, 3615, 178, 178, 90, 90, 3615, + 90, 90, 90, 90, 17, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615 - 3608, 3608, 3608, 168, 168, 170, 3608, 3608, 3608, 3608, - 3608, 170, 172, 172, 3608, 172, 172, 172, 172, 175, - 3608, 3608, 3608, 3608, 3608, 175, 178, 178, 3608, 3608, - 3608, 178, 178, 90, 90, 3608, 90, 90, 90, 90, - 17, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608 } ; -static yyconst flex_int16_t yy_chk[7082] = +static yyconst flex_int16_t yy_chk[7096] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2412,14 +2417,14 @@ static yyconst flex_int16_t yy_chk[7082] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3616, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3623, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2937, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2941, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, @@ -2882,307 +2887,309 @@ static yyconst flex_int16_t yy_chk[7082] = 2099, 2102, 2092, 2098, 2100, 2100, 2101, 2109, 2101, 2093, 2094, 2096, 2104, 2097, 2103, 2103, 2114, 2099, 2118, 2102, 2104, 2106, 2106, 2107, 2107, 2110, 2111, 2112, 2113, 2115, - 2109, 2110, 2111, 2116, 2116, 2113, 2117, 2123, 2114, 2118, - 2119, 2112, 2120, 2121, 2122, 2117, 2124, 2127, 2128, 2115, - 2129, 2125, 2119, 2125, 2120, 2131, 2122, 2125, 2121, 2130, - 2130, 2124, 2129, 2123, 2132, 2133, 2135, 2127, 2133, 2134, - 2125, 2128, 2137, 2131, 2134, 2139, 2138, 2137, 2138, 2145, + 2109, 2110, 2111, 2116, 2116, 2113, 2117, 2117, 2114, 2118, + 2119, 2112, 2120, 2121, 2122, 2117, 2123, 2124, 2127, 2115, + 2128, 2125, 2119, 2125, 2120, 2129, 2122, 2125, 2121, 2130, + 2130, 2131, 2124, 2132, 2135, 0, 2133, 2129, 2127, 2133, + 2125, 2134, 2123, 2128, 2139, 2137, 2134, 2140, 2145, 2131, - 2140, 2141, 2143, 2146, 2132, 2140, 2135, 2147, 2141, 2149, - 2153, 2143, 2146, 2139, 2148, 2150, 2148, 2145, 2152, 2147, - 2152, 2150, 2154, 2154, 2153, 2155, 2156, 2157, 2149, 2157, - 2158, 2156, 2159, 2162, 2160, 2158, 2161, 2159, 2163, 2168, - 2164, 2170, 2165, 2167, 2163, 2164, 2166, 2168, 2167, 2167, - 2171, 2155, 2160, 2162, 2161, 2165, 2172, 2172, 2166, 2174, - 2170, 2173, 2173, 2175, 2171, 2176, 2177, 2179, 2178, 2179, - 2174, 2180, 2177, 2178, 2181, 2182, 2182, 2186, 2175, 2183, - 2184, 2184, 2181, 2185, 2185, 2176, 2186, 2187, 2188, 2180, - 2181, 2183, 2187, 2190, 2192, 2191, 2192, 2190, 2193, 2195, + 2137, 2141, 2140, 2132, 2135, 2138, 2143, 2138, 2141, 2146, + 2147, 2148, 2139, 2148, 2149, 2143, 2145, 2150, 2146, 2152, + 2153, 2152, 2147, 2150, 2154, 2154, 2155, 2156, 2157, 2160, + 2157, 2158, 2156, 2149, 2153, 2159, 2158, 2161, 2162, 2163, + 2159, 2164, 2166, 2165, 2167, 2163, 2164, 2160, 2170, 2167, + 2167, 2168, 2155, 2174, 2166, 2161, 2165, 2171, 2162, 2168, + 2172, 2172, 2173, 2173, 2174, 2175, 2176, 2170, 2177, 2180, + 2178, 2171, 2183, 2181, 2177, 2178, 2179, 2188, 2179, 2186, + 2175, 2181, 2182, 2182, 2183, 0, 2176, 2180, 2186, 2181, + 2184, 2184, 2185, 2185, 2187, 2188, 2190, 2191, 2193, 2187, - 2197, 2196, 2199, 2194, 2191, 2204, 2188, 2191, 2194, 2194, - 2196, 2195, 2197, 2200, 2199, 2201, 2203, 2205, 2200, 2193, - 2201, 2206, 2206, 2207, 2208, 2204, 2205, 2209, 2210, 2203, - 2211, 2214, 2212, 2213, 2218, 2216, 2214, 2217, 2219, 2222, - 2228, 2207, 2208, 2219, 2210, 2209, 2212, 2216, 2213, 2217, - 2221, 2220, 2225, 2229, 2218, 2211, 2220, 2222, 2225, 2221, - 2227, 2230, 2231, 2228, 2232, 2233, 2227, 2235, 2229, 2234, - 2234, 2225, 2237, 2232, 2233, 2238, 2235, 2236, 2236, 2230, - 2239, 2240, 2241, 2243, 2239, 2244, 2240, 2231, 2245, 2251, - 2237, 2244, 2246, 2247, 2238, 2241, 2256, 2246, 2246, 2247, + 2190, 2192, 2194, 2192, 2195, 2196, 2191, 2194, 2194, 2191, + 2197, 2199, 2200, 2201, 2196, 2203, 2195, 2200, 2201, 2193, + 2204, 2205, 2197, 2199, 2206, 2206, 2207, 2208, 2203, 2209, + 2205, 2211, 2210, 2214, 2216, 2212, 2213, 2218, 2214, 2228, + 2204, 2217, 2222, 2221, 2207, 2208, 2216, 2209, 2210, 2212, + 2219, 2213, 2221, 2217, 2220, 2219, 2211, 2218, 2225, 2220, + 2222, 2227, 2228, 2229, 2225, 2230, 2231, 2227, 2234, 2234, + 2232, 2233, 2235, 2236, 2236, 2237, 2238, 2225, 2229, 2232, + 2233, 2235, 2239, 2230, 2240, 2241, 2239, 2243, 2244, 2240, + 2245, 2231, 2250, 2237, 2244, 2238, 2246, 2247, 2241, 2248, - 2248, 2249, 2243, 2250, 2249, 2256, 2248, 2254, 2254, 2251, - 2245, 2250, 2255, 2255, 2257, 2257, 2258, 2258, 2259, 2260, - 2261, 2263, 2263, 2262, 2264, 2264, 2261, 2255, 2262, 2265, - 2259, 2268, 2269, 2266, 2265, 2268, 2270, 2260, 2255, 2266, - 2270, 2271, 2273, 2274, 2276, 2275, 2277, 2278, 2274, 2280, - 2279, 2277, 2269, 2281, 2282, 2283, 2283, 2285, 2281, 2276, - 2284, 2271, 2287, 2288, 2284, 2278, 2279, 2273, 2275, 2280, - 2286, 2290, 2285, 2289, 2291, 2286, 2282, 2292, 2294, 2293, - 2287, 2298, 2292, 2290, 2295, 2295, 2297, 2299, 2300, 2288, - 2301, 2289, 2293, 2291, 2297, 2303, 2294, 2304, 2305, 2306, + 2250, 2246, 2246, 2247, 2249, 2248, 2243, 2249, 2251, 2254, + 2254, 2256, 2245, 2259, 2255, 2255, 2257, 2257, 2258, 2258, + 2256, 2260, 2262, 0, 2261, 2259, 2269, 2262, 2251, 2255, + 2261, 2263, 2263, 2264, 2264, 2271, 2265, 2266, 2268, 2260, + 2255, 2265, 2268, 2266, 2270, 2273, 2269, 2274, 2270, 2275, + 2276, 2277, 2274, 2278, 2280, 2271, 2277, 2279, 2281, 2282, + 2283, 2283, 2284, 2281, 2285, 2276, 2284, 2287, 2288, 2289, + 2273, 2278, 2275, 2279, 2280, 2286, 2290, 2291, 2292, 2285, + 2286, 2282, 2293, 2292, 2294, 2287, 2298, 2289, 2290, 2295, + 2295, 2297, 2299, 2300, 2288, 2293, 2291, 2301, 2303, 2297, - 2298, 2309, 2307, 2313, 2311, 2312, 2299, 2300, 2307, 2313, - 2305, 2315, 2318, 2301, 2303, 2318, 2309, 2311, 2304, 2312, - 2306, 2314, 2317, 2314, 2316, 2316, 2319, 2317, 2320, 2326, - 2321, 2315, 2322, 2322, 2323, 2323, 2324, 2327, 2324, 2319, - 2325, 2325, 2320, 2321, 2326, 2328, 2328, 2329, 2329, 2330, - 2327, 2331, 2331, 2332, 2332, 2333, 2336, 2335, 2330, 2337, - 2333, 2330, 2335, 2338, 2339, 2339, 2340, 2340, 2341, 2342, - 2342, 2343, 2344, 2344, 2349, 2338, 2336, 2345, 2346, 2337, - 2347, 2347, 2350, 2346, 2348, 2348, 2351, 2341, 2349, 2343, - 2352, 2350, 2345, 2353, 2355, 2356, 2356, 2357, 0, 2355, + 2304, 2305, 2294, 2306, 2307, 2298, 2311, 2309, 2313, 2312, + 2307, 2299, 2300, 2305, 2313, 2315, 2314, 2303, 2314, 2311, + 2301, 2304, 2309, 2312, 2306, 2316, 2316, 2317, 2318, 2319, + 2320, 2318, 2317, 2321, 0, 2315, 2322, 2323, 2323, 2324, + 2324, 2325, 2319, 2325, 2326, 2326, 2327, 2321, 2331, 2322, + 2328, 2329, 2329, 2337, 2320, 2330, 2330, 2331, 2332, 2332, + 2331, 2327, 2334, 2328, 2333, 2333, 2336, 2334, 2338, 2339, + 2342, 2336, 2344, 2337, 2340, 2340, 2341, 2341, 2343, 2343, + 2346, 2339, 2345, 2345, 2348, 2348, 2347, 2350, 2338, 2342, + 2344, 2347, 2349, 2349, 2351, 2346, 2352, 2353, 2354, 2356, - 2358, 2358, 2359, 2351, 2352, 2360, 2362, 2361, 2365, 2362, - 2360, 2366, 2353, 2361, 2363, 2363, 2357, 2364, 2364, 2367, - 2359, 2367, 2369, 2370, 2371, 2371, 2366, 2365, 2373, 2374, - 2363, 2375, 2376, 2379, 2377, 2378, 2378, 2369, 2377, 2385, - 2380, 2381, 2370, 2382, 2374, 2380, 2386, 2376, 2373, 2384, - 2384, 2387, 2379, 2386, 2375, 2388, 2381, 2389, 2382, 2385, - 2391, 2390, 2392, 2392, 2394, 2387, 2394, 2395, 2393, 2398, - 2395, 2401, 2397, 2388, 2399, 2389, 2390, 2393, 2397, 2399, - 2402, 2398, 2403, 2400, 2404, 2395, 2391, 2395, 2400, 2404, - 2405, 2410, 2407, 2402, 2408, 2409, 2401, 2407, 2411, 2408, + 2358, 2350, 2360, 2351, 2356, 2357, 2357, 2359, 2359, 2361, + 2362, 2353, 2363, 2352, 2361, 2363, 2362, 2354, 2367, 2358, + 2360, 2364, 2364, 2365, 2365, 2366, 2368, 2370, 2368, 2371, + 2372, 2372, 2374, 2367, 2375, 2376, 2377, 2364, 2380, 2378, + 2379, 2379, 2370, 2378, 2366, 2381, 2382, 2383, 2371, 2375, + 2381, 2377, 2374, 2385, 2385, 2386, 2387, 2380, 2376, 2388, + 2389, 2382, 2383, 2387, 2390, 2391, 2392, 2393, 2393, 2395, + 2394, 2395, 2402, 2388, 2399, 2386, 2403, 2398, 2389, 2394, + 2391, 2396, 2390, 2398, 2396, 2400, 2399, 2404, 2401, 2403, + 2400, 2405, 2392, 2401, 2406, 2408, 2405, 2402, 2409, 2396, - 2409, 2412, 2413, 2403, 2411, 2414, 2410, 2412, 2415, 2418, - 2416, 2419, 2417, 2421, 2415, 2416, 2405, 2417, 2420, 2422, - 2414, 2420, 2423, 2413, 2419, 2426, 2424, 2425, 2422, 2432, - 2434, 2423, 2427, 2421, 2418, 2424, 2425, 2428, 2427, 2426, - 2429, 0, 2430, 2428, 2435, 2429, 2430, 2436, 2436, 2432, - 2434, 2437, 2439, 2435, 2438, 2438, 2442, 2437, 2440, 2440, - 2441, 2439, 2447, 2438, 2444, 2441, 2445, 2446, 2446, 2450, - 2448, 2451, 2453, 2452, 2457, 2502, 2442, 2447, 2442, 2448, - 2444, 2450, 2445, 2455, 2453, 2456, 2455, 2451, 2452, 2458, - 2456, 2459, 2459, 2502, 2457, 2460, 2460, 2462, 2462, 2463, + 2408, 2396, 2410, 2409, 2411, 2412, 2413, 2410, 2404, 2414, + 2415, 2412, 2413, 2417, 2419, 2416, 2420, 2418, 2417, 2411, + 2406, 2416, 2418, 2421, 2422, 2415, 2421, 2423, 2424, 2420, + 2414, 2425, 2426, 2427, 2431, 2433, 2423, 2424, 2431, 2419, + 2425, 2426, 2428, 2429, 2422, 2430, 2435, 2427, 2428, 2429, + 2430, 2436, 2437, 2437, 2440, 2433, 2438, 2443, 2439, 2439, + 2436, 2448, 2438, 2440, 2441, 2441, 2435, 2439, 2442, 2445, + 2446, 2447, 2447, 2442, 2449, 2451, 2448, 2443, 2452, 2443, + 2453, 2454, 2458, 2449, 2457, 2445, 2446, 2451, 2456, 2457, + 0, 2456, 2459, 2454, 2452, 2453, 2460, 2460, 2461, 2461, - 2464, 2458, 2463, 2465, 2466, 2464, 2467, 2468, 2468, 2465, - 2466, 2469, 2470, 2470, 2471, 2467, 2472, 2473, 2474, 2474, - 2476, 2475, 2484, 2477, 0, 2469, 2471, 2475, 2477, 2479, - 2472, 2484, 2480, 2479, 2476, 2480, 2473, 2481, 2481, 2482, - 2483, 2485, 2486, 2487, 2482, 2483, 2489, 2487, 2488, 2488, - 2485, 2491, 2492, 2493, 2494, 2495, 2491, 2496, 2497, 2489, - 2498, 2496, 2486, 2503, 2499, 2498, 2501, 2501, 2504, 2495, - 2499, 2500, 2492, 2493, 2494, 2505, 2506, 2500, 2497, 2509, - 2505, 2511, 2503, 2507, 2507, 2510, 2511, 2504, 2512, 2518, - 2513, 2509, 2522, 2514, 2512, 2514, 2516, 2506, 2513, 2519, + 2463, 2463, 2458, 2464, 2459, 2465, 2464, 2466, 2467, 2468, + 2465, 2469, 2469, 2466, 2467, 2470, 2471, 2471, 2468, 2472, + 2473, 2474, 2475, 2475, 2476, 2477, 2516, 2478, 2516, 2470, + 2476, 2472, 2478, 2480, 2473, 2481, 2485, 2480, 2481, 2477, + 2474, 2482, 2482, 2483, 2484, 2485, 2486, 2487, 2483, 2484, + 2488, 2489, 2489, 2490, 2488, 2486, 2492, 2493, 2494, 2495, + 2496, 2492, 2498, 2500, 2497, 2499, 2490, 2487, 2497, 2500, + 2499, 2502, 2502, 2503, 2496, 2501, 2504, 2493, 2494, 2495, + 2505, 2501, 2498, 2506, 2507, 2508, 2508, 2511, 2506, 2510, + 2513, 2503, 2512, 2518, 2514, 2504, 2513, 2512, 2515, 2505, - 2519, 2510, 2528, 2518, 2520, 2516, 2521, 2520, 2526, 2521, - 2523, 2523, 2526, 2527, 2528, 2529, 2529, 2530, 2522, 2527, - 2533, 2533, 2535, 2537, 2541, 2538, 2530, 2542, 2543, 2541, - 2544, 2545, 2546, 2546, 2551, 2544, 2545, 2537, 2548, 2548, - 2535, 2538, 2550, 2552, 2552, 2553, 2554, 2555, 2550, 2543, - 2557, 2559, 2555, 2542, 2551, 2558, 2561, 2561, 2558, 2560, - 2564, 2553, 2566, 2559, 2563, 2571, 2564, 2567, 2554, 2557, - 2565, 2560, 2572, 2563, 2569, 2569, 2565, 2577, 2570, 0, - 2566, 2570, 2567, 2578, 2571, 2574, 2574, 2575, 2575, 2576, - 2572, 2579, 2578, 2580, 2576, 2577, 2582, 2581, 2580, 2581, + 2514, 2510, 2518, 2511, 2520, 2507, 2515, 2521, 2521, 2522, + 2523, 2524, 2522, 2523, 2525, 2525, 2528, 2529, 2520, 2530, + 2528, 2531, 2531, 2529, 2532, 2535, 2535, 2537, 2539, 2543, + 2540, 2530, 2544, 2532, 2543, 2545, 2546, 2524, 2547, 2548, + 2548, 2546, 2539, 2547, 2552, 2537, 2540, 2550, 2550, 2553, + 2552, 2554, 2554, 2556, 2555, 2557, 2545, 2559, 2544, 2560, + 2557, 2561, 2560, 2563, 2563, 2562, 2566, 2568, 2567, 2553, + 2555, 2565, 2566, 2561, 2567, 2556, 2559, 2562, 2569, 2573, + 2565, 2571, 2571, 2572, 2574, 2568, 2572, 2576, 2576, 2577, + 2577, 2578, 2579, 2569, 2580, 2581, 2578, 2584, 2573, 2582, - 2583, 2584, 2585, 2586, 2579, 2587, 2588, 2585, 2589, 2589, - 2582, 2588, 2593, 2584, 2583, 2590, 2590, 2591, 2591, 2592, - 2592, 2594, 2595, 2586, 2593, 2587, 2599, 2595, 2596, 2596, - 2597, 2597, 2598, 2598, 2600, 2601, 2602, 2603, 2599, 2594, - 2606, 2604, 2605, 2605, 2607, 2607, 2614, 2601, 2608, 2608, - 2609, 2610, 2610, 2611, 2600, 2612, 2602, 2604, 2603, 2606, - 2613, 2609, 2612, 2615, 2616, 2611, 2614, 2617, 2615, 2618, - 2619, 2619, 2613, 2620, 2621, 2621, 2622, 2623, 2624, 2625, - 2626, 2629, 2620, 2627, 2616, 2630, 2630, 2617, 2618, 2631, - 2628, 2624, 2628, 2629, 2626, 2632, 2633, 2623, 2631, 2635, + 2585, 2586, 2574, 2580, 2582, 2583, 2588, 2583, 2581, 2589, + 2579, 2584, 2587, 2586, 2585, 2590, 2596, 2587, 2591, 2591, + 2590, 2592, 2592, 2593, 2593, 2595, 2588, 2594, 2594, 2589, + 2597, 2598, 2598, 2601, 2596, 2597, 2602, 2595, 2599, 2599, + 2600, 2600, 2603, 2604, 2605, 2601, 2606, 2607, 2607, 2608, + 2609, 2609, 2610, 2610, 2603, 2611, 2602, 2612, 2612, 2613, + 2614, 2615, 2606, 2604, 2616, 2605, 2611, 2614, 2608, 2617, + 2618, 2613, 2619, 2615, 2617, 2620, 2621, 2621, 2622, 2623, + 2623, 2624, 2625, 2626, 2616, 2627, 2628, 2622, 2629, 2630, + 2618, 2630, 2619, 2631, 2620, 2633, 2626, 2632, 2632, 2634, - 2636, 2637, 2622, 2625, 2638, 2627, 2639, 2638, 2640, 2641, - 2632, 2633, 2650, 2640, 2641, 2642, 2642, 2635, 2643, 2643, - 2639, 2649, 2636, 2650, 2637, 2644, 2644, 2646, 2646, 2648, - 2648, 2651, 2652, 2654, 2655, 2656, 2657, 2658, 2659, 2649, - 2660, 2661, 2660, 2669, 2662, 2663, 2658, 2652, 2664, 2664, - 2651, 2666, 2655, 2654, 2668, 2666, 2657, 2656, 2659, 2667, - 2667, 2661, 2662, 2663, 2670, 2669, 2671, 2671, 2668, 2673, - 2674, 2674, 2675, 2670, 2676, 2677, 2678, 2680, 2673, 2679, - 2681, 2682, 2683, 2678, 2684, 2685, 2685, 2686, 2686, 2687, - 2675, 2684, 2676, 2677, 2679, 2680, 2688, 2682, 2681, 2689, + 2628, 2635, 2625, 2637, 2633, 2631, 2638, 2624, 2639, 2627, + 2629, 2641, 2640, 2642, 2634, 2640, 2635, 2643, 2642, 2644, + 2644, 2637, 2643, 2645, 2645, 2641, 2646, 2646, 2638, 2648, + 2648, 2639, 2650, 2650, 2651, 2652, 2653, 2656, 2654, 2658, + 2657, 2660, 2659, 2661, 2663, 2662, 2652, 2662, 2664, 2665, + 2660, 2671, 2651, 2654, 2670, 2653, 0, 2656, 2657, 2666, + 2666, 2658, 2659, 2661, 2663, 2668, 2664, 2665, 2670, 2668, + 2669, 2669, 2672, 2671, 2673, 2673, 2675, 2676, 2676, 2677, + 2678, 2672, 2679, 2680, 2681, 2675, 2682, 2683, 2686, 2685, + 2680, 2684, 2687, 2687, 2689, 2686, 0, 2677, 2678, 2681, - 2694, 2683, 2691, 2691, 2693, 2689, 2692, 2692, 2695, 2687, - 2693, 2696, 2697, 2699, 2688, 2698, 2700, 2701, 2694, 2702, - 2698, 2704, 2704, 2695, 2702, 2708, 2697, 2700, 2712, 2703, - 2696, 2703, 2705, 2699, 2705, 2706, 2706, 2701, 2710, 2711, - 2712, 2713, 2716, 2714, 2708, 2715, 2717, 2710, 2714, 2720, - 2715, 2722, 2721, 2724, 2722, 2723, 2723, 2725, 2711, 2726, - 2726, 2713, 2716, 2727, 2728, 2717, 2731, 2729, 2724, 2720, - 2721, 2729, 2732, 2733, 2727, 2725, 2735, 2733, 2732, 2728, - 2737, 2731, 2734, 2734, 2738, 2739, 2740, 2740, 2742, 2735, - 2743, 2747, 2744, 2745, 2745, 2737, 2744, 2746, 2746, 2743, + 2679, 2688, 2688, 2690, 2682, 2683, 2691, 2684, 2685, 2693, + 2693, 2695, 2691, 2696, 2689, 2694, 2694, 2695, 2697, 2698, + 2699, 2690, 2701, 2700, 2702, 2704, 0, 2701, 2705, 2703, + 2706, 2696, 2706, 2705, 2698, 2711, 2697, 2700, 2713, 2699, + 2703, 2707, 2707, 2714, 2702, 2704, 2708, 2713, 2708, 2709, + 2709, 2715, 2716, 2717, 2711, 2718, 2719, 2723, 2717, 2720, + 2718, 2724, 2714, 2715, 2725, 2726, 2726, 2725, 2727, 2728, + 2729, 2729, 2716, 2730, 2731, 2734, 2719, 2723, 2720, 2724, + 2735, 2732, 2738, 2727, 2730, 2732, 2735, 2728, 2736, 2731, + 2734, 2740, 2736, 2737, 2737, 2738, 2741, 2742, 2743, 2743, - 2742, 2748, 2748, 2749, 2738, 2739, 2750, 2751, 2749, 2752, - 2747, 2753, 2754, 2754, 2760, 2750, 2759, 2759, 2761, 2761, - 2762, 2752, 2763, 2751, 2764, 2765, 2768, 2768, 2769, 2766, - 2767, 2753, 2770, 2762, 2765, 2763, 2760, 2764, 2766, 2767, - 2772, 2772, 2778, 2781, 2775, 2777, 2779, 2770, 2769, 2775, - 2777, 2779, 2780, 2783, 2782, 2786, 2778, 2784, 2784, 2788, - 2780, 2783, 2781, 2782, 2788, 2790, 2789, 2791, 2791, 2793, - 2786, 2789, 2792, 2792, 2793, 2794, 2795, 2795, 2796, 2797, - 2790, 2798, 2799, 2800, 2797, 2796, 2801, 2802, 2802, 2800, - 2803, 2801, 2804, 2809, 2794, 2805, 2805, 2804, 0, 2798, + 2745, 2746, 2750, 2747, 2748, 2748, 2740, 2747, 2749, 2749, + 2746, 2755, 2745, 2751, 2751, 2752, 2741, 2742, 2753, 2754, + 2752, 2750, 2756, 2755, 2757, 2757, 2763, 2753, 2762, 2762, + 2764, 2764, 2765, 2766, 2767, 2754, 2771, 2771, 2772, 2773, + 2768, 2769, 2756, 2770, 2784, 2765, 2766, 2767, 2763, 2768, + 2769, 2781, 2770, 0, 2773, 2775, 2775, 2778, 2772, 2780, + 2783, 2782, 2778, 2784, 2780, 2781, 2782, 2785, 2783, 2786, + 2787, 2787, 2789, 2791, 2792, 2793, 2785, 2786, 2791, 2792, + 2794, 2794, 2795, 2795, 2796, 2797, 2799, 2789, 2801, 2796, + 2793, 2798, 2798, 2799, 2800, 2802, 2803, 2806, 2804, 2800, - 2799, 2806, 2806, 2810, 2810, 2803, 2809, 2811, 2812, 2815, - 2811, 2813, 2814, 2812, 2812, 2816, 2813, 2814, 2817, 2818, - 2819, 2816, 2817, 2815, 2818, 2820, 2821, 2822, 2825, 2819, - 2823, 2824, 2826, 2825, 2821, 2829, 2823, 2824, 2827, 2827, - 2820, 2830, 2829, 2833, 2826, 2838, 2830, 2831, 2822, 2835, - 2831, 2836, 2837, 2839, 2835, 2833, 2836, 2837, 2840, 2841, - 2842, 2842, 2843, 2838, 2844, 2847, 2839, 2840, 2841, 2844, - 2848, 2843, 2849, 2852, 2853, 2856, 2848, 2854, 2849, 2855, - 2855, 2857, 2856, 2847, 2858, 2862, 2859, 2860, 2861, 2861, - 2864, 2866, 2852, 2858, 2853, 2867, 2854, 2868, 2868, 2867, + 2805, 2805, 2803, 2804, 2797, 2807, 2801, 2808, 2808, 2812, + 2807, 0, 2806, 2802, 2809, 2809, 2813, 2813, 2814, 2815, + 2818, 2814, 2812, 2816, 2815, 2815, 2817, 2819, 2816, 2822, + 2821, 2817, 2820, 2819, 2818, 2821, 2820, 2823, 2822, 2824, + 2825, 2828, 2826, 2827, 2829, 2836, 2828, 2824, 2826, 2827, + 2830, 2830, 2823, 2832, 2833, 2834, 2829, 2836, 2834, 2833, + 2832, 2825, 2838, 2839, 2840, 2841, 2842, 2838, 2839, 2840, + 2850, 2843, 2844, 2845, 2845, 2846, 2855, 2847, 2856, 2842, + 2843, 2844, 2847, 2841, 2846, 2851, 2852, 2857, 2850, 2858, + 2860, 2851, 2852, 2859, 2859, 2855, 2861, 2860, 2856, 2863, - 2857, 2859, 2860, 2869, 2862, 2864, 2870, 2871, 2872, 2873, - 2875, 2866, 2870, 2871, 2876, 2873, 2874, 2874, 2875, 2877, - 2879, 2880, 2978, 2885, 2877, 2882, 2872, 2883, 2869, 2879, - 2883, 2882, 2884, 2887, 2880, 2890, 2884, 2885, 2978, 2876, - 2886, 2886, 2889, 2889, 2891, 2891, 2892, 2892, 2887, 2894, - 2894, 2895, 2896, 2890, 2897, 2895, 2901, 2896, 2899, 2899, - 2902, 2903, 2904, 2897, 2907, 2902, 2905, 2904, 2904, 2908, - 2908, 2910, 2910, 2903, 2911, 2911, 2901, 2914, 2905, 2912, - 2912, 2915, 2913, 2918, 2907, 2913, 2917, 2917, 2920, 2924, - 2914, 2921, 2921, 2926, 2915, 2922, 2922, 2923, 2923, 2925, + 2862, 2864, 2865, 2865, 2866, 2868, 2870, 2857, 2858, 2862, + 2872, 2872, 2873, 2871, 2863, 2861, 2864, 2871, 2874, 2875, + 2868, 2876, 2877, 2866, 2874, 2875, 2870, 2879, 2877, 2878, + 2878, 2880, 2883, 2881, 2884, 2879, 2886, 2873, 2881, 2876, + 2887, 2883, 2886, 2887, 2888, 2889, 2891, 2884, 2888, 2890, + 2890, 2893, 2893, 2894, 2895, 2895, 2880, 2896, 2896, 2889, + 2899, 2891, 2898, 2898, 2899, 2900, 2901, 2903, 2903, 2905, + 2900, 2894, 2906, 2907, 2908, 2901, 2909, 2906, 2911, 2908, + 2908, 2912, 2912, 2914, 2914, 2907, 2915, 2915, 2909, 2905, + 2916, 2916, 2917, 2918, 2919, 2917, 2921, 2921, 2911, 2922, - 2925, 2918, 2927, 2929, 2924, 2930, 2926, 2935, 2920, 2931, - 2931, 2930, 2932, 2935, 2936, 2939, 2932, 2929, 2938, 2936, - 2927, 2940, 2941, 2938, 2938, 2942, 2943, 2944, 2951, 2945, - 2954, 2942, 2943, 2945, 2946, 2946, 2951, 2952, 2939, 2949, - 2952, 2940, 2941, 2955, 2949, 2957, 2955, 2956, 2956, 2958, - 2959, 2960, 2944, 2961, 2958, 2954, 2962, 2962, 2963, 2965, - 2966, 3010, 2957, 2957, 2971, 3010, 2964, 2961, 2959, 2964, - 2967, 2960, 2963, 2965, 2981, 2969, 0, 2964, 2967, 2966, - 2969, 2969, 2970, 2971, 2972, 2972, 2980, 2970, 2970, 2973, - 2973, 2974, 2974, 2975, 2975, 2976, 2976, 2977, 2977, 2979, + 2924, 2925, 2925, 2926, 2926, 2930, 2918, 2919, 2927, 2927, + 2928, 2929, 2929, 2931, 2933, 2934, 2943, 2922, 2930, 2940, + 2924, 2934, 2935, 2935, 2940, 2928, 2936, 2939, 2933, 2942, + 2936, 2931, 2944, 2939, 2942, 2942, 2945, 2946, 2947, 2943, + 2948, 2949, 2955, 2946, 2947, 2949, 2950, 2950, 2953, 2958, + 2955, 2956, 2944, 2953, 2956, 2959, 2945, 2962, 2959, 2960, + 2960, 2961, 2962, 2963, 2964, 2948, 2965, 2966, 2966, 2967, + 2970, 2973, 2969, 2975, 2958, 3019, 2973, 2973, 2961, 2961, + 2965, 2963, 2968, 2967, 2964, 2968, 2969, 2971, 2985, 2970, + 3019, 2974, 2975, 2968, 2982, 2971, 2974, 2974, 2976, 2976, - 2981, 2982, 2983, 2984, 2979, 2985, 2980, 2983, 2986, 2987, - 2985, 2988, 2990, 2990, 2994, 2982, 0, 2986, 2991, 2991, - 2992, 2993, 2984, 2992, 2996, 2996, 2997, 2993, 3007, 2987, - 3002, 2988, 2994, 2997, 2998, 2998, 2999, 3001, 3001, 3002, - 3003, 2999, 3004, 3005, 3008, 3008, 3007, 3009, 3009, 3003, - 3011, 3004, 3005, 3012, 3013, 3014, 3015, 3018, 3017, 3011, - 3019, 3015, 3015, 3023, 3019, 3013, 3018, 3025, 3023, 3028, - 3014, 3017, 3012, 3024, 3024, 3027, 3027, 3029, 3030, 3032, - 3032, 3025, 3033, 3028, 3038, 3034, 3040, 3039, 3042, 3045, - 3047, 3033, 3039, 3043, 0, 3040, 3030, 3034, 3049, 3043, + 2977, 2977, 2978, 2978, 2979, 2979, 2980, 2980, 2981, 2981, + 2982, 2983, 2984, 2986, 2985, 2987, 2983, 2988, 2989, 2990, + 2987, 2991, 2992, 2989, 2993, 2995, 2995, 2986, 2990, 2996, + 2996, 2997, 2984, 2998, 2997, 2999, 2988, 3001, 3001, 2998, + 3002, 2991, 2992, 3004, 2993, 3003, 3003, 3002, 3004, 3006, + 3006, 3007, 3008, 2999, 3009, 3010, 3012, 3013, 3013, 3016, + 3007, 3008, 3017, 3009, 3010, 3014, 3014, 3015, 3016, 3018, + 3020, 3015, 3022, 3023, 3012, 3020, 3020, 3029, 3029, 3024, + 3018, 3017, 3023, 3024, 3028, 3022, 3030, 3032, 3032, 3028, + 3033, 3034, 3035, 3037, 3037, 3039, 3038, 3043, 3044, 3045, - 3050, 3045, 3029, 3049, 3052, 3050, 3051, 3051, 3042, 3038, - 3054, 3047, 3055, 3052, 3056, 3054, 3057, 3057, 3059, 3059, - 3057, 3060, 3060, 3061, 3061, 3055, 3062, 3063, 3056, 3064, - 0, 3065, 3067, 3071, 3068, 3062, 3065, 3069, 3067, 3068, - 3070, 3070, 3069, 3072, 3073, 3074, 3075, 3063, 3064, 3077, - 3074, 3071, 3076, 3078, 3078, 3072, 3080, 3081, 3076, 3084, - 3080, 3082, 3081, 3088, 3075, 3073, 3082, 3083, 3083, 3085, - 3086, 3090, 3090, 3092, 3077, 3093, 3094, 3095, 3084, 3097, - 3098, 3095, 3096, 3088, 3085, 3086, 3092, 3100, 3093, 3094, - 3099, 3096, 3100, 3101, 3103, 3097, 3102, 3102, 3099, 3098, + 3030, 3047, 3050, 3044, 3033, 3038, 3048, 3039, 3045, 3052, + 3035, 3068, 3048, 3054, 3050, 3055, 3034, 3057, 3054, 3061, + 3055, 3047, 3043, 3056, 3056, 3060, 3057, 3059, 3064, 3064, + 3052, 3068, 3059, 3061, 3069, 3062, 3062, 3067, 3060, 3062, + 3065, 3065, 3066, 3066, 3070, 3072, 3067, 3073, 3076, 3070, + 3074, 3072, 3073, 3069, 3078, 3074, 3075, 3075, 3077, 3079, + 3080, 3081, 3082, 3093, 3079, 3089, 3076, 3081, 3083, 3083, + 3077, 3090, 3085, 3091, 3086, 3078, 3085, 3087, 3080, 3086, + 3088, 3088, 3087, 3093, 3089, 3097, 3090, 3082, 3091, 3095, + 3095, 3098, 3099, 3100, 3101, 3102, 3103, 3100, 3097, 3104, - 3104, 3105, 3107, 3103, 3106, 3106, 3110, 3114, 3111, 3112, - 3112, 3110, 3110, 3101, 3111, 3116, 3116, 3118, 3104, 3119, - 3120, 3107, 3121, 3126, 3122, 3120, 3129, 3105, 3114, 3122, - 3125, 3125, 3127, 3118, 3128, 3119, 3130, 3133, 3121, 3134, - 3128, 3127, 3137, 3126, 3132, 3132, 3135, 3135, 3137, 3129, - 3139, 3133, 3141, 3140, 3143, 3130, 3146, 3141, 3134, 3140, - 3144, 3144, 3145, 3145, 3147, 3148, 3148, 3149, 3150, 3151, - 3139, 3146, 3153, 3152, 3154, 3155, 3143, 3150, 3149, 3152, - 3156, 3156, 3157, 3165, 3147, 3148, 3154, 3158, 3164, 3151, - 3158, 3153, 3170, 3159, 0, 3155, 3159, 3157, 3160, 3160, + 3106, 3105, 3110, 3101, 3098, 3099, 3105, 3104, 3107, 3107, + 3108, 3102, 3109, 3111, 3111, 3103, 3112, 3112, 3113, 3108, + 3106, 3116, 3120, 3117, 3118, 3118, 3116, 3116, 3110, 3117, + 3109, 3122, 3122, 3124, 3125, 3126, 3127, 3113, 3132, 3128, + 3126, 3131, 3131, 3120, 3128, 3133, 3135, 3134, 3136, 3124, + 3125, 3139, 3127, 3134, 3133, 3138, 3138, 3140, 3132, 3141, + 3141, 3145, 3143, 3149, 3146, 3139, 3147, 3136, 3143, 3135, + 3146, 3147, 3150, 3150, 3151, 3151, 3140, 3152, 3153, 3154, + 3154, 3145, 3155, 3157, 3158, 3149, 3156, 3159, 3160, 3161, + 3158, 3164, 3152, 3155, 3164, 3156, 3162, 3162, 3153, 3154, - 3164, 3166, 3169, 3165, 3167, 3167, 3168, 3166, 3169, 3168, - 3170, 3172, 3173, 3173, 3174, 3175, 3172, 3176, 3177, 3174, - 3178, 3178, 3181, 3176, 3182, 3180, 3183, 3184, 3184, 3185, - 3186, 0, 3187, 3192, 3175, 3177, 3177, 3180, 3192, 3183, - 3181, 3187, 3189, 3189, 3190, 3190, 3186, 3193, 3185, 3182, - 3191, 3191, 3194, 3195, 3195, 3196, 3196, 3194, 3197, 3197, - 3199, 3193, 3198, 3198, 3200, 3201, 3205, 3202, 3204, 3204, - 3209, 3201, 3202, 3199, 3207, 3207, 3211, 3212, 3213, 3214, - 3215, 3215, 3205, 3217, 3217, 3218, 3219, 3221, 3220, 3209, - 3200, 3222, 3223, 3223, 3224, 3224, 3226, 3213, 3211, 3212, + 3160, 3163, 3165, 3157, 3171, 3165, 3159, 3166, 3166, 3161, + 3170, 3172, 3173, 3173, 3175, 3174, 3163, 3172, 3174, 3176, + 3175, 3178, 3170, 3181, 3171, 3180, 3178, 3179, 3179, 3182, + 3180, 3183, 3184, 3184, 3186, 3182, 3187, 3176, 3188, 3189, + 3190, 3190, 3181, 3191, 3192, 3199, 3186, 3193, 3183, 3183, + 3195, 3195, 3189, 3206, 3187, 0, 3193, 3196, 3196, 3199, + 3192, 3198, 3191, 3188, 3197, 3197, 3198, 3200, 3201, 3201, + 3202, 3202, 3200, 3203, 3203, 3204, 3204, 3205, 3207, 3206, + 3208, 3211, 3211, 3212, 3207, 3208, 3214, 3214, 3216, 3218, + 3205, 3219, 3221, 3220, 3222, 3222, 3224, 3224, 3225, 3212, - 3222, 3214, 3220, 3227, 3228, 3219, 3229, 3221, 3230, 3227, - 3233, 3218, 0, 3230, 3226, 3234, 3234, 3236, 3236, 3238, - 3240, 3237, 3239, 3247, 3228, 3229, 3237, 3241, 3239, 3242, - 3242, 3233, 3240, 3238, 3243, 3241, 3245, 3246, 3248, 3243, - 3245, 3249, 3246, 3247, 3250, 3251, 3249, 3253, 3254, 3255, - 3256, 3251, 3259, 3258, 3284, 3253, 3250, 3260, 3248, 3261, - 3262, 3264, 3265, 3269, 3271, 3262, 3264, 3254, 3259, 3255, - 3256, 3258, 3266, 3284, 3260, 3260, 3267, 3271, 3266, 0, - 3261, 3267, 3265, 3269, 3270, 3275, 3275, 3270, 3276, 3276, - 3277, 3282, 3282, 3283, 3277, 3285, 3285, 3287, 3283, 3289, + 3226, 3227, 3228, 3230, 3230, 3231, 3231, 3216, 3229, 3233, + 3234, 3218, 3220, 3219, 3221, 3227, 3234, 3229, 3235, 3226, + 3236, 3237, 3228, 3240, 3225, 0, 3237, 3233, 3241, 3241, + 3243, 3243, 3244, 3245, 3246, 3248, 3247, 3244, 3235, 3236, + 3246, 3249, 3249, 3248, 3240, 3250, 3253, 3245, 3247, 3252, + 3250, 3253, 3254, 3252, 3255, 3256, 3257, 3258, 3260, 3261, + 3256, 3262, 3263, 3258, 3266, 3265, 3260, 3267, 3257, 3268, + 3269, 3271, 3254, 3272, 3255, 3269, 3271, 3276, 3261, 0, + 3266, 3262, 3263, 3265, 3267, 3267, 3273, 3278, 3277, 3274, + 3268, 3277, 3273, 3272, 3274, 3282, 3282, 3276, 3283, 3283, - 3289, 3290, 3290, 3294, 3290, 3291, 3291, 3294, 3291, 3292, - 3292, 3299, 3287, 3293, 3293, 3296, 3293, 3297, 3298, 3298, - 3296, 3300, 3303, 3303, 3304, 3305, 3297, 3306, 3308, 3299, - 3307, 3307, 3306, 3311, 3312, 3300, 3313, 3314, 3315, 3317, - 3313, 3312, 3318, 3320, 3304, 3305, 3314, 3318, 3308, 3319, - 3319, 3324, 3320, 3315, 3321, 3321, 3329, 3317, 3311, 3322, - 3322, 3323, 3323, 3325, 3326, 3327, 3324, 3330, 3325, 3328, - 3327, 3327, 3331, 3326, 3332, 3328, 3326, 3334, 3333, 3332, - 3336, 3329, 3330, 3333, 3335, 3335, 3336, 3340, 3337, 3338, - 3338, 3339, 3339, 3331, 3337, 3341, 3334, 3344, 3344, 3347, + 3278, 3284, 3289, 3289, 3290, 3284, 3291, 3292, 3292, 3290, + 0, 3294, 3296, 3296, 3297, 3297, 3301, 3297, 3298, 3298, + 3301, 3298, 3299, 3299, 3303, 3291, 3294, 3300, 3300, 3303, + 3300, 3304, 3305, 3305, 3306, 3307, 3310, 3310, 3311, 3312, + 3304, 3313, 3314, 3314, 3315, 3318, 3313, 3319, 3321, 3307, + 3322, 3320, 3306, 3324, 3319, 3320, 3325, 3321, 3311, 3312, + 3327, 3325, 3326, 3326, 3315, 3322, 3328, 3328, 3331, 3327, + 3318, 3324, 3329, 3329, 3330, 3330, 3332, 3333, 3336, 3334, + 3337, 3332, 3335, 3331, 3334, 3334, 3333, 3338, 3335, 3333, + 3341, 3339, 3340, 3342, 3342, 3337, 3339, 3340, 3343, 3344, - 3341, 3349, 3340, 3346, 3346, 3351, 3351, 3360, 3347, 3352, - 3352, 3353, 3353, 3354, 3354, 3356, 3356, 3357, 3357, 3349, - 3358, 3358, 3359, 3359, 3366, 3362, 3363, 3363, 3364, 3364, - 3365, 3367, 3372, 3360, 3362, 3370, 3366, 3369, 3369, 3365, - 3371, 3371, 3373, 3378, 3374, 3375, 3375, 3372, 3376, 3376, - 3382, 3367, 3379, 3379, 3370, 3373, 3374, 3383, 3378, 3384, - 3383, 3385, 3385, 3386, 3388, 3389, 3390, 3388, 3382, 3391, - 3392, 3389, 3393, 3396, 3391, 3394, 3404, 3397, 3400, 3396, - 3390, 3386, 3400, 3401, 3405, 3384, 3397, 3414, 3418, 3392, - 3393, 3394, 3414, 3415, 3419, 3419, 3415, 3424, 3401, 3420, + 3345, 3345, 3347, 3336, 3343, 3344, 3346, 3346, 3338, 3341, + 3348, 3351, 3351, 3353, 3353, 3348, 3354, 3347, 3356, 3358, + 3358, 3359, 3359, 3360, 3360, 3354, 3361, 3361, 3363, 3363, + 3364, 3364, 3365, 3365, 3366, 3366, 3356, 3367, 3369, 3370, + 3370, 3371, 3371, 3372, 3373, 3374, 3379, 3369, 3376, 3376, + 3377, 3380, 3372, 3378, 3378, 3381, 3373, 3382, 3382, 3383, + 3383, 3379, 3385, 3367, 3380, 3374, 3389, 3381, 3391, 3377, + 3386, 3386, 3390, 3392, 3392, 3390, 3395, 3385, 3393, 3395, + 3396, 3397, 3398, 3399, 3389, 3400, 3396, 3398, 3401, 3404, + 3411, 3403, 3408, 3412, 3391, 3397, 3393, 3403, 3404, 3426, - 3420, 3418, 3404, 3425, 3405, 3422, 3422, 3426, 3427, 3429, - 3431, 3426, 3425, 3432, 3433, 3434, 3435, 3434, 3438, 3433, - 3424, 3436, 3436, 3429, 3432, 3437, 3439, 3440, 3427, 3441, - 3442, 3435, 3443, 3431, 3444, 3445, 3446, 3438, 3437, 3448, - 3445, 3443, 3447, 3440, 3439, 3442, 3444, 3447, 3449, 3449, - 3450, 3451, 3455, 3456, 3441, 3458, 3451, 3446, 3448, 3457, - 3457, 3459, 3459, 3463, 3458, 3464, 3455, 3460, 3460, 3468, - 3450, 3461, 3461, 3456, 3462, 3462, 3465, 3469, 3466, 3465, - 3480, 3467, 3463, 3466, 3470, 3464, 3467, 3471, 3472, 3475, - 3470, 3473, 3469, 3481, 3468, 3480, 3473, 3474, 3474, 3484, + 3426, 3407, 3399, 3400, 3401, 3407, 3421, 3408, 3425, 3422, + 3431, 3421, 3422, 3412, 3427, 3427, 3411, 3429, 3429, 3432, + 3433, 3425, 3434, 3436, 3433, 3438, 3440, 3439, 3432, 3442, + 3441, 3440, 3441, 3431, 3443, 3443, 3444, 3436, 3439, 3445, + 3447, 3446, 3434, 3448, 3442, 3449, 3450, 3452, 3438, 3444, + 3451, 3453, 3452, 3462, 3455, 3450, 3447, 3457, 3445, 3446, + 3449, 3454, 3451, 3456, 3456, 3458, 3454, 3462, 3448, 3463, + 3458, 3465, 3453, 3455, 3464, 3464, 3470, 3457, 3466, 3466, + 3465, 3467, 3467, 3468, 3468, 3469, 3469, 3471, 3472, 3463, + 3475, 3472, 3473, 3474, 3476, 3470, 3477, 3473, 3474, 3478, - 3472, 3471, 3476, 3476, 3477, 3477, 3479, 3479, 3486, 3475, - 3482, 3482, 3481, 3491, 3484, 3489, 3489, 3490, 3490, 3492, - 3495, 3491, 3493, 3494, 3496, 3497, 3486, 3498, 3493, 3494, - 3499, 3499, 3498, 3505, 3495, 3501, 3501, 3496, 3492, 3506, - 3511, 3508, 3509, 3512, 3497, 3513, 3509, 3516, 3512, 3514, - 3515, 3517, 3518, 3522, 3505, 3508, 3517, 3518, 3523, 3506, - 3511, 3524, 3514, 3515, 3513, 3527, 3516, 3519, 3519, 3525, - 3525, 3527, 3526, 3522, 3528, 3528, 3523, 3526, 3529, 3530, - 3524, 3531, 3532, 3529, 3530, 3533, 3531, 3535, 3535, 3536, - 3540, 3533, 3537, 3537, 3536, 3539, 3541, 3542, 3543, 3539, + 3479, 3480, 3477, 3481, 3481, 3482, 3480, 3471, 3487, 3476, + 3483, 3483, 3479, 3478, 3488, 3475, 3484, 3484, 3486, 3486, + 3489, 3489, 3491, 3487, 3493, 3482, 3496, 3496, 3497, 3497, + 3498, 3499, 3502, 3488, 3500, 3501, 3503, 3491, 3498, 3504, + 3500, 3501, 3493, 3505, 3506, 3506, 3502, 3512, 3505, 3503, + 3499, 3508, 3508, 3513, 3518, 3515, 3516, 3519, 3504, 3520, + 3516, 3523, 3519, 3521, 3522, 3524, 3525, 3529, 3512, 3515, + 3524, 3525, 3530, 3513, 3518, 3531, 3521, 3522, 3520, 3534, + 3523, 3526, 3526, 3532, 3532, 3534, 3533, 3529, 3535, 3535, + 3530, 3533, 3536, 3537, 3531, 3538, 3539, 3536, 3537, 3540, - 3544, 3532, 3545, 3541, 3553, 3546, 3544, 3548, 3548, 3540, - 3550, 3550, 3554, 3551, 3552, 3555, 3542, 3543, 3546, 3552, - 3558, 3545, 3551, 3553, 3557, 3551, 3556, 3556, 3555, 3557, - 3560, 3554, 3562, 3558, 3561, 3561, 3563, 3563, 3564, 3564, - 3565, 3566, 3567, 3568, 3568, 3565, 0, 3569, 3566, 3571, - 3571, 3562, 3569, 3570, 3574, 3570, 3560, 3572, 3573, 3576, - 3579, 3567, 3575, 3583, 3572, 3573, 3581, 3575, 3578, 3578, - 3582, 3581, 3584, 3574, 3588, 3582, 3585, 3585, 3576, 3579, - 3587, 3587, 3583, 3589, 3590, 3590, 3591, 3591, 3592, 3594, - 3594, 3584, 3596, 3588, 3602, 3592, 3595, 3595, 3598, 3596, + 3538, 3542, 3542, 3543, 3547, 3540, 3544, 3544, 3543, 3546, + 3548, 3549, 3550, 3546, 3551, 3539, 3552, 3548, 3560, 3553, + 3551, 3555, 3555, 3547, 3557, 3557, 3561, 3558, 3559, 3562, + 3549, 3550, 3553, 3559, 3565, 3552, 3558, 3560, 3564, 3558, + 3563, 3563, 3562, 3564, 3567, 3561, 3569, 3565, 3568, 3568, + 3570, 3570, 3571, 3571, 3572, 3573, 3574, 3575, 3575, 3572, + 0, 3576, 3573, 3578, 3578, 3569, 3576, 3577, 3581, 3577, + 3567, 3579, 3580, 3583, 3586, 3574, 3582, 3590, 3579, 3580, + 3588, 3582, 3585, 3585, 3589, 3588, 3591, 3581, 3595, 3589, + 3592, 3592, 3583, 3586, 3594, 3594, 3590, 3596, 3597, 3597, - 3601, 3603, 3589, 3598, 0, 3601, 3604, 3604, 3605, 3605, - 0, 0, 0, 3602, 0, 0, 0, 0, 0, 0, - 3603, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3610, 3610, - 3610, 3610, 3610, 3610, 3610, 3611, 3611, 3611, 3611, 3611, - 3611, 3611, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3613, - 3613, 3613, 3613, 3613, 3613, 3613, 3614, 3614, 3614, 3614, - 3614, 3614, 3614, 3615, 3615, 3615, 3615, 3615, 3615, 3615, - 3617, 3617, 0, 3617, 3617, 3617, 3617, 3618, 3618, 0, - 0, 0, 3618, 3618, 3619, 3619, 0, 0, 3619, 0, - 3619, 3620, 0, 0, 0, 0, 0, 3620, 3621, 3621, + 3598, 3598, 3599, 3601, 3601, 3591, 3603, 3595, 3609, 3599, + 3602, 3602, 3605, 3603, 3608, 3610, 3596, 3605, 0, 3608, + 3611, 3611, 3612, 3612, 0, 0, 0, 3609, 0, 0, + 0, 0, 0, 0, 3610, 3616, 3616, 3616, 3616, 3616, + 3616, 3616, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3618, + 3618, 3618, 3618, 3618, 3618, 3618, 3619, 3619, 3619, 3619, + 3619, 3619, 3619, 3620, 3620, 3620, 3620, 3620, 3620, 3620, + 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3622, 3622, 3622, + 3622, 3622, 3622, 3622, 3624, 3624, 0, 3624, 3624, 3624, + 3624, 3625, 3625, 0, 0, 0, 3625, 3625, 3626, 3626, + + 0, 0, 3626, 0, 3626, 3627, 0, 0, 0, 0, + 0, 3627, 3628, 3628, 0, 0, 0, 3628, 3628, 3629, + 0, 0, 0, 0, 0, 3629, 3630, 3630, 0, 3630, + 3630, 3630, 3630, 3631, 0, 0, 0, 0, 0, 3631, + 3632, 3632, 0, 0, 0, 3632, 3632, 3633, 3633, 0, + 3633, 3633, 3633, 3633, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, + 3615, 3615, 3615, 3615, 3615 - 0, 0, 0, 3621, 3621, 3622, 0, 0, 0, 0, - 0, 3622, 3623, 3623, 0, 3623, 3623, 3623, 3623, 3624, - 0, 0, 0, 0, 0, 3624, 3625, 3625, 0, 0, - 0, 3625, 3625, 3626, 3626, 0, 3626, 3626, 3626, 3626, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, 3608, - 3608 } ; static yy_state_type yy_last_accepting_state; @@ -3397,7 +3404,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 3399 "" +#line 3406 "" #define INITIAL 0 #define quotedstring 1 @@ -3586,7 +3593,7 @@ YY_DECL #line 211 "./util/configlexer.lex" -#line 3588 "" +#line 3595 "" if ( !(yy_init) ) { @@ -3645,13 +3652,13 @@ yy_match: 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 >= 3609 ) + if ( yy_current_state >= 3616 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7041 ); + while ( yy_base[yy_current_state] != 7055 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4131,77 +4138,77 @@ YY_RULE_SETUP case 91: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_KEEP_PROBING) } +{ YDVAR(1, VAR_INFRA_CACHE_MAX_RTT) } YY_BREAK case 92: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_KEEP_PROBING) } YY_BREAK case 93: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 94: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 95: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_CONNECT) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 96: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_UDP_CONNECT) } YY_BREAK case 97: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 98: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 99: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 100: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 101: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 102: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 103: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 104: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 105: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 106: YY_RULE_SETUP @@ -4211,72 +4218,72 @@ YY_RULE_SETUP case 107: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 108: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 109: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 110: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 111: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 112: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 113: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 114: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 115: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 116: YY_RULE_SETUP #line 330 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 117: YY_RULE_SETUP #line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 118: YY_RULE_SETUP #line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 119: YY_RULE_SETUP #line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 120: YY_RULE_SETUP #line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 121: YY_RULE_SETUP @@ -4286,37 +4293,37 @@ YY_RULE_SETUP case 122: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 123: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 125: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 126: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 127: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 128: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 129: YY_RULE_SETUP @@ -4326,57 +4333,57 @@ YY_RULE_SETUP case 130: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 131: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) } YY_BREAK case 132: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 133: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 134: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 135: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 136: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 137: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 138: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 139: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) } YY_BREAK case 140: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 141: YY_RULE_SETUP @@ -4386,756 +4393,756 @@ YY_RULE_SETUP case 142: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 143: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 144: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 145: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 146: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 147: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 148: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 149: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 150: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 151: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 152: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 153: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HTTP_USER_AGENT) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_MAX_RESTART) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_MAX_RESTART) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 185: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 186: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 187: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 188: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 189: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 190: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 191: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 192: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 193: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } +{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } YY_BREAK case 194: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 195: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 196: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 197: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 198: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 199: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 200: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 201: YY_RULE_SETUP -#line 416 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +#line 415 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_CHECK) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } +{ YDVAR(1, VAR_ZONEMD_CHECK) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 256: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 257: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 258: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 259: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 260: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 261: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 262: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 263: YY_RULE_SETUP -#line 479 "./util/configlexer.lex" +#line 478 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 264: YY_RULE_SETUP -#line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 480 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 265: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 266: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 267: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 268: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 269: YY_RULE_SETUP -#line 487 "./util/configlexer.lex" +#line 486 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 270: YY_RULE_SETUP -#line 489 "./util/configlexer.lex" +#line 488 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 271: YY_RULE_SETUP -#line 491 "./util/configlexer.lex" +#line 490 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 272: YY_RULE_SETUP -#line 493 "./util/configlexer.lex" +#line 492 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 273: YY_RULE_SETUP -#line 495 "./util/configlexer.lex" +#line 494 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 274: YY_RULE_SETUP -#line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 496 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 275: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 285: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 286: YY_RULE_SETUP #line 509 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } YY_BREAK case 287: YY_RULE_SETUP #line 510 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } +{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } YY_BREAK case 288: YY_RULE_SETUP #line 511 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } YY_BREAK case 289: YY_RULE_SETUP #line 512 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 290: YY_RULE_SETUP #line 513 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 291: YY_RULE_SETUP @@ -5150,119 +5157,119 @@ YY_RULE_SETUP case 293: YY_RULE_SETUP #line 516 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 294: YY_RULE_SETUP #line 517 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 295: YY_RULE_SETUP #line 518 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 296: YY_RULE_SETUP #line 519 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 297: YY_RULE_SETUP #line 520 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 298: YY_RULE_SETUP #line 521 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 299: YY_RULE_SETUP #line 522 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 300: YY_RULE_SETUP #line 523 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 301: YY_RULE_SETUP #line 524 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 302: YY_RULE_SETUP #line 525 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 303: YY_RULE_SETUP #line 526 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 304: YY_RULE_SETUP -#line 528 "./util/configlexer.lex" +#line 527 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 305: YY_RULE_SETUP -#line 530 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 529 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 308: YY_RULE_SETUP #line 533 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 309: YY_RULE_SETUP #line 534 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 310: YY_RULE_SETUP #line 535 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 311: YY_RULE_SETUP #line 536 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 312: YY_RULE_SETUP #line 537 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 313: YY_RULE_SETUP #line 538 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 314: YY_RULE_SETUP #line 539 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 315: YY_RULE_SETUP #line 540 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 316: YY_RULE_SETUP @@ -5272,128 +5279,133 @@ YY_RULE_SETUP case 317: YY_RULE_SETUP #line 542 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 318: YY_RULE_SETUP #line 543 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 319: YY_RULE_SETUP #line 544 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 320: YY_RULE_SETUP #line 545 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 321: YY_RULE_SETUP #line 546 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 322: YY_RULE_SETUP #line 547 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 323: YY_RULE_SETUP #line 548 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 324: YY_RULE_SETUP #line 549 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 325: YY_RULE_SETUP #line 550 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 326: YY_RULE_SETUP #line 551 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 327: YY_RULE_SETUP #line 552 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 328: YY_RULE_SETUP #line 553 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 329: YY_RULE_SETUP #line 554 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 330: YY_RULE_SETUP #line 555 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 331: YY_RULE_SETUP #line 556 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } YY_BREAK case 332: YY_RULE_SETUP #line 557 "./util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } YY_BREAK case 333: YY_RULE_SETUP #line 558 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDE ) } +{ YDVAR(1, VAR_NSID ) } YY_BREAK case 334: YY_RULE_SETUP #line 559 "./util/configlexer.lex" -{ YDVAR(1, VAR_UPSTREAM_COOKIES ) } +{ YDVAR(1, VAR_EDE ) } YY_BREAK case 335: -/* rule 335 can match eol */ YY_RULE_SETUP #line 560 "./util/configlexer.lex" +{ YDVAR(1, VAR_UPSTREAM_COOKIES ) } + YY_BREAK +case 336: +/* rule 336 can match eol */ +YY_RULE_SETUP +#line 561 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 336: +case 337: YY_RULE_SETUP -#line 563 "./util/configlexer.lex" +#line 564 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 564 "./util/configlexer.lex" +#line 565 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 337: -YY_RULE_SETUP -#line 569 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 338: -/* rule 338 can match eol */ YY_RULE_SETUP #line 570 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 339: +/* rule 339 can match eol */ +YY_RULE_SETUP +#line 571 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 339: +case 340: YY_RULE_SETUP -#line 572 "./util/configlexer.lex" +#line 573 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5406,34 +5418,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 340: +case 341: YY_RULE_SETUP -#line 584 "./util/configlexer.lex" +#line 585 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 585 "./util/configlexer.lex" +#line 586 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 341: -YY_RULE_SETUP -#line 590 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 342: -/* rule 342 can match eol */ YY_RULE_SETUP #line 591 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 343: +/* rule 343 can match eol */ +YY_RULE_SETUP +#line 592 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 343: +case 344: YY_RULE_SETUP -#line 593 "./util/configlexer.lex" +#line 594 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5446,38 +5458,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 344: +case 345: YY_RULE_SETUP -#line 605 "./util/configlexer.lex" +#line 606 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 607 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 345: -YY_RULE_SETUP -#line 611 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 346: -/* rule 346 can match eol */ YY_RULE_SETUP #line 612 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 347: +/* rule 347 can match eol */ YY_RULE_SETUP #line 613 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 348: YY_RULE_SETUP #line 614 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 349: +YY_RULE_SETUP +#line 615 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5485,27 +5497,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 619 "./util/configlexer.lex" +#line 620 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 349: -YY_RULE_SETUP -#line 623 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 350: -/* rule 350 can match eol */ YY_RULE_SETUP #line 624 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 351: +/* rule 351 can match eol */ +YY_RULE_SETUP +#line 625 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 351: +case 352: YY_RULE_SETUP -#line 626 "./util/configlexer.lex" +#line 627 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5515,7 +5527,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 632 "./util/configlexer.lex" +#line 633 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5530,39 +5542,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 352: +case 353: YY_RULE_SETUP -#line 646 "./util/configlexer.lex" +#line 647 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 649 "./util/configlexer.lex" +#line 650 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 353: -YY_RULE_SETUP -#line 653 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK case 354: -/* rule 354 can match eol */ YY_RULE_SETUP #line 654 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 355: +/* rule 355 can match eol */ YY_RULE_SETUP #line 655 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK case 356: YY_RULE_SETUP #line 656 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 357: +YY_RULE_SETUP +#line 657 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5571,29 +5583,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 662 "./util/configlexer.lex" +#line 663 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 357: -YY_RULE_SETUP -#line 666 "./util/configlexer.lex" -{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } - YY_BREAK case 358: -/* rule 358 can match eol */ YY_RULE_SETUP #line 667 "./util/configlexer.lex" +{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 359: +/* rule 359 can match eol */ +YY_RULE_SETUP +#line 668 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 359: +case 360: YY_RULE_SETUP -#line 671 "./util/configlexer.lex" +#line 672 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5602,33 +5614,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 360: +case 361: YY_RULE_SETUP -#line 679 "./util/configlexer.lex" +#line 680 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 361: +case 362: YY_RULE_SETUP -#line 683 "./util/configlexer.lex" +#line 684 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 362: +case 363: YY_RULE_SETUP -#line 687 "./util/configlexer.lex" +#line 688 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 363: +case 364: YY_RULE_SETUP -#line 691 "./util/configlexer.lex" +#line 692 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5630 "" +#line 5642 "" case YY_END_OF_BUFFER: { @@ -5918,7 +5930,7 @@ static int yy_get_next_buffer (void) 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 >= 3609 ) + if ( yy_current_state >= 3616 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -5946,11 +5958,11 @@ static int yy_get_next_buffer (void) 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 >= 3609 ) + if ( yy_current_state >= 3616 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 3608); + yy_is_jam = (yy_current_state == 3615); return yy_is_jam ? 0 : yy_current_state; } @@ -6586,7 +6598,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 691 "./util/configlexer.lex" +#line 692 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 4a4afdb81..356893b00 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -302,6 +302,7 @@ infra-cache-slabs{COLON} { YDVAR(1, VAR_INFRA_CACHE_SLABS) } infra-cache-numhosts{COLON} { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } infra-cache-lame-size{COLON} { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } infra-cache-min-rtt{COLON} { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +infra-cache-max-rtt{COLON} { YDVAR(1, VAR_INFRA_CACHE_MAX_RTT) } infra-keep-probing{COLON} { YDVAR(1, VAR_INFRA_KEEP_PROBING) } num-queries-per-thread{COLON} { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } jostle-timeout{COLON} { YDVAR(1, VAR_JOSTLE_TIMEOUT) } diff --git a/util/configparser.c b/util/configparser.c index 84d2039eb..373f61e4c 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -227,170 +227,171 @@ VAR_UNBLOCK_LAN_ZONES = 416, VAR_INSECURE_LAN_ZONES = 417, VAR_INFRA_CACHE_MIN_RTT = 418, - VAR_INFRA_KEEP_PROBING = 419, - VAR_DNS64_PREFIX = 420, - VAR_DNS64_SYNTHALL = 421, - VAR_DNS64_IGNORE_AAAA = 422, - VAR_DNSTAP = 423, - VAR_DNSTAP_ENABLE = 424, - VAR_DNSTAP_SOCKET_PATH = 425, - VAR_DNSTAP_IP = 426, - VAR_DNSTAP_TLS = 427, - VAR_DNSTAP_TLS_SERVER_NAME = 428, - VAR_DNSTAP_TLS_CERT_BUNDLE = 429, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 430, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 431, - VAR_DNSTAP_SEND_IDENTITY = 432, - VAR_DNSTAP_SEND_VERSION = 433, - VAR_DNSTAP_BIDIRECTIONAL = 434, - VAR_DNSTAP_IDENTITY = 435, - VAR_DNSTAP_VERSION = 436, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 437, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 438, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 439, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 440, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 441, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 442, - VAR_RESPONSE_IP_TAG = 443, - VAR_RESPONSE_IP = 444, - VAR_RESPONSE_IP_DATA = 445, - VAR_HARDEN_ALGO_DOWNGRADE = 446, - VAR_IP_TRANSPARENT = 447, - VAR_IP_DSCP = 448, - VAR_DISABLE_DNSSEC_LAME_CHECK = 449, - VAR_IP_RATELIMIT = 450, - VAR_IP_RATELIMIT_SLABS = 451, - VAR_IP_RATELIMIT_SIZE = 452, - VAR_RATELIMIT = 453, - VAR_RATELIMIT_SLABS = 454, - VAR_RATELIMIT_SIZE = 455, - VAR_OUTBOUND_MSG_RETRY = 456, - VAR_RATELIMIT_FOR_DOMAIN = 457, - VAR_RATELIMIT_BELOW_DOMAIN = 458, - VAR_IP_RATELIMIT_FACTOR = 459, - VAR_RATELIMIT_FACTOR = 460, - VAR_IP_RATELIMIT_BACKOFF = 461, - VAR_RATELIMIT_BACKOFF = 462, - VAR_SEND_CLIENT_SUBNET = 463, - VAR_CLIENT_SUBNET_ZONE = 464, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 465, - VAR_CLIENT_SUBNET_OPCODE = 466, - VAR_MAX_CLIENT_SUBNET_IPV4 = 467, - VAR_MAX_CLIENT_SUBNET_IPV6 = 468, - VAR_MIN_CLIENT_SUBNET_IPV4 = 469, - VAR_MIN_CLIENT_SUBNET_IPV6 = 470, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 471, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 472, - VAR_CAPS_WHITELIST = 473, - VAR_CACHE_MAX_NEGATIVE_TTL = 474, - VAR_PERMIT_SMALL_HOLDDOWN = 475, - VAR_QNAME_MINIMISATION = 476, - VAR_QNAME_MINIMISATION_STRICT = 477, - VAR_IP_FREEBIND = 478, - VAR_DEFINE_TAG = 479, - VAR_LOCAL_ZONE_TAG = 480, - VAR_ACCESS_CONTROL_TAG = 481, - VAR_LOCAL_ZONE_OVERRIDE = 482, - VAR_ACCESS_CONTROL_TAG_ACTION = 483, - VAR_ACCESS_CONTROL_TAG_DATA = 484, - VAR_VIEW = 485, - VAR_ACCESS_CONTROL_VIEW = 486, - VAR_VIEW_FIRST = 487, - VAR_SERVE_EXPIRED = 488, - VAR_SERVE_EXPIRED_TTL = 489, - VAR_SERVE_EXPIRED_TTL_RESET = 490, - VAR_SERVE_EXPIRED_REPLY_TTL = 491, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, - VAR_EDE_SERVE_EXPIRED = 493, - VAR_SERVE_ORIGINAL_TTL = 494, - VAR_FAKE_DSA = 495, - VAR_FAKE_SHA1 = 496, - VAR_LOG_IDENTITY = 497, - VAR_HIDE_TRUSTANCHOR = 498, - VAR_HIDE_HTTP_USER_AGENT = 499, - VAR_HTTP_USER_AGENT = 500, - VAR_TRUST_ANCHOR_SIGNALING = 501, - VAR_AGGRESSIVE_NSEC = 502, - VAR_USE_SYSTEMD = 503, - VAR_SHM_ENABLE = 504, - VAR_SHM_KEY = 505, - VAR_ROOT_KEY_SENTINEL = 506, - VAR_DNSCRYPT = 507, - VAR_DNSCRYPT_ENABLE = 508, - VAR_DNSCRYPT_PORT = 509, - VAR_DNSCRYPT_PROVIDER = 510, - VAR_DNSCRYPT_SECRET_KEY = 511, - VAR_DNSCRYPT_PROVIDER_CERT = 512, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 513, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 514, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 515, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 516, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 517, - VAR_PAD_RESPONSES = 518, - VAR_PAD_RESPONSES_BLOCK_SIZE = 519, - VAR_PAD_QUERIES = 520, - VAR_PAD_QUERIES_BLOCK_SIZE = 521, - VAR_IPSECMOD_ENABLED = 522, - VAR_IPSECMOD_HOOK = 523, - VAR_IPSECMOD_IGNORE_BOGUS = 524, - VAR_IPSECMOD_MAX_TTL = 525, - VAR_IPSECMOD_WHITELIST = 526, - VAR_IPSECMOD_STRICT = 527, - VAR_CACHEDB = 528, - VAR_CACHEDB_BACKEND = 529, - VAR_CACHEDB_SECRETSEED = 530, - VAR_CACHEDB_REDISHOST = 531, - VAR_CACHEDB_REDISPORT = 532, - VAR_CACHEDB_REDISTIMEOUT = 533, - VAR_CACHEDB_REDISEXPIRERECORDS = 534, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 535, - VAR_FOR_UPSTREAM = 536, - VAR_AUTH_ZONE = 537, - VAR_ZONEFILE = 538, - VAR_MASTER = 539, - VAR_URL = 540, - VAR_FOR_DOWNSTREAM = 541, - VAR_FALLBACK_ENABLED = 542, - VAR_TLS_ADDITIONAL_PORT = 543, - VAR_LOW_RTT = 544, - VAR_LOW_RTT_PERMIL = 545, - VAR_FAST_SERVER_PERMIL = 546, - VAR_FAST_SERVER_NUM = 547, - VAR_ALLOW_NOTIFY = 548, - VAR_TLS_WIN_CERT = 549, - VAR_TCP_CONNECTION_LIMIT = 550, - VAR_FORWARD_NO_CACHE = 551, - VAR_STUB_NO_CACHE = 552, - VAR_LOG_SERVFAIL = 553, - VAR_DENY_ANY = 554, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 555, - VAR_LOG_TAG_QUERYREPLY = 556, - VAR_STREAM_WAIT_SIZE = 557, - VAR_TLS_CIPHERS = 558, - VAR_TLS_CIPHERSUITES = 559, - VAR_TLS_USE_SNI = 560, - VAR_IPSET = 561, - VAR_IPSET_NAME_V4 = 562, - VAR_IPSET_NAME_V6 = 563, - VAR_TLS_SESSION_TICKET_KEYS = 564, - VAR_RPZ = 565, - VAR_TAGS = 566, - VAR_RPZ_ACTION_OVERRIDE = 567, - VAR_RPZ_CNAME_OVERRIDE = 568, - VAR_RPZ_LOG = 569, - VAR_RPZ_LOG_NAME = 570, - VAR_DYNLIB = 571, - VAR_DYNLIB_FILE = 572, - VAR_EDNS_CLIENT_STRING = 573, - VAR_EDNS_CLIENT_STRING_OPCODE = 574, - VAR_NSID = 575, - VAR_ZONEMD_PERMISSIVE_MODE = 576, - VAR_ZONEMD_CHECK = 577, - VAR_ZONEMD_REJECT_ABSENCE = 578, - VAR_RPZ_SIGNAL_NXDOMAIN_RA = 579, - VAR_INTERFACE_AUTOMATIC_PORTS = 580, - VAR_EDE = 581, - VAR_UPSTREAM_COOKIES = 582 + VAR_INFRA_CACHE_MAX_RTT = 419, + VAR_INFRA_KEEP_PROBING = 420, + VAR_DNS64_PREFIX = 421, + VAR_DNS64_SYNTHALL = 422, + VAR_DNS64_IGNORE_AAAA = 423, + VAR_DNSTAP = 424, + VAR_DNSTAP_ENABLE = 425, + VAR_DNSTAP_SOCKET_PATH = 426, + VAR_DNSTAP_IP = 427, + VAR_DNSTAP_TLS = 428, + VAR_DNSTAP_TLS_SERVER_NAME = 429, + VAR_DNSTAP_TLS_CERT_BUNDLE = 430, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 431, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 432, + VAR_DNSTAP_SEND_IDENTITY = 433, + VAR_DNSTAP_SEND_VERSION = 434, + VAR_DNSTAP_BIDIRECTIONAL = 435, + VAR_DNSTAP_IDENTITY = 436, + VAR_DNSTAP_VERSION = 437, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 438, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 439, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 440, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 441, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 442, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 443, + VAR_RESPONSE_IP_TAG = 444, + VAR_RESPONSE_IP = 445, + VAR_RESPONSE_IP_DATA = 446, + VAR_HARDEN_ALGO_DOWNGRADE = 447, + VAR_IP_TRANSPARENT = 448, + VAR_IP_DSCP = 449, + VAR_DISABLE_DNSSEC_LAME_CHECK = 450, + VAR_IP_RATELIMIT = 451, + VAR_IP_RATELIMIT_SLABS = 452, + VAR_IP_RATELIMIT_SIZE = 453, + VAR_RATELIMIT = 454, + VAR_RATELIMIT_SLABS = 455, + VAR_RATELIMIT_SIZE = 456, + VAR_OUTBOUND_MSG_RETRY = 457, + VAR_RATELIMIT_FOR_DOMAIN = 458, + VAR_RATELIMIT_BELOW_DOMAIN = 459, + VAR_IP_RATELIMIT_FACTOR = 460, + VAR_RATELIMIT_FACTOR = 461, + VAR_IP_RATELIMIT_BACKOFF = 462, + VAR_RATELIMIT_BACKOFF = 463, + VAR_SEND_CLIENT_SUBNET = 464, + VAR_CLIENT_SUBNET_ZONE = 465, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 466, + VAR_CLIENT_SUBNET_OPCODE = 467, + VAR_MAX_CLIENT_SUBNET_IPV4 = 468, + VAR_MAX_CLIENT_SUBNET_IPV6 = 469, + VAR_MIN_CLIENT_SUBNET_IPV4 = 470, + VAR_MIN_CLIENT_SUBNET_IPV6 = 471, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 472, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 473, + VAR_CAPS_WHITELIST = 474, + VAR_CACHE_MAX_NEGATIVE_TTL = 475, + VAR_PERMIT_SMALL_HOLDDOWN = 476, + VAR_QNAME_MINIMISATION = 477, + VAR_QNAME_MINIMISATION_STRICT = 478, + VAR_IP_FREEBIND = 479, + VAR_DEFINE_TAG = 480, + VAR_LOCAL_ZONE_TAG = 481, + VAR_ACCESS_CONTROL_TAG = 482, + VAR_LOCAL_ZONE_OVERRIDE = 483, + VAR_ACCESS_CONTROL_TAG_ACTION = 484, + VAR_ACCESS_CONTROL_TAG_DATA = 485, + VAR_VIEW = 486, + VAR_ACCESS_CONTROL_VIEW = 487, + VAR_VIEW_FIRST = 488, + VAR_SERVE_EXPIRED = 489, + VAR_SERVE_EXPIRED_TTL = 490, + VAR_SERVE_EXPIRED_TTL_RESET = 491, + VAR_SERVE_EXPIRED_REPLY_TTL = 492, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 493, + VAR_EDE_SERVE_EXPIRED = 494, + VAR_SERVE_ORIGINAL_TTL = 495, + VAR_FAKE_DSA = 496, + VAR_FAKE_SHA1 = 497, + VAR_LOG_IDENTITY = 498, + VAR_HIDE_TRUSTANCHOR = 499, + VAR_HIDE_HTTP_USER_AGENT = 500, + VAR_HTTP_USER_AGENT = 501, + VAR_TRUST_ANCHOR_SIGNALING = 502, + VAR_AGGRESSIVE_NSEC = 503, + VAR_USE_SYSTEMD = 504, + VAR_SHM_ENABLE = 505, + VAR_SHM_KEY = 506, + VAR_ROOT_KEY_SENTINEL = 507, + VAR_DNSCRYPT = 508, + VAR_DNSCRYPT_ENABLE = 509, + VAR_DNSCRYPT_PORT = 510, + VAR_DNSCRYPT_PROVIDER = 511, + VAR_DNSCRYPT_SECRET_KEY = 512, + VAR_DNSCRYPT_PROVIDER_CERT = 513, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 514, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 515, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 516, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 517, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 518, + VAR_PAD_RESPONSES = 519, + VAR_PAD_RESPONSES_BLOCK_SIZE = 520, + VAR_PAD_QUERIES = 521, + VAR_PAD_QUERIES_BLOCK_SIZE = 522, + VAR_IPSECMOD_ENABLED = 523, + VAR_IPSECMOD_HOOK = 524, + VAR_IPSECMOD_IGNORE_BOGUS = 525, + VAR_IPSECMOD_MAX_TTL = 526, + VAR_IPSECMOD_WHITELIST = 527, + VAR_IPSECMOD_STRICT = 528, + VAR_CACHEDB = 529, + VAR_CACHEDB_BACKEND = 530, + VAR_CACHEDB_SECRETSEED = 531, + VAR_CACHEDB_REDISHOST = 532, + VAR_CACHEDB_REDISPORT = 533, + VAR_CACHEDB_REDISTIMEOUT = 534, + VAR_CACHEDB_REDISEXPIRERECORDS = 535, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 536, + VAR_FOR_UPSTREAM = 537, + VAR_AUTH_ZONE = 538, + VAR_ZONEFILE = 539, + VAR_MASTER = 540, + VAR_URL = 541, + VAR_FOR_DOWNSTREAM = 542, + VAR_FALLBACK_ENABLED = 543, + VAR_TLS_ADDITIONAL_PORT = 544, + VAR_LOW_RTT = 545, + VAR_LOW_RTT_PERMIL = 546, + VAR_FAST_SERVER_PERMIL = 547, + VAR_FAST_SERVER_NUM = 548, + VAR_ALLOW_NOTIFY = 549, + VAR_TLS_WIN_CERT = 550, + VAR_TCP_CONNECTION_LIMIT = 551, + VAR_FORWARD_NO_CACHE = 552, + VAR_STUB_NO_CACHE = 553, + VAR_LOG_SERVFAIL = 554, + VAR_DENY_ANY = 555, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 556, + VAR_LOG_TAG_QUERYREPLY = 557, + VAR_STREAM_WAIT_SIZE = 558, + VAR_TLS_CIPHERS = 559, + VAR_TLS_CIPHERSUITES = 560, + VAR_TLS_USE_SNI = 561, + VAR_IPSET = 562, + VAR_IPSET_NAME_V4 = 563, + VAR_IPSET_NAME_V6 = 564, + VAR_TLS_SESSION_TICKET_KEYS = 565, + VAR_RPZ = 566, + VAR_TAGS = 567, + VAR_RPZ_ACTION_OVERRIDE = 568, + VAR_RPZ_CNAME_OVERRIDE = 569, + VAR_RPZ_LOG = 570, + VAR_RPZ_LOG_NAME = 571, + VAR_DYNLIB = 572, + VAR_DYNLIB_FILE = 573, + VAR_EDNS_CLIENT_STRING = 574, + VAR_EDNS_CLIENT_STRING_OPCODE = 575, + VAR_NSID = 576, + VAR_ZONEMD_PERMISSIVE_MODE = 577, + VAR_ZONEMD_CHECK = 578, + VAR_ZONEMD_REJECT_ABSENCE = 579, + VAR_RPZ_SIGNAL_NXDOMAIN_RA = 580, + VAR_INTERFACE_AUTOMATIC_PORTS = 581, + VAR_EDE = 582, + VAR_UPSTREAM_COOKIES = 583 }; #endif /* Tokens. */ @@ -555,170 +556,171 @@ #define VAR_UNBLOCK_LAN_ZONES 416 #define VAR_INSECURE_LAN_ZONES 417 #define VAR_INFRA_CACHE_MIN_RTT 418 -#define VAR_INFRA_KEEP_PROBING 419 -#define VAR_DNS64_PREFIX 420 -#define VAR_DNS64_SYNTHALL 421 -#define VAR_DNS64_IGNORE_AAAA 422 -#define VAR_DNSTAP 423 -#define VAR_DNSTAP_ENABLE 424 -#define VAR_DNSTAP_SOCKET_PATH 425 -#define VAR_DNSTAP_IP 426 -#define VAR_DNSTAP_TLS 427 -#define VAR_DNSTAP_TLS_SERVER_NAME 428 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 429 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 430 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 431 -#define VAR_DNSTAP_SEND_IDENTITY 432 -#define VAR_DNSTAP_SEND_VERSION 433 -#define VAR_DNSTAP_BIDIRECTIONAL 434 -#define VAR_DNSTAP_IDENTITY 435 -#define VAR_DNSTAP_VERSION 436 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 437 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 438 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 439 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 440 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 441 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 442 -#define VAR_RESPONSE_IP_TAG 443 -#define VAR_RESPONSE_IP 444 -#define VAR_RESPONSE_IP_DATA 445 -#define VAR_HARDEN_ALGO_DOWNGRADE 446 -#define VAR_IP_TRANSPARENT 447 -#define VAR_IP_DSCP 448 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 449 -#define VAR_IP_RATELIMIT 450 -#define VAR_IP_RATELIMIT_SLABS 451 -#define VAR_IP_RATELIMIT_SIZE 452 -#define VAR_RATELIMIT 453 -#define VAR_RATELIMIT_SLABS 454 -#define VAR_RATELIMIT_SIZE 455 -#define VAR_OUTBOUND_MSG_RETRY 456 -#define VAR_RATELIMIT_FOR_DOMAIN 457 -#define VAR_RATELIMIT_BELOW_DOMAIN 458 -#define VAR_IP_RATELIMIT_FACTOR 459 -#define VAR_RATELIMIT_FACTOR 460 -#define VAR_IP_RATELIMIT_BACKOFF 461 -#define VAR_RATELIMIT_BACKOFF 462 -#define VAR_SEND_CLIENT_SUBNET 463 -#define VAR_CLIENT_SUBNET_ZONE 464 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 465 -#define VAR_CLIENT_SUBNET_OPCODE 466 -#define VAR_MAX_CLIENT_SUBNET_IPV4 467 -#define VAR_MAX_CLIENT_SUBNET_IPV6 468 -#define VAR_MIN_CLIENT_SUBNET_IPV4 469 -#define VAR_MIN_CLIENT_SUBNET_IPV6 470 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 471 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 472 -#define VAR_CAPS_WHITELIST 473 -#define VAR_CACHE_MAX_NEGATIVE_TTL 474 -#define VAR_PERMIT_SMALL_HOLDDOWN 475 -#define VAR_QNAME_MINIMISATION 476 -#define VAR_QNAME_MINIMISATION_STRICT 477 -#define VAR_IP_FREEBIND 478 -#define VAR_DEFINE_TAG 479 -#define VAR_LOCAL_ZONE_TAG 480 -#define VAR_ACCESS_CONTROL_TAG 481 -#define VAR_LOCAL_ZONE_OVERRIDE 482 -#define VAR_ACCESS_CONTROL_TAG_ACTION 483 -#define VAR_ACCESS_CONTROL_TAG_DATA 484 -#define VAR_VIEW 485 -#define VAR_ACCESS_CONTROL_VIEW 486 -#define VAR_VIEW_FIRST 487 -#define VAR_SERVE_EXPIRED 488 -#define VAR_SERVE_EXPIRED_TTL 489 -#define VAR_SERVE_EXPIRED_TTL_RESET 490 -#define VAR_SERVE_EXPIRED_REPLY_TTL 491 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 492 -#define VAR_EDE_SERVE_EXPIRED 493 -#define VAR_SERVE_ORIGINAL_TTL 494 -#define VAR_FAKE_DSA 495 -#define VAR_FAKE_SHA1 496 -#define VAR_LOG_IDENTITY 497 -#define VAR_HIDE_TRUSTANCHOR 498 -#define VAR_HIDE_HTTP_USER_AGENT 499 -#define VAR_HTTP_USER_AGENT 500 -#define VAR_TRUST_ANCHOR_SIGNALING 501 -#define VAR_AGGRESSIVE_NSEC 502 -#define VAR_USE_SYSTEMD 503 -#define VAR_SHM_ENABLE 504 -#define VAR_SHM_KEY 505 -#define VAR_ROOT_KEY_SENTINEL 506 -#define VAR_DNSCRYPT 507 -#define VAR_DNSCRYPT_ENABLE 508 -#define VAR_DNSCRYPT_PORT 509 -#define VAR_DNSCRYPT_PROVIDER 510 -#define VAR_DNSCRYPT_SECRET_KEY 511 -#define VAR_DNSCRYPT_PROVIDER_CERT 512 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 513 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 514 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 515 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 516 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 517 -#define VAR_PAD_RESPONSES 518 -#define VAR_PAD_RESPONSES_BLOCK_SIZE 519 -#define VAR_PAD_QUERIES 520 -#define VAR_PAD_QUERIES_BLOCK_SIZE 521 -#define VAR_IPSECMOD_ENABLED 522 -#define VAR_IPSECMOD_HOOK 523 -#define VAR_IPSECMOD_IGNORE_BOGUS 524 -#define VAR_IPSECMOD_MAX_TTL 525 -#define VAR_IPSECMOD_WHITELIST 526 -#define VAR_IPSECMOD_STRICT 527 -#define VAR_CACHEDB 528 -#define VAR_CACHEDB_BACKEND 529 -#define VAR_CACHEDB_SECRETSEED 530 -#define VAR_CACHEDB_REDISHOST 531 -#define VAR_CACHEDB_REDISPORT 532 -#define VAR_CACHEDB_REDISTIMEOUT 533 -#define VAR_CACHEDB_REDISEXPIRERECORDS 534 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 535 -#define VAR_FOR_UPSTREAM 536 -#define VAR_AUTH_ZONE 537 -#define VAR_ZONEFILE 538 -#define VAR_MASTER 539 -#define VAR_URL 540 -#define VAR_FOR_DOWNSTREAM 541 -#define VAR_FALLBACK_ENABLED 542 -#define VAR_TLS_ADDITIONAL_PORT 543 -#define VAR_LOW_RTT 544 -#define VAR_LOW_RTT_PERMIL 545 -#define VAR_FAST_SERVER_PERMIL 546 -#define VAR_FAST_SERVER_NUM 547 -#define VAR_ALLOW_NOTIFY 548 -#define VAR_TLS_WIN_CERT 549 -#define VAR_TCP_CONNECTION_LIMIT 550 -#define VAR_FORWARD_NO_CACHE 551 -#define VAR_STUB_NO_CACHE 552 -#define VAR_LOG_SERVFAIL 553 -#define VAR_DENY_ANY 554 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 555 -#define VAR_LOG_TAG_QUERYREPLY 556 -#define VAR_STREAM_WAIT_SIZE 557 -#define VAR_TLS_CIPHERS 558 -#define VAR_TLS_CIPHERSUITES 559 -#define VAR_TLS_USE_SNI 560 -#define VAR_IPSET 561 -#define VAR_IPSET_NAME_V4 562 -#define VAR_IPSET_NAME_V6 563 -#define VAR_TLS_SESSION_TICKET_KEYS 564 -#define VAR_RPZ 565 -#define VAR_TAGS 566 -#define VAR_RPZ_ACTION_OVERRIDE 567 -#define VAR_RPZ_CNAME_OVERRIDE 568 -#define VAR_RPZ_LOG 569 -#define VAR_RPZ_LOG_NAME 570 -#define VAR_DYNLIB 571 -#define VAR_DYNLIB_FILE 572 -#define VAR_EDNS_CLIENT_STRING 573 -#define VAR_EDNS_CLIENT_STRING_OPCODE 574 -#define VAR_NSID 575 -#define VAR_ZONEMD_PERMISSIVE_MODE 576 -#define VAR_ZONEMD_CHECK 577 -#define VAR_ZONEMD_REJECT_ABSENCE 578 -#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 579 -#define VAR_INTERFACE_AUTOMATIC_PORTS 580 -#define VAR_EDE 581 -#define VAR_UPSTREAM_COOKIES 582 +#define VAR_INFRA_CACHE_MAX_RTT 419 +#define VAR_INFRA_KEEP_PROBING 420 +#define VAR_DNS64_PREFIX 421 +#define VAR_DNS64_SYNTHALL 422 +#define VAR_DNS64_IGNORE_AAAA 423 +#define VAR_DNSTAP 424 +#define VAR_DNSTAP_ENABLE 425 +#define VAR_DNSTAP_SOCKET_PATH 426 +#define VAR_DNSTAP_IP 427 +#define VAR_DNSTAP_TLS 428 +#define VAR_DNSTAP_TLS_SERVER_NAME 429 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 430 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 431 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 432 +#define VAR_DNSTAP_SEND_IDENTITY 433 +#define VAR_DNSTAP_SEND_VERSION 434 +#define VAR_DNSTAP_BIDIRECTIONAL 435 +#define VAR_DNSTAP_IDENTITY 436 +#define VAR_DNSTAP_VERSION 437 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 438 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 439 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 440 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 441 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 442 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 443 +#define VAR_RESPONSE_IP_TAG 444 +#define VAR_RESPONSE_IP 445 +#define VAR_RESPONSE_IP_DATA 446 +#define VAR_HARDEN_ALGO_DOWNGRADE 447 +#define VAR_IP_TRANSPARENT 448 +#define VAR_IP_DSCP 449 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 450 +#define VAR_IP_RATELIMIT 451 +#define VAR_IP_RATELIMIT_SLABS 452 +#define VAR_IP_RATELIMIT_SIZE 453 +#define VAR_RATELIMIT 454 +#define VAR_RATELIMIT_SLABS 455 +#define VAR_RATELIMIT_SIZE 456 +#define VAR_OUTBOUND_MSG_RETRY 457 +#define VAR_RATELIMIT_FOR_DOMAIN 458 +#define VAR_RATELIMIT_BELOW_DOMAIN 459 +#define VAR_IP_RATELIMIT_FACTOR 460 +#define VAR_RATELIMIT_FACTOR 461 +#define VAR_IP_RATELIMIT_BACKOFF 462 +#define VAR_RATELIMIT_BACKOFF 463 +#define VAR_SEND_CLIENT_SUBNET 464 +#define VAR_CLIENT_SUBNET_ZONE 465 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 466 +#define VAR_CLIENT_SUBNET_OPCODE 467 +#define VAR_MAX_CLIENT_SUBNET_IPV4 468 +#define VAR_MAX_CLIENT_SUBNET_IPV6 469 +#define VAR_MIN_CLIENT_SUBNET_IPV4 470 +#define VAR_MIN_CLIENT_SUBNET_IPV6 471 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 472 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 473 +#define VAR_CAPS_WHITELIST 474 +#define VAR_CACHE_MAX_NEGATIVE_TTL 475 +#define VAR_PERMIT_SMALL_HOLDDOWN 476 +#define VAR_QNAME_MINIMISATION 477 +#define VAR_QNAME_MINIMISATION_STRICT 478 +#define VAR_IP_FREEBIND 479 +#define VAR_DEFINE_TAG 480 +#define VAR_LOCAL_ZONE_TAG 481 +#define VAR_ACCESS_CONTROL_TAG 482 +#define VAR_LOCAL_ZONE_OVERRIDE 483 +#define VAR_ACCESS_CONTROL_TAG_ACTION 484 +#define VAR_ACCESS_CONTROL_TAG_DATA 485 +#define VAR_VIEW 486 +#define VAR_ACCESS_CONTROL_VIEW 487 +#define VAR_VIEW_FIRST 488 +#define VAR_SERVE_EXPIRED 489 +#define VAR_SERVE_EXPIRED_TTL 490 +#define VAR_SERVE_EXPIRED_TTL_RESET 491 +#define VAR_SERVE_EXPIRED_REPLY_TTL 492 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 493 +#define VAR_EDE_SERVE_EXPIRED 494 +#define VAR_SERVE_ORIGINAL_TTL 495 +#define VAR_FAKE_DSA 496 +#define VAR_FAKE_SHA1 497 +#define VAR_LOG_IDENTITY 498 +#define VAR_HIDE_TRUSTANCHOR 499 +#define VAR_HIDE_HTTP_USER_AGENT 500 +#define VAR_HTTP_USER_AGENT 501 +#define VAR_TRUST_ANCHOR_SIGNALING 502 +#define VAR_AGGRESSIVE_NSEC 503 +#define VAR_USE_SYSTEMD 504 +#define VAR_SHM_ENABLE 505 +#define VAR_SHM_KEY 506 +#define VAR_ROOT_KEY_SENTINEL 507 +#define VAR_DNSCRYPT 508 +#define VAR_DNSCRYPT_ENABLE 509 +#define VAR_DNSCRYPT_PORT 510 +#define VAR_DNSCRYPT_PROVIDER 511 +#define VAR_DNSCRYPT_SECRET_KEY 512 +#define VAR_DNSCRYPT_PROVIDER_CERT 513 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 514 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 515 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 516 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 517 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 518 +#define VAR_PAD_RESPONSES 519 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 520 +#define VAR_PAD_QUERIES 521 +#define VAR_PAD_QUERIES_BLOCK_SIZE 522 +#define VAR_IPSECMOD_ENABLED 523 +#define VAR_IPSECMOD_HOOK 524 +#define VAR_IPSECMOD_IGNORE_BOGUS 525 +#define VAR_IPSECMOD_MAX_TTL 526 +#define VAR_IPSECMOD_WHITELIST 527 +#define VAR_IPSECMOD_STRICT 528 +#define VAR_CACHEDB 529 +#define VAR_CACHEDB_BACKEND 530 +#define VAR_CACHEDB_SECRETSEED 531 +#define VAR_CACHEDB_REDISHOST 532 +#define VAR_CACHEDB_REDISPORT 533 +#define VAR_CACHEDB_REDISTIMEOUT 534 +#define VAR_CACHEDB_REDISEXPIRERECORDS 535 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 536 +#define VAR_FOR_UPSTREAM 537 +#define VAR_AUTH_ZONE 538 +#define VAR_ZONEFILE 539 +#define VAR_MASTER 540 +#define VAR_URL 541 +#define VAR_FOR_DOWNSTREAM 542 +#define VAR_FALLBACK_ENABLED 543 +#define VAR_TLS_ADDITIONAL_PORT 544 +#define VAR_LOW_RTT 545 +#define VAR_LOW_RTT_PERMIL 546 +#define VAR_FAST_SERVER_PERMIL 547 +#define VAR_FAST_SERVER_NUM 548 +#define VAR_ALLOW_NOTIFY 549 +#define VAR_TLS_WIN_CERT 550 +#define VAR_TCP_CONNECTION_LIMIT 551 +#define VAR_FORWARD_NO_CACHE 552 +#define VAR_STUB_NO_CACHE 553 +#define VAR_LOG_SERVFAIL 554 +#define VAR_DENY_ANY 555 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 556 +#define VAR_LOG_TAG_QUERYREPLY 557 +#define VAR_STREAM_WAIT_SIZE 558 +#define VAR_TLS_CIPHERS 559 +#define VAR_TLS_CIPHERSUITES 560 +#define VAR_TLS_USE_SNI 561 +#define VAR_IPSET 562 +#define VAR_IPSET_NAME_V4 563 +#define VAR_IPSET_NAME_V6 564 +#define VAR_TLS_SESSION_TICKET_KEYS 565 +#define VAR_RPZ 566 +#define VAR_TAGS 567 +#define VAR_RPZ_ACTION_OVERRIDE 568 +#define VAR_RPZ_CNAME_OVERRIDE 569 +#define VAR_RPZ_LOG 570 +#define VAR_RPZ_LOG_NAME 571 +#define VAR_DYNLIB 572 +#define VAR_DYNLIB_FILE 573 +#define VAR_EDNS_CLIENT_STRING 574 +#define VAR_EDNS_CLIENT_STRING_OPCODE 575 +#define VAR_NSID 576 +#define VAR_ZONEMD_PERMISSIVE_MODE 577 +#define VAR_ZONEMD_CHECK 578 +#define VAR_ZONEMD_REJECT_ABSENCE 579 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 580 +#define VAR_INTERFACE_AUTOMATIC_PORTS 581 +#define VAR_EDE 582 +#define VAR_UPSTREAM_COOKIES 583 @@ -779,7 +781,7 @@ typedef union YYSTYPE char* str; } /* Line 193 of yacc.c. */ -#line 783 "util/configparser.c" +#line 785 "util/configparser.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -792,7 +794,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 796 "util/configparser.c" +#line 798 "util/configparser.c" #ifdef short # undef short @@ -1007,20 +1009,20 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 695 +#define YYLAST 697 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 328 +#define YYNTOKENS 329 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 353 +#define YYNNTS 354 /* YYNRULES -- Number of rules. */ -#define YYNRULES 683 +#define YYNRULES 685 /* YYNRULES -- Number of states. */ -#define YYNSTATES 1015 +#define YYNSTATES 1018 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 582 +#define YYMAXUTOK 583 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -1086,7 +1088,7 @@ static const yytype_uint16 yytranslate[] = 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 + 325, 326, 327, 328 }; #if YYDEBUG @@ -1118,302 +1120,302 @@ static const yytype_uint16 yyprhs[] = 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, - 492, 494, 496, 498, 500, 502, 504, 506, 508, 511, - 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, - 533, 534, 536, 538, 540, 542, 544, 546, 548, 550, - 553, 554, 556, 558, 560, 562, 564, 566, 568, 570, - 573, 574, 576, 578, 580, 582, 584, 586, 588, 590, - 592, 594, 597, 600, 603, 606, 609, 612, 614, 617, - 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, - 638, 640, 642, 645, 648, 651, 654, 657, 660, 663, - 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, - 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, - 726, 729, 732, 735, 738, 741, 744, 747, 750, 753, - 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, - 786, 789, 792, 795, 798, 801, 804, 807, 810, 813, - 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, - 846, 849, 852, 855, 858, 861, 864, 867, 870, 873, - 876, 879, 882, 885, 888, 891, 894, 897, 900, 903, - 906, 909, 912, 915, 918, 921, 924, 927, 930, 933, - 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, - 966, 969, 972, 975, 978, 981, 984, 987, 990, 993, - 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, - 1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, - 1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, - 1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 1111, 1114, - 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 1141, 1144, - 1147, 1150, 1153, 1157, 1160, 1163, 1166, 1169, 1172, 1175, - 1178, 1181, 1184, 1187, 1191, 1195, 1200, 1205, 1210, 1214, - 1218, 1221, 1224, 1227, 1230, 1233, 1236, 1240, 1244, 1247, - 1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, - 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 1308, - 1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, - 1341, 1344, 1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, - 1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 1395, 1399, - 1403, 1407, 1410, 1413, 1416, 1418, 1421, 1422, 1424, 1426, - 1428, 1430, 1432, 1434, 1436, 1438, 1441, 1444, 1447, 1450, - 1453, 1456, 1459, 1462, 1464, 1467, 1468, 1470, 1472, 1474, - 1476, 1478, 1480, 1482, 1484, 1486, 1488, 1490, 1492, 1494, - 1496, 1498, 1500, 1502, 1504, 1506, 1509, 1512, 1515, 1518, - 1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, - 1551, 1554, 1557, 1560, 1563, 1565, 1568, 1569, 1571, 1574, - 1576, 1579, 1580, 1582, 1585, 1588, 1591, 1595, 1599, 1601, - 1604, 1605, 1607, 1609, 1611, 1613, 1615, 1617, 1619, 1621, - 1623, 1625, 1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, - 1652, 1655, 1657, 1660, 1661, 1663, 1665, 1667, 1669, 1671, - 1673, 1676, 1679, 1682, 1685, 1688, 1691, 1695, 1697, 1700, - 1701, 1703, 1705, 1708 + 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, + 513, 514, 516, 518, 520, 522, 524, 526, 528, 530, + 532, 535, 536, 538, 540, 542, 544, 546, 548, 550, + 552, 555, 556, 558, 560, 562, 564, 566, 568, 570, + 572, 575, 576, 578, 580, 582, 584, 586, 588, 590, + 592, 594, 596, 599, 602, 605, 608, 611, 614, 616, + 619, 620, 622, 624, 626, 628, 630, 632, 634, 636, + 638, 640, 642, 644, 647, 650, 653, 656, 659, 662, + 665, 668, 671, 674, 677, 680, 683, 686, 689, 692, + 695, 698, 701, 704, 707, 710, 713, 716, 719, 722, + 725, 728, 731, 734, 737, 740, 743, 746, 749, 752, + 755, 758, 761, 764, 767, 770, 773, 776, 779, 782, + 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, + 815, 818, 821, 824, 827, 830, 833, 836, 839, 842, + 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, + 875, 878, 881, 884, 887, 890, 893, 896, 899, 902, + 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, + 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, + 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, + 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, + 1025, 1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, + 1055, 1058, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, + 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, + 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, + 1146, 1149, 1152, 1155, 1158, 1162, 1165, 1168, 1171, 1174, + 1177, 1180, 1183, 1186, 1189, 1192, 1196, 1200, 1205, 1210, + 1215, 1219, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1245, + 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273, 1276, + 1279, 1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, + 1309, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, + 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, + 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397, + 1400, 1404, 1408, 1412, 1415, 1418, 1421, 1423, 1426, 1427, + 1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 1446, 1449, + 1452, 1455, 1458, 1461, 1464, 1467, 1469, 1472, 1473, 1475, + 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, + 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1514, 1517, + 1520, 1523, 1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, + 1550, 1553, 1556, 1559, 1562, 1565, 1568, 1570, 1573, 1574, + 1576, 1579, 1581, 1584, 1585, 1587, 1590, 1593, 1596, 1600, + 1604, 1606, 1609, 1610, 1612, 1614, 1616, 1618, 1620, 1622, + 1624, 1626, 1628, 1630, 1633, 1636, 1639, 1642, 1645, 1648, + 1651, 1654, 1657, 1660, 1662, 1665, 1666, 1668, 1670, 1672, + 1674, 1676, 1678, 1681, 1684, 1687, 1690, 1693, 1696, 1700, + 1702, 1705, 1706, 1708, 1710, 1713 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { - 329, 0, -1, -1, 329, 330, -1, 332, 333, -1, - 335, 336, -1, 338, 339, -1, 641, 642, -1, 608, - 609, -1, 619, 620, -1, 341, 342, -1, 653, 654, - -1, 666, 667, -1, 676, 677, -1, 344, 345, -1, - 353, 354, -1, 645, 646, -1, 331, -1, 11, -1, - 12, -1, 333, 334, -1, -1, 356, -1, 357, -1, - 363, -1, 376, -1, 383, -1, 384, -1, 387, -1, - 388, -1, 385, -1, 386, -1, 389, -1, 390, -1, - 391, -1, 395, -1, 396, -1, 374, -1, 426, -1, - 427, -1, 428, -1, 429, -1, 430, -1, 458, -1, - 459, -1, 460, -1, 466, -1, 467, -1, 379, -1, - 468, -1, 469, -1, 472, -1, 470, -1, 471, -1, - 475, -1, 476, -1, 477, -1, 491, -1, 441, -1, - 442, -1, 445, -1, 446, -1, 444, -1, 447, -1, - 478, -1, 494, -1, 435, -1, 437, -1, 495, -1, - 502, -1, 503, -1, 504, -1, 380, -1, 457, -1, - 523, -1, 524, -1, 436, -1, 517, -1, 419, -1, - 375, -1, 431, -1, 492, -1, 499, -1, 479, -1, - 493, -1, 526, -1, 527, -1, 381, -1, 358, -1, - 418, -1, 483, -1, 359, -1, 377, -1, 378, -1, - 432, -1, 433, -1, 525, -1, 481, -1, 485, -1, - 486, -1, 360, -1, 528, -1, 461, -1, 490, -1, - 420, -1, 440, -1, 496, -1, 497, -1, 498, -1, - 501, -1, 516, -1, 434, -1, 519, -1, 520, -1, - 521, -1, 449, -1, 456, -1, 487, -1, 488, -1, - 450, -1, 480, -1, 506, -1, 421, -1, 422, -1, - 397, -1, 399, -1, 425, -1, 400, -1, 401, -1, - 402, -1, 410, -1, 411, -1, 412, -1, 413, -1, - 414, -1, 415, -1, 416, -1, 529, -1, 530, -1, - 532, -1, 451, -1, 462, -1, 463, -1, 464, -1, - 465, -1, 533, -1, 534, -1, 535, -1, 473, -1, - 482, -1, 452, -1, 544, -1, 545, -1, 454, -1, - 474, -1, 548, -1, 549, -1, 546, -1, 547, -1, - 550, -1, 551, -1, 553, -1, 552, -1, 555, -1, - 554, -1, 556, -1, 364, -1, 365, -1, 366, -1, + 330, 0, -1, -1, 330, 331, -1, 333, 334, -1, + 336, 337, -1, 339, 340, -1, 643, 644, -1, 610, + 611, -1, 621, 622, -1, 342, 343, -1, 655, 656, + -1, 668, 669, -1, 678, 679, -1, 345, 346, -1, + 354, 355, -1, 647, 648, -1, 332, -1, 11, -1, + 12, -1, 334, 335, -1, -1, 357, -1, 358, -1, + 364, -1, 377, -1, 384, -1, 385, -1, 388, -1, + 389, -1, 386, -1, 387, -1, 390, -1, 391, -1, + 392, -1, 396, -1, 397, -1, 375, -1, 427, -1, + 428, -1, 429, -1, 430, -1, 431, -1, 459, -1, + 460, -1, 461, -1, 467, -1, 468, -1, 380, -1, + 469, -1, 470, -1, 473, -1, 471, -1, 472, -1, + 477, -1, 478, -1, 479, -1, 493, -1, 442, -1, + 443, -1, 446, -1, 447, -1, 445, -1, 448, -1, + 480, -1, 496, -1, 436, -1, 438, -1, 497, -1, + 504, -1, 505, -1, 506, -1, 381, -1, 458, -1, + 525, -1, 526, -1, 437, -1, 519, -1, 420, -1, + 376, -1, 432, -1, 494, -1, 501, -1, 481, -1, + 495, -1, 528, -1, 529, -1, 382, -1, 359, -1, + 419, -1, 485, -1, 360, -1, 378, -1, 379, -1, + 433, -1, 434, -1, 527, -1, 483, -1, 487, -1, + 488, -1, 361, -1, 530, -1, 462, -1, 492, -1, + 421, -1, 441, -1, 498, -1, 499, -1, 500, -1, + 503, -1, 518, -1, 435, -1, 521, -1, 522, -1, + 523, -1, 450, -1, 457, -1, 489, -1, 490, -1, + 451, -1, 482, -1, 508, -1, 422, -1, 423, -1, + 398, -1, 400, -1, 426, -1, 401, -1, 402, -1, + 403, -1, 411, -1, 412, -1, 413, -1, 414, -1, + 415, -1, 416, -1, 417, -1, 531, -1, 532, -1, + 534, -1, 452, -1, 463, -1, 464, -1, 465, -1, + 466, -1, 535, -1, 536, -1, 537, -1, 474, -1, + 475, -1, 484, -1, 453, -1, 546, -1, 547, -1, + 455, -1, 476, -1, 550, -1, 551, -1, 548, -1, + 549, -1, 552, -1, 553, -1, 555, -1, 554, -1, + 557, -1, 556, -1, 558, -1, 365, -1, 366, -1, 367, -1, 368, -1, 369, -1, 370, -1, 371, -1, - 372, -1, 373, -1, 484, -1, 500, -1, 522, -1, - 560, -1, 453, -1, 536, -1, 537, -1, 649, -1, - 538, -1, 541, -1, 539, -1, 540, -1, 542, -1, - 561, -1, 562, -1, 563, -1, 564, -1, 565, -1, - 507, -1, 508, -1, 509, -1, 510, -1, 511, -1, - 512, -1, 513, -1, 514, -1, 650, -1, 417, -1, - 543, -1, 651, -1, 652, -1, 361, -1, 362, -1, - 515, -1, 443, -1, 438, -1, 439, -1, 566, -1, - 568, -1, 567, -1, 569, -1, 570, -1, 571, -1, - 398, -1, 505, -1, 403, -1, 405, -1, 557, -1, - 559, -1, 558, -1, 404, -1, 675, -1, 424, -1, - 489, -1, 531, -1, 423, -1, 455, -1, 406, -1, - 407, -1, 408, -1, 409, -1, 572, -1, 573, -1, - 448, -1, 518, -1, 392, -1, 393, -1, 394, -1, - 382, -1, 574, -1, 575, -1, 46, -1, 336, 337, - -1, -1, 576, -1, 577, -1, 578, -1, 583, -1, - 579, -1, 580, -1, 581, -1, 582, -1, 52, -1, - 339, 340, -1, -1, 584, -1, 585, -1, 586, -1, - 587, -1, 588, -1, 589, -1, 590, -1, 230, -1, - 342, 343, -1, -1, 601, -1, 602, -1, 605, -1, - 607, -1, 603, -1, 604, -1, 606, -1, 282, -1, - 345, 346, -1, -1, 591, -1, 592, -1, 593, -1, - 594, -1, 598, -1, 599, -1, 600, -1, 595, -1, - 596, -1, 597, -1, 311, 10, -1, 312, 10, -1, - 313, 10, -1, 314, 10, -1, 315, 10, -1, 324, - 10, -1, 310, -1, 354, 355, -1, -1, 591, -1, - 592, -1, 347, -1, 593, -1, 594, -1, 595, -1, - 348, -1, 349, -1, 350, -1, 351, -1, 352, -1, - 598, -1, 14, 10, -1, 13, 10, -1, 84, 10, - -1, 87, 10, -1, 107, 10, -1, 249, 10, -1, - 250, 10, -1, 15, 10, -1, 208, 10, -1, 209, - 10, -1, 210, 10, -1, 211, 10, -1, 212, 10, - -1, 213, 10, -1, 214, 10, -1, 215, 10, -1, - 216, 10, -1, 217, 10, -1, 17, 10, -1, 75, - 10, -1, 16, 10, -1, 88, 10, -1, 89, 10, - -1, 39, 10, -1, 68, 10, -1, 83, 10, -1, - 325, 10, -1, 19, 10, -1, 20, 10, -1, 22, - 10, -1, 23, 10, -1, 18, 10, -1, 21, 10, - -1, 24, 10, -1, 25, 10, -1, 26, 10, -1, - 106, 10, -1, 105, 10, -1, 138, 10, -1, 27, - 10, -1, 28, 10, -1, 136, 10, -1, 280, 10, - -1, 137, 10, -1, 139, 10, -1, 140, 10, -1, - 141, 10, -1, 145, 10, -1, 294, 10, -1, 288, - 10, -1, 303, 10, -1, 304, 10, -1, 309, 10, - -1, 305, 10, -1, 148, 10, -1, 149, 10, -1, - 150, 10, -1, 151, 10, -1, 152, 10, -1, 153, - 10, -1, 154, 10, -1, 248, 10, -1, 85, 10, - -1, 74, 10, -1, 112, 10, -1, 133, 10, -1, - 134, 10, -1, 301, 10, -1, 298, 10, -1, 135, - 10, -1, 29, 10, -1, 30, 10, -1, 31, 10, - -1, 32, 10, -1, 33, 10, -1, 76, 10, -1, - 90, 10, -1, 91, 10, -1, 121, 10, -1, 62, - 10, -1, 72, 10, -1, 63, 10, -1, 246, 10, - -1, 251, 10, -1, 113, 10, -1, 56, 10, -1, - 57, 10, -1, 243, 10, -1, 244, 10, -1, 58, - 10, -1, 59, 10, -1, 245, 10, -1, 320, 10, - -1, 125, 10, -1, 129, 10, -1, 130, 10, -1, - 192, 10, -1, 223, 10, -1, 193, 10, -1, 302, - 10, -1, 126, 10, -1, 69, 10, -1, 34, 10, - -1, 35, 10, -1, 36, 10, -1, 109, 10, -1, - 159, 10, -1, 160, 10, -1, 161, 10, -1, 162, - 10, -1, 37, 10, -1, 38, 10, -1, 40, 10, - -1, 41, 10, -1, 43, 10, -1, 44, 10, -1, - 42, 10, -1, 163, 10, -1, 164, 10, -1, 49, - 10, -1, 50, 10, -1, 51, 10, -1, 60, 10, - -1, 79, 10, -1, 131, 10, -1, 93, 10, -1, - 191, 10, -1, 86, 10, -1, 218, 10, -1, 94, - 10, -1, 95, 10, -1, 127, 10, -1, 128, 10, - -1, 299, 10, -1, 111, 10, -1, 55, 10, -1, - 77, 10, -1, 80, 10, 10, -1, 61, 10, -1, - 64, 10, -1, 116, 10, -1, 117, 10, -1, 118, - 10, -1, 78, 10, -1, 219, 10, -1, 119, 10, - -1, 65, 10, -1, 66, 10, -1, 67, 10, -1, - 247, 10, -1, 132, 10, -1, 233, 10, -1, 234, - 10, -1, 235, 10, -1, 236, 10, -1, 237, 10, - -1, 238, 10, -1, 239, 10, -1, 240, 10, -1, - 241, 10, -1, 120, 10, -1, 73, 10, -1, 321, - 10, -1, 123, 10, -1, 124, 10, -1, 122, 10, - -1, 220, 10, -1, 70, 10, -1, 71, 10, -1, - 92, 10, -1, 81, 10, 10, -1, 82, 10, -1, - 108, 10, -1, 156, 10, -1, 157, 10, -1, 300, - 10, -1, 158, 10, -1, 165, 10, -1, 166, 10, - -1, 167, 10, -1, 224, 10, -1, 225, 10, 10, - -1, 226, 10, 10, -1, 228, 10, 10, 10, -1, - 229, 10, 10, 10, -1, 227, 10, 10, 10, -1, - 231, 10, 10, -1, 188, 10, 10, -1, 195, 10, - -1, 198, 10, -1, 197, 10, -1, 200, 10, -1, - 196, 10, -1, 199, 10, -1, 202, 10, 10, -1, - 203, 10, 10, -1, 204, 10, -1, 205, 10, -1, - 206, 10, -1, 207, 10, -1, 201, 10, -1, 289, - 10, -1, 292, 10, -1, 291, 10, -1, 221, 10, - -1, 222, 10, -1, 263, 10, -1, 264, 10, -1, - 265, 10, -1, 266, 10, -1, 267, 10, -1, 269, - 10, -1, 268, 10, -1, 270, 10, -1, 271, 10, - -1, 272, 10, -1, 318, 10, 10, -1, 319, 10, - -1, 326, 10, -1, 327, 10, -1, 45, 10, -1, - 47, 10, -1, 48, 10, -1, 155, 10, -1, 297, - 10, -1, 143, 10, -1, 146, 10, -1, 110, 10, - -1, 45, 10, -1, 53, 10, -1, 54, 10, -1, - 142, 10, -1, 296, 10, -1, 144, 10, -1, 147, - 10, -1, 45, 10, -1, 283, 10, -1, 284, 10, - -1, 285, 10, -1, 293, 10, -1, 322, 10, -1, - 323, 10, -1, 286, 10, -1, 281, 10, -1, 287, - 10, -1, 45, 10, -1, 81, 10, 10, -1, 189, - 10, 10, -1, 190, 10, 10, -1, 82, 10, -1, - 108, 10, -1, 232, 10, -1, 96, -1, 609, 610, - -1, -1, 611, -1, 613, -1, 612, -1, 615, -1, - 616, -1, 617, -1, 618, -1, 614, -1, 97, 10, - -1, 99, 10, -1, 98, 10, -1, 104, 10, -1, - 100, 10, -1, 101, 10, -1, 102, 10, -1, 103, - 10, -1, 168, -1, 620, 621, -1, -1, 622, -1, - 624, -1, 623, -1, 625, -1, 626, -1, 627, -1, - 628, -1, 629, -1, 630, -1, 631, -1, 632, -1, - 633, -1, 634, -1, 635, -1, 636, -1, 637, -1, - 638, -1, 639, -1, 640, -1, 169, 10, -1, 179, - 10, -1, 170, 10, -1, 171, 10, -1, 172, 10, - -1, 173, 10, -1, 174, 10, -1, 175, 10, -1, - 176, 10, -1, 177, 10, -1, 178, 10, -1, 180, - 10, -1, 181, 10, -1, 182, 10, -1, 183, 10, - -1, 184, 10, -1, 185, 10, -1, 186, 10, -1, - 187, 10, -1, 114, -1, 642, 643, -1, -1, 644, - -1, 115, 10, -1, 316, -1, 646, 647, -1, -1, - 648, -1, 317, 10, -1, 194, 10, -1, 242, 10, - -1, 189, 10, 10, -1, 190, 10, 10, -1, 252, - -1, 654, 655, -1, -1, 656, -1, 657, -1, 658, - -1, 661, -1, 659, -1, 660, -1, 662, -1, 663, - -1, 664, -1, 665, -1, 253, 10, -1, 254, 10, - -1, 255, 10, -1, 257, 10, -1, 258, 10, -1, - 256, 10, -1, 259, 10, -1, 260, 10, -1, 261, - 10, -1, 262, 10, -1, 273, -1, 667, 668, -1, - -1, 669, -1, 670, -1, 671, -1, 672, -1, 673, - -1, 674, -1, 274, 10, -1, 275, 10, -1, 276, - 10, -1, 277, 10, -1, 278, 10, -1, 279, 10, - -1, 295, 10, 10, -1, 306, -1, 677, 678, -1, - -1, 679, -1, 680, -1, 307, 10, -1, 308, 10, - -1 + 372, -1, 373, -1, 374, -1, 486, -1, 502, -1, + 524, -1, 562, -1, 454, -1, 538, -1, 539, -1, + 651, -1, 540, -1, 543, -1, 541, -1, 542, -1, + 544, -1, 563, -1, 564, -1, 565, -1, 566, -1, + 567, -1, 509, -1, 510, -1, 511, -1, 512, -1, + 513, -1, 514, -1, 515, -1, 516, -1, 652, -1, + 418, -1, 545, -1, 653, -1, 654, -1, 362, -1, + 363, -1, 517, -1, 444, -1, 439, -1, 440, -1, + 568, -1, 570, -1, 569, -1, 571, -1, 572, -1, + 573, -1, 399, -1, 507, -1, 404, -1, 406, -1, + 559, -1, 561, -1, 560, -1, 405, -1, 677, -1, + 425, -1, 491, -1, 533, -1, 424, -1, 456, -1, + 407, -1, 408, -1, 409, -1, 410, -1, 574, -1, + 575, -1, 449, -1, 520, -1, 393, -1, 394, -1, + 395, -1, 383, -1, 576, -1, 577, -1, 46, -1, + 337, 338, -1, -1, 578, -1, 579, -1, 580, -1, + 585, -1, 581, -1, 582, -1, 583, -1, 584, -1, + 52, -1, 340, 341, -1, -1, 586, -1, 587, -1, + 588, -1, 589, -1, 590, -1, 591, -1, 592, -1, + 231, -1, 343, 344, -1, -1, 603, -1, 604, -1, + 607, -1, 609, -1, 605, -1, 606, -1, 608, -1, + 283, -1, 346, 347, -1, -1, 593, -1, 594, -1, + 595, -1, 596, -1, 600, -1, 601, -1, 602, -1, + 597, -1, 598, -1, 599, -1, 312, 10, -1, 313, + 10, -1, 314, 10, -1, 315, 10, -1, 316, 10, + -1, 325, 10, -1, 311, -1, 355, 356, -1, -1, + 593, -1, 594, -1, 348, -1, 595, -1, 596, -1, + 597, -1, 349, -1, 350, -1, 351, -1, 352, -1, + 353, -1, 600, -1, 14, 10, -1, 13, 10, -1, + 84, 10, -1, 87, 10, -1, 107, 10, -1, 250, + 10, -1, 251, 10, -1, 15, 10, -1, 209, 10, + -1, 210, 10, -1, 211, 10, -1, 212, 10, -1, + 213, 10, -1, 214, 10, -1, 215, 10, -1, 216, + 10, -1, 217, 10, -1, 218, 10, -1, 17, 10, + -1, 75, 10, -1, 16, 10, -1, 88, 10, -1, + 89, 10, -1, 39, 10, -1, 68, 10, -1, 83, + 10, -1, 326, 10, -1, 19, 10, -1, 20, 10, + -1, 22, 10, -1, 23, 10, -1, 18, 10, -1, + 21, 10, -1, 24, 10, -1, 25, 10, -1, 26, + 10, -1, 106, 10, -1, 105, 10, -1, 138, 10, + -1, 27, 10, -1, 28, 10, -1, 136, 10, -1, + 281, 10, -1, 137, 10, -1, 139, 10, -1, 140, + 10, -1, 141, 10, -1, 145, 10, -1, 295, 10, + -1, 289, 10, -1, 304, 10, -1, 305, 10, -1, + 310, 10, -1, 306, 10, -1, 148, 10, -1, 149, + 10, -1, 150, 10, -1, 151, 10, -1, 152, 10, + -1, 153, 10, -1, 154, 10, -1, 249, 10, -1, + 85, 10, -1, 74, 10, -1, 112, 10, -1, 133, + 10, -1, 134, 10, -1, 302, 10, -1, 299, 10, + -1, 135, 10, -1, 29, 10, -1, 30, 10, -1, + 31, 10, -1, 32, 10, -1, 33, 10, -1, 76, + 10, -1, 90, 10, -1, 91, 10, -1, 121, 10, + -1, 62, 10, -1, 72, 10, -1, 63, 10, -1, + 247, 10, -1, 252, 10, -1, 113, 10, -1, 56, + 10, -1, 57, 10, -1, 244, 10, -1, 245, 10, + -1, 58, 10, -1, 59, 10, -1, 246, 10, -1, + 321, 10, -1, 125, 10, -1, 129, 10, -1, 130, + 10, -1, 193, 10, -1, 224, 10, -1, 194, 10, + -1, 303, 10, -1, 126, 10, -1, 69, 10, -1, + 34, 10, -1, 35, 10, -1, 36, 10, -1, 109, + 10, -1, 159, 10, -1, 160, 10, -1, 161, 10, + -1, 162, 10, -1, 37, 10, -1, 38, 10, -1, + 40, 10, -1, 41, 10, -1, 43, 10, -1, 44, + 10, -1, 42, 10, -1, 163, 10, -1, 164, 10, + -1, 165, 10, -1, 49, 10, -1, 50, 10, -1, + 51, 10, -1, 60, 10, -1, 79, 10, -1, 131, + 10, -1, 93, 10, -1, 192, 10, -1, 86, 10, + -1, 219, 10, -1, 94, 10, -1, 95, 10, -1, + 127, 10, -1, 128, 10, -1, 300, 10, -1, 111, + 10, -1, 55, 10, -1, 77, 10, -1, 80, 10, + 10, -1, 61, 10, -1, 64, 10, -1, 116, 10, + -1, 117, 10, -1, 118, 10, -1, 78, 10, -1, + 220, 10, -1, 119, 10, -1, 65, 10, -1, 66, + 10, -1, 67, 10, -1, 248, 10, -1, 132, 10, + -1, 234, 10, -1, 235, 10, -1, 236, 10, -1, + 237, 10, -1, 238, 10, -1, 239, 10, -1, 240, + 10, -1, 241, 10, -1, 242, 10, -1, 120, 10, + -1, 73, 10, -1, 322, 10, -1, 123, 10, -1, + 124, 10, -1, 122, 10, -1, 221, 10, -1, 70, + 10, -1, 71, 10, -1, 92, 10, -1, 81, 10, + 10, -1, 82, 10, -1, 108, 10, -1, 156, 10, + -1, 157, 10, -1, 301, 10, -1, 158, 10, -1, + 166, 10, -1, 167, 10, -1, 168, 10, -1, 225, + 10, -1, 226, 10, 10, -1, 227, 10, 10, -1, + 229, 10, 10, 10, -1, 230, 10, 10, 10, -1, + 228, 10, 10, 10, -1, 232, 10, 10, -1, 189, + 10, 10, -1, 196, 10, -1, 199, 10, -1, 198, + 10, -1, 201, 10, -1, 197, 10, -1, 200, 10, + -1, 203, 10, 10, -1, 204, 10, 10, -1, 205, + 10, -1, 206, 10, -1, 207, 10, -1, 208, 10, + -1, 202, 10, -1, 290, 10, -1, 293, 10, -1, + 292, 10, -1, 222, 10, -1, 223, 10, -1, 264, + 10, -1, 265, 10, -1, 266, 10, -1, 267, 10, + -1, 268, 10, -1, 270, 10, -1, 269, 10, -1, + 271, 10, -1, 272, 10, -1, 273, 10, -1, 319, + 10, 10, -1, 320, 10, -1, 327, 10, -1, 328, + 10, -1, 45, 10, -1, 47, 10, -1, 48, 10, + -1, 155, 10, -1, 298, 10, -1, 143, 10, -1, + 146, 10, -1, 110, 10, -1, 45, 10, -1, 53, + 10, -1, 54, 10, -1, 142, 10, -1, 297, 10, + -1, 144, 10, -1, 147, 10, -1, 45, 10, -1, + 284, 10, -1, 285, 10, -1, 286, 10, -1, 294, + 10, -1, 323, 10, -1, 324, 10, -1, 287, 10, + -1, 282, 10, -1, 288, 10, -1, 45, 10, -1, + 81, 10, 10, -1, 190, 10, 10, -1, 191, 10, + 10, -1, 82, 10, -1, 108, 10, -1, 233, 10, + -1, 96, -1, 611, 612, -1, -1, 613, -1, 615, + -1, 614, -1, 617, -1, 618, -1, 619, -1, 620, + -1, 616, -1, 97, 10, -1, 99, 10, -1, 98, + 10, -1, 104, 10, -1, 100, 10, -1, 101, 10, + -1, 102, 10, -1, 103, 10, -1, 169, -1, 622, + 623, -1, -1, 624, -1, 626, -1, 625, -1, 627, + -1, 628, -1, 629, -1, 630, -1, 631, -1, 632, + -1, 633, -1, 634, -1, 635, -1, 636, -1, 637, + -1, 638, -1, 639, -1, 640, -1, 641, -1, 642, + -1, 170, 10, -1, 180, 10, -1, 171, 10, -1, + 172, 10, -1, 173, 10, -1, 174, 10, -1, 175, + 10, -1, 176, 10, -1, 177, 10, -1, 178, 10, + -1, 179, 10, -1, 181, 10, -1, 182, 10, -1, + 183, 10, -1, 184, 10, -1, 185, 10, -1, 186, + 10, -1, 187, 10, -1, 188, 10, -1, 114, -1, + 644, 645, -1, -1, 646, -1, 115, 10, -1, 317, + -1, 648, 649, -1, -1, 650, -1, 318, 10, -1, + 195, 10, -1, 243, 10, -1, 190, 10, 10, -1, + 191, 10, 10, -1, 253, -1, 656, 657, -1, -1, + 658, -1, 659, -1, 660, -1, 663, -1, 661, -1, + 662, -1, 664, -1, 665, -1, 666, -1, 667, -1, + 254, 10, -1, 255, 10, -1, 256, 10, -1, 258, + 10, -1, 259, 10, -1, 257, 10, -1, 260, 10, + -1, 261, 10, -1, 262, 10, -1, 263, 10, -1, + 274, -1, 669, 670, -1, -1, 671, -1, 672, -1, + 673, -1, 674, -1, 675, -1, 676, -1, 275, 10, + -1, 276, 10, -1, 277, 10, -1, 278, 10, -1, + 279, 10, -1, 280, 10, -1, 296, 10, 10, -1, + 307, -1, 679, 680, -1, -1, 681, -1, 682, -1, + 308, 10, -1, 309, 10, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 196, 196, 196, 197, 197, 198, 198, 199, 199, - 199, 200, 200, 201, 201, 202, 202, 203, 205, 211, - 216, 217, 218, 218, 218, 219, 219, 220, 220, 220, - 221, 221, 222, 222, 222, 223, 223, 224, 224, 224, - 225, 225, 225, 226, 226, 227, 227, 228, 228, 229, - 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, - 234, 234, 235, 235, 236, 236, 236, 237, 237, 237, - 238, 238, 239, 239, 240, 240, 241, 241, 242, 242, - 242, 243, 243, 244, 244, 245, 245, 245, 246, 246, - 247, 247, 248, 248, 249, 249, 249, 250, 250, 251, - 251, 252, 252, 253, 253, 254, 254, 255, 255, 256, - 256, 257, 257, 258, 258, 258, 259, 259, 259, 260, - 260, 260, 261, 261, 261, 261, 262, 263, 263, 263, - 264, 264, 264, 265, 265, 266, 266, 267, 267, 267, - 268, 268, 268, 269, 269, 270, 270, 270, 271, 271, - 272, 272, 272, 273, 273, 274, 274, 275, 275, 276, - 277, 277, 278, 278, 279, 279, 280, 280, 281, 281, - 282, 282, 283, 283, 284, 284, 285, 285, 286, 286, - 287, 287, 287, 288, 288, 289, 289, 290, 290, 291, - 292, 292, 293, 293, 294, 295, 295, 296, 296, 297, - 297, 297, 298, 298, 299, 299, 299, 300, 300, 300, - 301, 301, 302, 303, 303, 304, 304, 305, 305, 306, - 306, 307, 307, 307, 308, 308, 308, 309, 309, 309, - 310, 310, 311, 311, 312, 312, 313, 313, 314, 314, - 315, 315, 316, 316, 317, 317, 317, 320, 333, 334, - 335, 335, 335, 335, 335, 336, 336, 336, 338, 351, - 352, 353, 353, 353, 353, 354, 354, 354, 356, 371, - 372, 373, 373, 373, 373, 374, 374, 374, 376, 396, - 397, 398, 398, 398, 398, 399, 399, 399, 400, 400, - 400, 403, 422, 439, 447, 457, 464, 474, 492, 493, - 494, 494, 494, 494, 494, 495, 495, 495, 496, 496, - 496, 496, 498, 507, 516, 527, 536, 545, 554, 565, - 574, 586, 600, 615, 626, 643, 660, 677, 694, 709, - 724, 737, 752, 761, 770, 779, 788, 797, 806, 813, - 822, 831, 840, 849, 858, 867, 876, 885, 898, 909, - 920, 931, 940, 953, 962, 971, 980, 987, 994, 1003, - 1010, 1019, 1027, 1034, 1041, 1049, 1058, 1066, 1082, 1090, - 1098, 1106, 1114, 1122, 1131, 1140, 1154, 1163, 1172, 1181, - 1190, 1199, 1208, 1215, 1222, 1248, 1256, 1263, 1270, 1277, - 1284, 1292, 1300, 1308, 1315, 1326, 1337, 1344, 1353, 1362, - 1371, 1380, 1387, 1394, 1401, 1417, 1425, 1433, 1443, 1453, - 1463, 1477, 1485, 1498, 1509, 1517, 1530, 1539, 1548, 1557, - 1566, 1576, 1586, 1594, 1607, 1616, 1624, 1633, 1641, 1654, - 1663, 1673, 1680, 1690, 1700, 1710, 1720, 1730, 1740, 1750, - 1760, 1767, 1774, 1781, 1790, 1799, 1808, 1817, 1824, 1834, - 1854, 1861, 1879, 1892, 1905, 1918, 1927, 1936, 1945, 1954, - 1964, 1974, 1985, 1994, 2003, 2012, 2021, 2030, 2039, 2048, - 2057, 2070, 2083, 2092, 2099, 2108, 2117, 2126, 2135, 2144, - 2152, 2165, 2173, 2228, 2235, 2250, 2260, 2270, 2277, 2284, - 2291, 2300, 2308, 2322, 2343, 2364, 2376, 2388, 2400, 2409, - 2430, 2439, 2448, 2456, 2464, 2477, 2490, 2505, 2520, 2529, - 2538, 2548, 2558, 2567, 2573, 2582, 2591, 2601, 2611, 2621, - 2630, 2640, 2649, 2662, 2675, 2687, 2701, 2713, 2727, 2736, - 2747, 2756, 2764, 2774, 2781, 2788, 2797, 2806, 2816, 2826, - 2836, 2846, 2853, 2860, 2869, 2878, 2888, 2898, 2908, 2915, - 2922, 2929, 2937, 2947, 2957, 2967, 2977, 2987, 2997, 3053, - 3063, 3071, 3079, 3094, 3103, 3108, 3109, 3110, 3110, 3110, - 3111, 3111, 3111, 3112, 3112, 3114, 3124, 3133, 3140, 3147, - 3154, 3161, 3168, 3175, 3180, 3181, 3182, 3182, 3182, 3183, - 3183, 3183, 3184, 3185, 3185, 3186, 3186, 3187, 3187, 3188, - 3189, 3190, 3191, 3192, 3193, 3195, 3204, 3214, 3221, 3228, - 3237, 3244, 3251, 3258, 3265, 3274, 3283, 3290, 3297, 3307, - 3317, 3327, 3337, 3347, 3357, 3362, 3363, 3364, 3366, 3372, - 3377, 3378, 3379, 3381, 3387, 3397, 3404, 3413, 3421, 3426, - 3427, 3429, 3429, 3429, 3430, 3430, 3431, 3432, 3433, 3434, - 3435, 3437, 3447, 3456, 3463, 3472, 3479, 3488, 3496, 3509, - 3517, 3530, 3535, 3536, 3537, 3537, 3538, 3538, 3538, 3539, - 3541, 3553, 3565, 3577, 3592, 3605, 3618, 3629, 3634, 3635, - 3636, 3636, 3638, 3653 + 199, 200, 200, 201, 201, 202, 202, 203, 205, 212, + 218, 219, 220, 220, 220, 221, 221, 222, 222, 222, + 223, 223, 224, 224, 224, 225, 225, 226, 226, 226, + 227, 227, 227, 228, 228, 229, 229, 230, 230, 231, + 231, 232, 232, 233, 233, 234, 234, 235, 235, 236, + 236, 236, 237, 237, 238, 238, 238, 239, 239, 239, + 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, + 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, + 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, + 253, 254, 254, 255, 255, 256, 256, 257, 257, 258, + 258, 259, 259, 260, 260, 260, 261, 261, 261, 262, + 262, 262, 263, 263, 263, 263, 264, 265, 265, 265, + 266, 266, 266, 267, 267, 268, 268, 269, 269, 269, + 270, 270, 270, 271, 271, 272, 272, 272, 273, 273, + 273, 274, 274, 274, 275, 275, 276, 276, 277, 277, + 278, 279, 279, 280, 280, 281, 281, 282, 282, 283, + 283, 284, 284, 285, 285, 286, 286, 287, 287, 288, + 288, 289, 289, 289, 290, 290, 291, 291, 292, 292, + 293, 294, 294, 295, 295, 296, 297, 297, 298, 298, + 299, 299, 299, 300, 300, 301, 301, 301, 302, 302, + 302, 303, 303, 304, 305, 305, 306, 306, 307, 307, + 308, 308, 309, 309, 309, 310, 310, 310, 311, 311, + 311, 312, 312, 313, 313, 314, 314, 315, 315, 316, + 316, 317, 317, 318, 318, 319, 319, 319, 322, 336, + 337, 338, 338, 338, 338, 338, 339, 339, 339, 341, + 355, 356, 357, 357, 357, 357, 358, 358, 358, 360, + 376, 377, 378, 378, 378, 378, 379, 379, 379, 381, + 402, 403, 404, 404, 404, 404, 405, 405, 405, 406, + 406, 406, 409, 428, 445, 453, 463, 470, 480, 499, + 500, 501, 501, 501, 501, 501, 502, 502, 502, 503, + 503, 503, 503, 505, 514, 523, 534, 543, 552, 561, + 572, 581, 593, 607, 622, 633, 650, 667, 684, 701, + 716, 731, 744, 759, 768, 777, 786, 795, 804, 813, + 820, 829, 838, 847, 856, 865, 874, 883, 892, 905, + 916, 927, 938, 947, 960, 969, 978, 987, 994, 1001, + 1010, 1017, 1026, 1034, 1041, 1048, 1056, 1065, 1073, 1089, + 1097, 1105, 1113, 1121, 1129, 1138, 1147, 1161, 1170, 1179, + 1188, 1197, 1206, 1215, 1222, 1229, 1255, 1263, 1270, 1277, + 1284, 1291, 1299, 1307, 1315, 1322, 1333, 1344, 1351, 1360, + 1369, 1378, 1387, 1394, 1401, 1408, 1424, 1432, 1440, 1450, + 1460, 1470, 1484, 1492, 1505, 1516, 1524, 1537, 1546, 1555, + 1564, 1573, 1583, 1593, 1601, 1614, 1623, 1631, 1640, 1648, + 1661, 1670, 1679, 1689, 1696, 1706, 1716, 1726, 1736, 1746, + 1756, 1766, 1776, 1783, 1790, 1797, 1806, 1815, 1824, 1833, + 1840, 1850, 1870, 1877, 1895, 1908, 1921, 1934, 1943, 1952, + 1961, 1970, 1980, 1990, 2001, 2010, 2019, 2028, 2037, 2046, + 2055, 2064, 2073, 2086, 2099, 2108, 2115, 2124, 2133, 2142, + 2151, 2160, 2168, 2181, 2189, 2244, 2251, 2266, 2276, 2286, + 2293, 2300, 2307, 2316, 2324, 2338, 2359, 2380, 2392, 2404, + 2416, 2425, 2446, 2455, 2464, 2472, 2480, 2493, 2506, 2521, + 2536, 2545, 2554, 2564, 2574, 2583, 2589, 2598, 2607, 2617, + 2627, 2637, 2646, 2656, 2665, 2678, 2691, 2703, 2717, 2729, + 2743, 2752, 2763, 2772, 2780, 2790, 2797, 2804, 2813, 2822, + 2832, 2842, 2852, 2862, 2869, 2876, 2885, 2894, 2904, 2914, + 2924, 2931, 2938, 2945, 2953, 2963, 2973, 2983, 2993, 3003, + 3013, 3069, 3079, 3087, 3095, 3110, 3119, 3125, 3126, 3127, + 3127, 3127, 3128, 3128, 3128, 3129, 3129, 3131, 3141, 3150, + 3157, 3164, 3171, 3178, 3185, 3192, 3198, 3199, 3200, 3200, + 3200, 3201, 3201, 3201, 3202, 3203, 3203, 3204, 3204, 3205, + 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3213, 3222, 3232, + 3239, 3246, 3255, 3262, 3269, 3276, 3283, 3292, 3301, 3308, + 3315, 3325, 3335, 3345, 3355, 3365, 3375, 3381, 3382, 3383, + 3385, 3391, 3397, 3398, 3399, 3401, 3407, 3417, 3424, 3433, + 3441, 3447, 3448, 3450, 3450, 3450, 3451, 3451, 3452, 3453, + 3454, 3455, 3456, 3458, 3468, 3477, 3484, 3493, 3500, 3509, + 3517, 3530, 3538, 3551, 3557, 3558, 3559, 3559, 3560, 3560, + 3560, 3561, 3563, 3575, 3587, 3599, 3614, 3627, 3640, 3651, + 3657, 3658, 3659, 3659, 3661, 3676 }; #endif @@ -1477,14 +1479,14 @@ static const char *const yytname[] = "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", - "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", - "VAR_DNS64_SYNTHALL", "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", - "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", - "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME", - "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", - "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY", - "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL", - "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", + "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_CACHE_MAX_RTT", + "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", + "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", + "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS", + "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE", + "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", + "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", + "VAR_DNSTAP_BIDIRECTIONAL", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", @@ -1603,29 +1605,30 @@ static const char *const yytname[] = "server_rrset_cache_slabs", "server_infra_host_ttl", "server_infra_lame_ttl", "server_infra_cache_numhosts", "server_infra_cache_lame_size", "server_infra_cache_slabs", - "server_infra_cache_min_rtt", "server_infra_keep_probing", - "server_target_fetch_policy", "server_harden_short_bufsize", - "server_harden_large_queries", "server_harden_glue", - "server_harden_dnssec_stripped", "server_harden_below_nxdomain", - "server_harden_referral_path", "server_harden_algo_downgrade", - "server_use_caps_for_id", "server_caps_whitelist", - "server_private_address", "server_private_domain", "server_prefetch", - "server_prefetch_key", "server_deny_any", - "server_unwanted_reply_threshold", "server_do_not_query_address", - "server_do_not_query_localhost", "server_access_control", - "server_module_conf", "server_val_override_date", - "server_val_sig_skew_min", "server_val_sig_skew_max", - "server_val_max_restart", "server_cache_max_ttl", - "server_cache_max_negative_ttl", "server_cache_min_ttl", - "server_bogus_ttl", "server_val_clean_additional", - "server_val_permissive_mode", "server_aggressive_nsec", - "server_ignore_cd_flag", "server_serve_expired", - "server_serve_expired_ttl", "server_serve_expired_ttl_reset", - "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout", - "server_ede_serve_expired", "server_serve_original_ttl", - "server_fake_dsa", "server_fake_sha1", "server_val_log_level", - "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode", - "server_add_holddown", "server_del_holddown", "server_keep_missing", + "server_infra_cache_min_rtt", "server_infra_cache_max_rtt", + "server_infra_keep_probing", "server_target_fetch_policy", + "server_harden_short_bufsize", "server_harden_large_queries", + "server_harden_glue", "server_harden_dnssec_stripped", + "server_harden_below_nxdomain", "server_harden_referral_path", + "server_harden_algo_downgrade", "server_use_caps_for_id", + "server_caps_whitelist", "server_private_address", + "server_private_domain", "server_prefetch", "server_prefetch_key", + "server_deny_any", "server_unwanted_reply_threshold", + "server_do_not_query_address", "server_do_not_query_localhost", + "server_access_control", "server_module_conf", + "server_val_override_date", "server_val_sig_skew_min", + "server_val_sig_skew_max", "server_val_max_restart", + "server_cache_max_ttl", "server_cache_max_negative_ttl", + "server_cache_min_ttl", "server_bogus_ttl", + "server_val_clean_additional", "server_val_permissive_mode", + "server_aggressive_nsec", "server_ignore_cd_flag", + "server_serve_expired", "server_serve_expired_ttl", + "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", + "server_serve_expired_client_timeout", "server_ede_serve_expired", + "server_serve_original_ttl", "server_fake_dsa", "server_fake_sha1", + "server_val_log_level", "server_val_nsec3_keysize_iterations", + "server_zonemd_permissive_mode", "server_add_holddown", + "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", @@ -1728,45 +1731,45 @@ static const yytype_uint16 yytoknum[] = 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582 + 575, 576, 577, 578, 579, 580, 581, 582, 583 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 328, 329, 329, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 331, 332, - 333, 333, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 335, 336, 336, - 337, 337, 337, 337, 337, 337, 337, 337, 338, 339, - 339, 340, 340, 340, 340, 340, 340, 340, 341, 342, - 342, 343, 343, 343, 343, 343, 343, 343, 344, 345, - 345, 346, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 354, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 0, 329, 330, 330, 331, 331, 331, 331, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, 332, 333, + 334, 334, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 336, 337, + 337, 338, 338, 338, 338, 338, 338, 338, 338, 339, + 340, 340, 341, 341, 341, 341, 341, 341, 341, 342, + 343, 343, 344, 344, 344, 344, 344, 344, 344, 345, + 346, 346, 347, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 355, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, @@ -1791,19 +1794,19 @@ static const yytype_uint16 yyr1[] = 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 609, 610, 610, 610, - 610, 610, 610, 610, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 620, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 622, 623, 624, 625, 626, + 604, 605, 606, 607, 608, 609, 610, 611, 611, 612, + 612, 612, 612, 612, 612, 612, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 622, 623, 623, + 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, + 623, 623, 623, 623, 623, 623, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 642, 642, 643, 644, 645, - 646, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 654, 655, 655, 655, 655, 655, 655, 655, 655, 655, - 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, - 665, 666, 667, 667, 668, 668, 668, 668, 668, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 677, - 678, 678, 679, 680 + 637, 638, 639, 640, 641, 642, 643, 644, 644, 645, + 646, 647, 648, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 656, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 669, 670, 670, 670, 670, + 670, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 679, 679, 680, 680, 681, 682 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -1833,51 +1836,51 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 1, 2, 0, + 2, 0, 1, 1, 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, + 1, 1, 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, 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, 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, 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, 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, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 2, 2, 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, + 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, + 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, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 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, 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, 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, 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, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 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, 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, 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, 2, 2, 2, 1, 2, 0, 1, + 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, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 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, 1, 2, 0, 1, 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, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 3, 1, 2, 0, - 1, 1, 2, 2 + 1, 1, 2, 2, 2, 2, 2, 2, 3, 1, + 2, 0, 1, 1, 2, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -1885,10 +1888,10 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 18, 19, 247, 258, 564, 624, 583, - 268, 638, 661, 278, 677, 297, 629, 3, 17, 21, - 249, 260, 270, 280, 299, 566, 585, 626, 631, 640, - 663, 679, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 248, 259, 566, 626, 585, + 269, 640, 663, 279, 679, 298, 631, 3, 17, 21, + 250, 261, 271, 281, 300, 568, 587, 628, 633, 642, + 665, 681, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 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, @@ -1912,272 +1915,272 @@ static const yytype_uint16 yydefact[] = 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, - 20, 22, 23, 88, 91, 100, 207, 208, 24, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 37, - 79, 25, 92, 93, 48, 72, 87, 244, 26, 27, - 30, 31, 28, 29, 32, 33, 34, 241, 242, 243, - 35, 36, 124, 219, 125, 127, 128, 129, 221, 226, - 222, 233, 234, 235, 236, 130, 131, 132, 133, 134, - 135, 136, 203, 89, 78, 104, 122, 123, 231, 228, - 126, 38, 39, 40, 41, 42, 80, 94, 95, 111, - 66, 76, 67, 211, 212, 105, 58, 59, 210, 62, - 60, 61, 63, 239, 115, 119, 140, 150, 180, 153, - 232, 116, 73, 43, 44, 45, 102, 141, 142, 143, - 144, 46, 47, 49, 50, 52, 53, 51, 148, 154, - 54, 55, 56, 64, 83, 120, 97, 149, 90, 176, - 98, 99, 117, 118, 229, 103, 57, 81, 84, 65, - 68, 106, 107, 108, 82, 177, 109, 69, 70, 71, - 220, 121, 194, 195, 196, 197, 198, 199, 200, 201, - 209, 110, 77, 240, 112, 113, 114, 178, 74, 75, - 96, 85, 86, 101, 137, 138, 230, 139, 145, 146, - 147, 181, 182, 184, 186, 187, 185, 188, 204, 151, - 152, 157, 158, 155, 156, 159, 160, 162, 161, 164, - 163, 165, 223, 225, 224, 179, 189, 190, 191, 192, - 193, 213, 215, 214, 216, 217, 218, 237, 238, 245, - 246, 183, 202, 205, 206, 227, 0, 0, 0, 0, - 0, 0, 0, 0, 248, 250, 251, 252, 254, 255, - 256, 257, 253, 0, 0, 0, 0, 0, 0, 0, - 259, 261, 262, 263, 264, 265, 266, 267, 0, 0, - 0, 0, 0, 0, 0, 269, 271, 272, 275, 276, - 273, 277, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 279, 281, 282, 283, 284, 288, 289, - 290, 285, 286, 287, 0, 0, 0, 0, 0, 0, - 302, 306, 307, 308, 309, 310, 298, 300, 301, 303, - 304, 305, 311, 0, 0, 0, 0, 0, 0, 0, - 0, 565, 567, 569, 568, 574, 570, 571, 572, 573, + 0, 20, 22, 23, 88, 91, 100, 208, 209, 24, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 37, 79, 25, 92, 93, 48, 72, 87, 245, 26, + 27, 30, 31, 28, 29, 32, 33, 34, 242, 243, + 244, 35, 36, 124, 220, 125, 127, 128, 129, 222, + 227, 223, 234, 235, 236, 237, 130, 131, 132, 133, + 134, 135, 136, 204, 89, 78, 104, 122, 123, 232, + 229, 126, 38, 39, 40, 41, 42, 80, 94, 95, + 111, 66, 76, 67, 212, 213, 105, 58, 59, 211, + 62, 60, 61, 63, 240, 115, 119, 140, 151, 181, + 154, 233, 116, 73, 43, 44, 45, 102, 141, 142, + 143, 144, 46, 47, 49, 50, 52, 53, 51, 148, + 149, 155, 54, 55, 56, 64, 83, 120, 97, 150, + 90, 177, 98, 99, 117, 118, 230, 103, 57, 81, + 84, 65, 68, 106, 107, 108, 82, 178, 109, 69, + 70, 71, 221, 121, 195, 196, 197, 198, 199, 200, + 201, 202, 210, 110, 77, 241, 112, 113, 114, 179, + 74, 75, 96, 85, 86, 101, 137, 138, 231, 139, + 145, 146, 147, 182, 183, 185, 187, 188, 186, 189, + 205, 152, 153, 158, 159, 156, 157, 160, 161, 163, + 162, 165, 164, 166, 224, 226, 225, 180, 190, 191, + 192, 193, 194, 214, 216, 215, 217, 218, 219, 238, + 239, 246, 247, 184, 203, 206, 207, 228, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 251, 252, 253, + 255, 256, 257, 258, 254, 0, 0, 0, 0, 0, + 0, 0, 260, 262, 263, 264, 265, 266, 267, 268, + 0, 0, 0, 0, 0, 0, 0, 270, 272, 273, + 276, 277, 274, 278, 275, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 280, 282, 283, 284, 285, + 289, 290, 291, 286, 287, 288, 0, 0, 0, 0, + 0, 0, 303, 307, 308, 309, 310, 311, 299, 301, + 302, 304, 305, 306, 312, 0, 0, 0, 0, 0, + 0, 0, 0, 567, 569, 571, 570, 576, 572, 573, + 574, 575, 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, 584, - 586, 588, 587, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 0, - 625, 627, 0, 630, 632, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 639, 641, 642, 643, 645, - 646, 644, 647, 648, 649, 650, 0, 0, 0, 0, - 0, 0, 662, 664, 665, 666, 667, 668, 669, 0, - 0, 678, 680, 681, 313, 312, 319, 332, 330, 343, - 339, 340, 344, 341, 342, 345, 346, 347, 351, 352, - 382, 383, 384, 385, 386, 414, 415, 416, 422, 423, - 335, 424, 425, 428, 426, 427, 431, 432, 433, 447, - 397, 398, 401, 402, 434, 450, 391, 393, 451, 458, - 459, 460, 336, 413, 479, 480, 392, 473, 375, 331, - 387, 448, 455, 435, 0, 0, 483, 337, 314, 374, - 439, 315, 333, 334, 388, 389, 481, 437, 441, 442, - 349, 348, 316, 484, 417, 446, 376, 396, 452, 453, - 454, 457, 472, 390, 477, 475, 476, 405, 412, 443, - 444, 406, 407, 436, 462, 377, 378, 381, 353, 355, - 350, 356, 357, 358, 359, 366, 367, 368, 369, 370, - 371, 372, 485, 486, 488, 418, 419, 420, 421, 429, - 430, 489, 490, 491, 0, 0, 0, 438, 408, 410, - 634, 500, 504, 502, 501, 505, 503, 512, 0, 0, - 508, 509, 510, 511, 320, 321, 322, 323, 324, 325, - 326, 327, 328, 329, 440, 456, 478, 516, 517, 409, - 492, 0, 0, 0, 0, 0, 0, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 635, 399, 400, 403, - 394, 461, 373, 317, 318, 395, 518, 519, 520, 521, - 522, 524, 523, 525, 526, 527, 354, 361, 513, 515, - 514, 360, 0, 380, 445, 487, 379, 411, 362, 363, - 365, 364, 0, 529, 404, 474, 338, 530, 531, 532, - 533, 534, 539, 537, 538, 535, 536, 540, 541, 542, - 543, 545, 546, 544, 557, 0, 561, 562, 0, 0, - 563, 547, 555, 548, 549, 550, 554, 556, 551, 552, - 553, 291, 292, 293, 294, 295, 296, 575, 577, 576, - 579, 580, 581, 582, 578, 605, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 606, 616, 617, 618, 619, - 620, 621, 622, 623, 628, 633, 651, 652, 653, 656, - 654, 655, 657, 658, 659, 660, 670, 671, 672, 673, - 674, 675, 682, 683, 449, 482, 499, 636, 637, 506, - 507, 493, 494, 0, 0, 0, 498, 676, 528, 558, - 559, 560, 497, 495, 496 + 0, 586, 588, 590, 589, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 0, 627, 629, 0, 632, 634, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 641, 643, 644, + 645, 647, 648, 646, 649, 650, 651, 652, 0, 0, + 0, 0, 0, 0, 664, 666, 667, 668, 669, 670, + 671, 0, 0, 680, 682, 683, 314, 313, 320, 333, + 331, 344, 340, 341, 345, 342, 343, 346, 347, 348, + 352, 353, 383, 384, 385, 386, 387, 415, 416, 417, + 423, 424, 336, 425, 426, 429, 427, 428, 433, 434, + 435, 449, 398, 399, 402, 403, 436, 452, 392, 394, + 453, 460, 461, 462, 337, 414, 481, 482, 393, 475, + 376, 332, 388, 450, 457, 437, 0, 0, 485, 338, + 315, 375, 441, 316, 334, 335, 389, 390, 483, 439, + 443, 444, 350, 349, 317, 486, 418, 448, 377, 397, + 454, 455, 456, 459, 474, 391, 479, 477, 478, 406, + 413, 445, 446, 407, 408, 438, 464, 378, 379, 382, + 354, 356, 351, 357, 358, 359, 360, 367, 368, 369, + 370, 371, 372, 373, 487, 488, 490, 419, 420, 421, + 422, 430, 431, 432, 491, 492, 493, 0, 0, 0, + 440, 409, 411, 636, 502, 506, 504, 503, 507, 505, + 514, 0, 0, 510, 511, 512, 513, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 442, 458, 480, + 518, 519, 410, 494, 0, 0, 0, 0, 0, 0, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 637, + 400, 401, 404, 395, 463, 374, 318, 319, 396, 520, + 521, 522, 523, 524, 526, 525, 527, 528, 529, 355, + 362, 515, 517, 516, 361, 0, 381, 447, 489, 380, + 412, 363, 364, 366, 365, 0, 531, 405, 476, 339, + 532, 533, 534, 535, 536, 541, 539, 540, 537, 538, + 542, 543, 544, 545, 547, 548, 546, 559, 0, 563, + 564, 0, 0, 565, 549, 557, 550, 551, 552, 556, + 558, 553, 554, 555, 292, 293, 294, 295, 296, 297, + 577, 579, 578, 581, 582, 583, 584, 580, 607, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 608, 618, + 619, 620, 621, 622, 623, 624, 625, 630, 635, 653, + 654, 655, 658, 656, 657, 659, 660, 661, 662, 672, + 673, 674, 675, 676, 677, 684, 685, 451, 484, 501, + 638, 639, 508, 509, 495, 496, 0, 0, 0, 500, + 678, 530, 560, 561, 562, 499, 497, 498 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 32, 270, 20, 33, 504, - 21, 34, 520, 22, 35, 535, 23, 36, 553, 570, - 571, 572, 573, 574, 575, 24, 37, 576, 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, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 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, 505, 506, - 507, 508, 509, 510, 511, 512, 521, 522, 523, 524, - 525, 526, 527, 554, 555, 556, 557, 558, 559, 560, - 561, 562, 563, 536, 537, 538, 539, 540, 541, 542, - 25, 38, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 26, 39, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 27, 40, 640, 641, 28, 41, 643, - 644, 491, 492, 493, 494, 29, 42, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 30, 43, - 672, 673, 674, 675, 676, 677, 678, 495, 31, 44, - 681, 682, 683 + -1, 1, 17, 18, 19, 32, 271, 20, 33, 506, + 21, 34, 522, 22, 35, 537, 23, 36, 555, 572, + 573, 574, 575, 576, 577, 24, 37, 578, 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, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 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, 507, + 508, 509, 510, 511, 512, 513, 514, 523, 524, 525, + 526, 527, 528, 529, 556, 557, 558, 559, 560, 561, + 562, 563, 564, 565, 538, 539, 540, 541, 542, 543, + 544, 25, 38, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 26, 39, 621, 622, 623, 624, 625, 626, + 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 27, 40, 642, 643, 28, 41, + 645, 646, 493, 494, 495, 496, 29, 42, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, 667, 30, + 43, 674, 675, 676, 677, 678, 679, 680, 497, 31, + 44, 683, 684, 685 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -311 +#define YYPACT_NINF -312 static const yytype_int16 yypact[] = { - -311, 0, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, 304, -39, -32, -43, -30, -44, -42, -97, - -110, -310, -230, -234, -304, 4, 6, 7, 8, 9, + -312, 0, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, 305, -39, -32, -43, -30, -44, -42, -98, + -110, -311, -231, -235, -305, 4, 6, 7, 8, 9, 10, 23, 24, 25, 26, 27, 37, 38, 39, 40, 41, 43, 44, 53, 54, 56, 57, 58, 59, 60, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 95, 96, 98, 99, 101, 103, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 138, 139, 140, + 129, 130, 131, 132, 133, 134, 135, 136, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 159, 160, 161, + 151, 152, 153, 154, 155, 156, 157, 158, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 180, 181, 182, + 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, - 224, 225, 226, 227, 228, 233, 234, 235, 236, 237, - 238, 240, 249, 250, 251, 252, 255, 256, 262, 264, - 265, 266, 267, 268, 269, 271, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 297, 298, 299, - 301, 302, 303, 305, 339, 340, 341, 342, 346, 347, - 348, 390, 391, 392, 393, 394, 395, 396, 397, 398, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, 404, 408, 409, 436, - 437, 438, 440, 441, -311, -311, -311, -311, -311, -311, - -311, -311, -311, 449, 462, 463, 464, 465, 466, 467, - -311, -311, -311, -311, -311, -311, -311, -311, 468, 469, - 470, 471, 472, 473, 474, -311, -311, -311, -311, -311, - -311, -311, -311, 475, 476, 477, 478, 479, 480, 481, - 524, 526, 546, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, 547, 548, 549, 550, 551, 552, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, 553, 554, 555, 556, 567, 568, 569, - 570, -311, -311, -311, -311, -311, -311, -311, -311, -311, - 571, 572, 573, 575, 576, 577, 578, 579, 580, 581, - 584, 587, 590, 591, 600, 601, 602, 604, 605, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, 606, - -311, -311, 607, -311, -311, 608, 609, 610, 611, 616, - 617, 618, 622, 623, 624, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, 625, 626, 627, 628, - 629, 630, -311, -311, -311, -311, -311, -311, -311, 631, - 632, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, 633, 634, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, 635, 636, 637, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, 638, 639, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, 640, 641, 642, 643, 644, 645, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, 646, -311, -311, -311, -311, -311, -311, -311, - -311, -311, 647, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, 648, -311, -311, 649, 650, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, 651, 652, 653, -311, -311, -311, -311, - -311, -311, -311, -311, -311 + 213, 214, 215, 216, 217, 218, 219, 220, 222, 223, + 224, 225, 226, 227, 228, 229, 234, 235, 236, 237, + 238, 239, 241, 250, 251, 252, 253, 256, 257, 263, + 265, 266, 267, 268, 269, 270, 272, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, + 300, 302, 303, 304, 306, 340, 341, 342, 343, 347, + 348, 349, 391, 392, 393, 394, 395, 396, 397, 398, + 399, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, 405, 409, + 410, 437, 438, 439, 441, 442, -312, -312, -312, -312, + -312, -312, -312, -312, -312, 450, 464, 465, 466, 467, + 468, 469, -312, -312, -312, -312, -312, -312, -312, -312, + 470, 471, 472, 473, 474, 475, 476, -312, -312, -312, + -312, -312, -312, -312, -312, 477, 478, 479, 480, 481, + 482, 483, 526, 528, 548, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, 549, 550, 551, 552, + 553, 554, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, 555, 556, 557, 558, 569, + 570, 571, 572, -312, -312, -312, -312, -312, -312, -312, + -312, -312, 573, 574, 575, 577, 578, 579, 580, 581, + 582, 583, 586, 589, 592, 593, 602, 603, 604, 606, + 607, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, 608, -312, -312, 609, -312, -312, 610, 611, 612, + 613, 618, 619, 620, 624, 625, 626, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, 627, 628, + 629, 630, 631, 632, -312, -312, -312, -312, -312, -312, + -312, 633, 634, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, 635, 636, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, 637, 638, 639, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, 640, 641, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, 642, 643, 644, 645, 646, 647, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, 648, -312, -312, -312, -312, + -312, -312, -312, -312, -312, 649, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, 650, -312, + -312, 651, 652, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, 653, 654, 655, -312, + -312, -312, -312, -312, -312, -312, -312, -312 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -27, 654, 655, 656, 657, -311, -311, - 658, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311 + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -27, 656, 657, 658, 659, -312, + -312, 660, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -2187,161 +2190,161 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint16 yytable[] = { - 2, 543, 528, 679, 680, 639, 496, 642, 497, 498, - 577, 3, 4, 513, 684, 543, 685, 686, 687, 688, - 689, 514, 515, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 690, 691, 692, 693, 694, 529, 530, - 666, 667, 668, 669, 670, 671, 5, 695, 696, 697, - 698, 699, 6, 700, 701, 583, 584, 585, 586, 587, - 588, 589, 590, 702, 703, 531, 704, 705, 706, 707, - 708, 499, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 709, 710, 711, 712, 713, 7, 714, 715, 716, - 717, 718, 719, 720, 500, 721, 722, 501, 723, 724, - 516, 725, 517, 726, 8, 518, 502, 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, 753, 754, 755, 532, 533, 756, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, - 768, 769, 770, 771, 772, 773, 774, 775, 9, 776, - 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, - 787, 788, 789, 790, 791, 792, 793, 794, 795, 534, - 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, - 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, - 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, - 10, 836, 837, 838, 839, 840, 841, 842, 843, 545, - 546, 547, 548, 844, 845, 846, 847, 848, 849, 550, - 850, 544, 11, 545, 546, 547, 548, 549, 503, 851, - 852, 853, 854, 550, 519, 855, 856, 564, 565, 566, - 567, 568, 857, 12, 858, 859, 860, 861, 862, 863, - 569, 864, 13, 865, 866, 867, 868, 869, 870, 871, - 872, 873, 551, 552, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 14, 886, 887, 888, - 15, 889, 890, 891, 0, 892, 16, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 893, - 894, 895, 896, 77, 78, 79, 897, 898, 899, 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, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 900, 901, 902, 903, 904, 905, 906, 907, 908, 121, - 122, 123, 124, 125, 909, 126, 127, 128, 910, 911, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 912, 913, 914, 155, - 915, 916, 156, 157, 158, 159, 160, 161, 162, 917, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 918, 919, 920, 921, 922, 923, 924, 925, - 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, - 936, 937, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 938, 217, 939, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 940, 941, 942, 943, - 944, 945, 946, 947, 948, 949, 950, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 951, 952, 953, - 954, 955, 956, 957, 247, 958, 959, 960, 961, 962, - 963, 964, 248, 249, 965, 250, 251, 966, 252, 253, - 967, 968, 254, 255, 256, 257, 258, 259, 260, 261, - 969, 970, 971, 262, 972, 973, 974, 975, 976, 977, - 978, 979, 263, 264, 265, 266, 980, 981, 982, 267, - 268, 269, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 0, 0, 0, 0, 0, 0, + 2, 545, 530, 681, 682, 641, 498, 644, 499, 500, + 579, 3, 4, 515, 686, 545, 687, 688, 689, 690, + 691, 516, 517, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 692, 693, 694, 695, 696, 531, 532, + 668, 669, 670, 671, 672, 673, 5, 697, 698, 699, + 700, 701, 6, 702, 703, 585, 586, 587, 588, 589, + 590, 591, 592, 704, 705, 533, 706, 707, 708, 709, + 710, 501, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 711, 712, 713, 714, 715, 7, 716, 717, 718, + 719, 720, 721, 722, 502, 723, 724, 503, 725, 726, + 518, 727, 519, 728, 8, 520, 504, 729, 730, 731, + 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, + 752, 753, 754, 755, 756, 757, 758, 534, 535, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, + 770, 771, 772, 773, 774, 775, 776, 777, 778, 9, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 536, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, + 838, 10, 839, 840, 841, 842, 843, 844, 845, 846, + 547, 548, 549, 550, 847, 848, 849, 850, 851, 852, + 552, 853, 546, 11, 547, 548, 549, 550, 551, 505, + 854, 855, 856, 857, 552, 521, 858, 859, 566, 567, + 568, 569, 570, 860, 12, 861, 862, 863, 864, 865, + 866, 571, 867, 13, 868, 869, 870, 871, 872, 873, + 874, 875, 876, 553, 554, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 14, 889, 890, + 891, 15, 892, 893, 894, 0, 895, 16, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 896, 897, 898, 899, 77, 78, 79, 900, 901, 902, + 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, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 903, 904, 905, 906, 907, 908, 909, 910, 911, + 121, 122, 123, 124, 125, 912, 126, 127, 128, 913, + 914, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 915, 916, 917, + 155, 918, 919, 156, 157, 158, 159, 160, 161, 162, + 920, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 921, 922, 923, 924, 925, 926, + 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 941, 218, 942, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 943, 944, + 945, 946, 947, 948, 949, 950, 951, 952, 953, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 954, + 955, 956, 957, 958, 959, 960, 248, 961, 962, 963, + 964, 965, 966, 967, 249, 250, 968, 251, 252, 969, + 253, 254, 970, 971, 255, 256, 257, 258, 259, 260, + 261, 262, 972, 973, 974, 263, 975, 976, 977, 978, + 979, 980, 981, 982, 264, 265, 266, 267, 983, 984, + 985, 268, 269, 270, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 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, 578, 579, 580, 581, 582 + 0, 0, 0, 580, 581, 582, 583, 584 }; static const yytype_int16 yycheck[] = { - 0, 45, 45, 307, 308, 115, 45, 317, 47, 48, + 0, 45, 45, 308, 309, 115, 45, 318, 47, 48, 37, 11, 12, 45, 10, 45, 10, 10, 10, 10, - 10, 53, 54, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 10, 10, 10, 10, 10, 81, 82, - 274, 275, 276, 277, 278, 279, 46, 10, 10, 10, + 10, 53, 54, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 10, 10, 10, 10, 10, 81, 82, + 275, 276, 277, 278, 279, 280, 46, 10, 10, 10, 10, 10, 52, 10, 10, 97, 98, 99, 100, 101, 102, 103, 104, 10, 10, 108, 10, 10, 10, 10, - 10, 110, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 10, 10, 10, 10, 10, 96, 10, 10, 10, + 10, 110, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 10, 10, 10, 10, 10, 96, 10, 10, 10, 10, 10, 10, 10, 143, 10, 10, 146, 10, 10, 142, 10, 144, 10, 114, 147, 155, 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, 189, 190, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 190, 191, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 168, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 169, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 232, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 233, 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, 231, 10, 10, 10, 10, 10, 10, 10, 10, + 284, 285, 286, 287, 10, 10, 10, 10, 10, 10, + 294, 10, 282, 253, 284, 285, 286, 287, 288, 298, + 10, 10, 10, 10, 294, 297, 10, 10, 312, 313, + 314, 315, 316, 10, 274, 10, 10, 10, 10, 10, + 10, 325, 10, 283, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 323, 324, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 307, 10, 10, + 10, 311, 10, 10, 10, -1, 10, 317, 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, 40, 41, 42, 43, 44, + 10, 10, 10, 10, 49, 50, 51, 10, 10, 10, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 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, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 105, 106, 107, 108, 109, 10, 111, 112, 113, 10, + 10, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 10, 10, 10, + 145, 10, 10, 148, 149, 150, 151, 152, 153, 154, + 10, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 230, 10, 10, 10, 10, 10, 10, 10, 10, 283, - 284, 285, 286, 10, 10, 10, 10, 10, 10, 293, - 10, 281, 252, 283, 284, 285, 286, 287, 297, 10, - 10, 10, 10, 293, 296, 10, 10, 311, 312, 313, - 314, 315, 10, 273, 10, 10, 10, 10, 10, 10, - 324, 10, 282, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 322, 323, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 306, 10, 10, 10, - 310, 10, 10, 10, -1, 10, 316, 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, 40, 41, 42, 43, 44, 10, - 10, 10, 10, 49, 50, 51, 10, 10, 10, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 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, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 105, - 106, 107, 108, 109, 10, 111, 112, 113, 10, 10, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 10, 10, 10, 145, - 10, 10, 148, 149, 150, 151, 152, 153, 154, 10, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 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, 10, 231, 10, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 10, 10, 10, - 10, 10, 10, 10, 280, 10, 10, 10, 10, 10, - 10, 10, 288, 289, 10, 291, 292, 10, 294, 295, - 10, 10, 298, 299, 300, 301, 302, 303, 304, 305, - 10, 10, 10, 309, 10, 10, 10, 10, 10, 10, - 10, 10, 318, 319, 320, 321, 10, 10, 10, 325, - 326, 327, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 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, 10, 232, 10, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 10, + 10, 10, 10, 10, 10, 10, 281, 10, 10, 10, + 10, 10, 10, 10, 289, 290, 10, 292, 293, 10, + 295, 296, 10, 10, 299, 300, 301, 302, 303, 304, + 305, 306, 10, 10, 10, 310, 10, 10, 10, 10, + 10, 10, 10, 10, 319, 320, 321, 322, 10, 10, + 10, 326, 327, 328, 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, -1, -1, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, -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, 37, 37, 37, 37, 37 + -1, -1, -1, 37, 37, 37, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 329, 0, 11, 12, 46, 52, 96, 114, 168, - 230, 252, 273, 282, 306, 310, 316, 330, 331, 332, - 335, 338, 341, 344, 353, 608, 619, 641, 645, 653, - 666, 676, 333, 336, 339, 342, 345, 354, 609, 620, - 642, 646, 654, 667, 677, 13, 14, 15, 16, 17, + 0, 330, 0, 11, 12, 46, 52, 96, 114, 169, + 231, 253, 274, 283, 307, 311, 317, 331, 332, 333, + 336, 339, 342, 345, 354, 610, 621, 643, 647, 655, + 668, 678, 334, 337, 340, 343, 346, 355, 611, 622, + 644, 648, 656, 669, 679, 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, 40, 41, 42, 43, 44, 49, 50, 51, @@ -2354,17 +2357,17 @@ static const yytype_uint16 yystos[] = 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 145, 148, 149, 150, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 188, 189, 190, 191, 192, + 163, 164, 165, 166, 167, 168, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 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, 231, 233, 234, + 223, 224, 225, 226, 227, 228, 229, 230, 232, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 280, 288, 289, - 291, 292, 294, 295, 298, 299, 300, 301, 302, 303, - 304, 305, 309, 318, 319, 320, 321, 325, 326, 327, - 334, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 245, 246, 247, 248, 249, 250, 251, 252, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 281, 289, + 290, 292, 293, 295, 296, 299, 300, 301, 302, 303, + 304, 305, 306, 310, 319, 320, 321, 322, 326, 327, + 328, 335, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, @@ -2386,26 +2389,26 @@ static const yytype_uint16 yystos[] = 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, - 575, 649, 650, 651, 652, 675, 45, 47, 48, 110, - 143, 146, 155, 297, 337, 576, 577, 578, 579, 580, - 581, 582, 583, 45, 53, 54, 142, 144, 147, 296, - 340, 584, 585, 586, 587, 588, 589, 590, 45, 81, - 82, 108, 189, 190, 232, 343, 601, 602, 603, 604, - 605, 606, 607, 45, 281, 283, 284, 285, 286, 287, - 293, 322, 323, 346, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 311, 312, 313, 314, 315, 324, - 347, 348, 349, 350, 351, 352, 355, 591, 592, 593, - 594, 595, 598, 97, 98, 99, 100, 101, 102, 103, - 104, 610, 611, 612, 613, 614, 615, 616, 617, 618, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 621, - 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 115, - 643, 644, 317, 647, 648, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 274, 275, 276, 277, - 278, 279, 668, 669, 670, 671, 672, 673, 674, 307, - 308, 678, 679, 680, 10, 10, 10, 10, 10, 10, + 575, 576, 577, 651, 652, 653, 654, 677, 45, 47, + 48, 110, 143, 146, 155, 298, 338, 578, 579, 580, + 581, 582, 583, 584, 585, 45, 53, 54, 142, 144, + 147, 297, 341, 586, 587, 588, 589, 590, 591, 592, + 45, 81, 82, 108, 190, 191, 233, 344, 603, 604, + 605, 606, 607, 608, 609, 45, 282, 284, 285, 286, + 287, 288, 294, 323, 324, 347, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 312, 313, 314, 315, + 316, 325, 348, 349, 350, 351, 352, 353, 356, 593, + 594, 595, 596, 597, 600, 97, 98, 99, 100, 101, + 102, 103, 104, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 623, 624, 625, 626, 627, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 115, 645, 646, 318, 649, 650, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 657, 658, 659, + 660, 661, 662, 663, 664, 665, 666, 667, 275, 276, + 277, 278, 279, 280, 670, 671, 672, 673, 674, 675, + 676, 308, 309, 680, 681, 682, 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, @@ -2438,7 +2441,7 @@ static const yytype_uint16 yystos[] = 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 }; #define yyerrok (yyerrstatus = 0) @@ -3256,21 +3259,24 @@ yyreduce: #line 206 "./util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); + cfg_parser->started_toplevel = 0; } break; case 19: -#line 212 "./util/configparser.y" +#line 213 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 247: -#line 321 "./util/configparser.y" + case 248: +#line 323 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->stubs; @@ -3281,11 +3287,12 @@ yyreduce: } break; - case 258: -#line 339 "./util/configparser.y" + case 259: +#line 342 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->forwards; @@ -3296,11 +3303,12 @@ yyreduce: } break; - case 268: -#line 357 "./util/configparser.y" + case 269: +#line 361 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_view*)calloc(1, sizeof(struct config_view)); if(s) { s->next = cfg_parser->cfg->views; @@ -3313,11 +3321,12 @@ yyreduce: } break; - case 278: -#line 377 "./util/configparser.y" + case 279: +#line 382 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; @@ -3335,8 +3344,8 @@ yyreduce: } break; - case 291: -#line 404 "./util/configparser.y" + case 292: +#line 410 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -3355,8 +3364,8 @@ yyreduce: } break; - case 292: -#line 423 "./util/configparser.y" + case 293: +#line 429 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "nxdomain")!=0 && strcmp((yyvsp[(2) - (2)].str), "nodata")!=0 && @@ -3373,8 +3382,8 @@ yyreduce: } break; - case 293: -#line 440 "./util/configparser.y" + case 294: +#line 446 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->auths->rpz_cname); @@ -3382,8 +3391,8 @@ yyreduce: } break; - case 294: -#line 448 "./util/configparser.y" + case 295: +#line 454 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3393,8 +3402,8 @@ yyreduce: } break; - case 295: -#line 458 "./util/configparser.y" + case 296: +#line 464 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->auths->rpz_log_name); @@ -3402,8 +3411,8 @@ yyreduce: } break; - case 296: -#line 465 "./util/configparser.y" + case 297: +#line 471 "./util/configparser.y" { OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3413,11 +3422,12 @@ yyreduce: } break; - case 297: -#line 475 "./util/configparser.y" + case 298: +#line 481 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; @@ -3433,8 +3443,8 @@ yyreduce: } break; - case 312: -#line 499 "./util/configparser.y" + case 313: +#line 506 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3444,8 +3454,8 @@ yyreduce: } break; - case 313: -#line 508 "./util/configparser.y" + case 314: +#line 515 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3455,8 +3465,8 @@ yyreduce: } break; - case 314: -#line 517 "./util/configparser.y" + case 315: +#line 524 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) @@ -3468,8 +3478,8 @@ yyreduce: } break; - case 315: -#line 528 "./util/configparser.y" + case 316: +#line 535 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3479,8 +3489,8 @@ yyreduce: } break; - case 316: -#line 537 "./util/configparser.y" + case 317: +#line 544 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3490,8 +3500,8 @@ yyreduce: } break; - case 317: -#line 546 "./util/configparser.y" + case 318: +#line 553 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3501,8 +3511,8 @@ yyreduce: } break; - case 318: -#line 555 "./util/configparser.y" + case 319: +#line 562 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) @@ -3514,8 +3524,8 @@ yyreduce: } break; - case 319: -#line 566 "./util/configparser.y" + case 320: +#line 573 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -3525,8 +3535,8 @@ yyreduce: } break; - case 320: -#line 575 "./util/configparser.y" + case 321: +#line 582 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3539,8 +3549,8 @@ yyreduce: } break; - case 321: -#line 587 "./util/configparser.y" + case 322: +#line 594 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3554,8 +3564,8 @@ yyreduce: } break; - case 322: -#line 601 "./util/configparser.y" + case 323: +#line 608 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3571,8 +3581,8 @@ yyreduce: } break; - case 323: -#line 616 "./util/configparser.y" + case 324: +#line 623 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3584,8 +3594,8 @@ yyreduce: } break; - case 324: -#line 627 "./util/configparser.y" + case 325: +#line 634 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3603,8 +3613,8 @@ yyreduce: } break; - case 325: -#line 644 "./util/configparser.y" + case 326: +#line 651 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3622,8 +3632,8 @@ yyreduce: } break; - case 326: -#line 661 "./util/configparser.y" + case 327: +#line 668 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3641,8 +3651,8 @@ yyreduce: } break; - case 327: -#line 678 "./util/configparser.y" + case 328: +#line 685 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3660,8 +3670,8 @@ yyreduce: } break; - case 328: -#line 695 "./util/configparser.y" + case 329: +#line 702 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3677,8 +3687,8 @@ yyreduce: } break; - case 329: -#line 710 "./util/configparser.y" + case 330: +#line 717 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[(2) - (2)].str))); @@ -3694,8 +3704,8 @@ yyreduce: } break; - case 330: -#line 725 "./util/configparser.y" + case 331: +#line 732 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3709,8 +3719,8 @@ yyreduce: } break; - case 331: -#line 738 "./util/configparser.y" + case 332: +#line 745 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3726,8 +3736,8 @@ yyreduce: } break; - case 332: -#line 753 "./util/configparser.y" + case 333: +#line 760 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -3737,8 +3747,8 @@ yyreduce: } break; - case 333: -#line 762 "./util/configparser.y" + case 334: +#line 769 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, @@ -3748,8 +3758,8 @@ yyreduce: } break; - case 334: -#line 771 "./util/configparser.y" + case 335: +#line 778 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, @@ -3759,8 +3769,8 @@ yyreduce: } break; - case 335: -#line 780 "./util/configparser.y" + case 336: +#line 787 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3770,8 +3780,8 @@ yyreduce: } break; - case 336: -#line 789 "./util/configparser.y" + case 337: +#line 796 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3781,8 +3791,8 @@ yyreduce: } break; - case 337: -#line 798 "./util/configparser.y" + case 338: +#line 805 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3792,8 +3802,8 @@ yyreduce: } break; - case 338: -#line 807 "./util/configparser.y" + case 339: +#line 814 "./util/configparser.y" { OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->if_automatic_ports); @@ -3801,8 +3811,8 @@ yyreduce: } break; - case 339: -#line 814 "./util/configparser.y" + case 340: +#line 821 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3812,8 +3822,8 @@ yyreduce: } break; - case 340: -#line 823 "./util/configparser.y" + case 341: +#line 830 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3823,8 +3833,8 @@ yyreduce: } break; - case 341: -#line 832 "./util/configparser.y" + case 342: +#line 839 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3834,8 +3844,8 @@ yyreduce: } break; - case 342: -#line 841 "./util/configparser.y" + case 343: +#line 848 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3845,8 +3855,8 @@ yyreduce: } break; - case 343: -#line 850 "./util/configparser.y" + case 344: +#line 857 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3856,8 +3866,8 @@ yyreduce: } break; - case 344: -#line 859 "./util/configparser.y" + case 345: +#line 866 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3867,8 +3877,8 @@ yyreduce: } break; - case 345: -#line 868 "./util/configparser.y" + case 346: +#line 875 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3878,8 +3888,8 @@ yyreduce: } break; - case 346: -#line 877 "./util/configparser.y" + case 347: +#line 884 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3889,8 +3899,8 @@ yyreduce: } break; - case 347: -#line 886 "./util/configparser.y" + case 348: +#line 893 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3904,8 +3914,8 @@ yyreduce: } break; - case 348: -#line 899 "./util/configparser.y" + case 349: +#line 906 "./util/configparser.y" { OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3917,8 +3927,8 @@ yyreduce: } break; - case 349: -#line 910 "./util/configparser.y" + case 350: +#line 917 "./util/configparser.y" { OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3930,8 +3940,8 @@ yyreduce: } break; - case 350: -#line 921 "./util/configparser.y" + case 351: +#line 928 "./util/configparser.y" { OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3943,8 +3953,8 @@ yyreduce: } break; - case 351: -#line 932 "./util/configparser.y" + case 352: +#line 939 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3954,8 +3964,8 @@ yyreduce: } break; - case 352: -#line 941 "./util/configparser.y" + case 353: +#line 948 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -3969,8 +3979,8 @@ yyreduce: } break; - case 353: -#line 954 "./util/configparser.y" + case 354: +#line 961 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3980,8 +3990,8 @@ yyreduce: } break; - case 354: -#line 963 "./util/configparser.y" + case 355: +#line 970 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -3991,8 +4001,8 @@ yyreduce: } break; - case 355: -#line 972 "./util/configparser.y" + case 356: +#line 979 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4002,8 +4012,8 @@ yyreduce: } break; - case 356: -#line 981 "./util/configparser.y" + case 357: +#line 988 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->ssl_service_key); @@ -4011,8 +4021,8 @@ yyreduce: } break; - case 357: -#line 988 "./util/configparser.y" + case 358: +#line 995 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->ssl_service_pem); @@ -4020,8 +4030,8 @@ yyreduce: } break; - case 358: -#line 995 "./util/configparser.y" + case 359: +#line 1002 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -4031,8 +4041,8 @@ yyreduce: } break; - case 359: -#line 1004 "./util/configparser.y" + case 360: +#line 1011 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->tls_cert_bundle); @@ -4040,8 +4050,8 @@ yyreduce: } break; - case 360: -#line 1011 "./util/configparser.y" + case 361: +#line 1018 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4051,8 +4061,8 @@ yyreduce: } break; - case 361: -#line 1020 "./util/configparser.y" + case 362: +#line 1027 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, @@ -4061,8 +4071,8 @@ yyreduce: } break; - case 362: -#line 1028 "./util/configparser.y" + case 363: +#line 1035 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->tls_ciphers); @@ -4070,8 +4080,8 @@ yyreduce: } break; - case 363: -#line 1035 "./util/configparser.y" + case 364: +#line 1042 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->tls_ciphersuites); @@ -4079,8 +4089,8 @@ yyreduce: } break; - case 364: -#line 1042 "./util/configparser.y" + case 365: +#line 1049 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, @@ -4089,8 +4099,8 @@ yyreduce: } break; - case 365: -#line 1050 "./util/configparser.y" + case 366: +#line 1057 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4100,8 +4110,8 @@ yyreduce: } break; - case 366: -#line 1059 "./util/configparser.y" + case 367: +#line 1066 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -4111,8 +4121,8 @@ yyreduce: } break; - case 367: -#line 1067 "./util/configparser.y" + case 368: +#line 1074 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->http_endpoint); @@ -4130,8 +4140,8 @@ yyreduce: } break; - case 368: -#line 1083 "./util/configparser.y" + case 369: +#line 1090 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -4141,8 +4151,8 @@ yyreduce: } break; - case 369: -#line 1091 "./util/configparser.y" + case 370: +#line 1098 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), @@ -4152,8 +4162,8 @@ yyreduce: } break; - case 370: -#line 1099 "./util/configparser.y" + case 371: +#line 1106 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), @@ -4163,8 +4173,8 @@ yyreduce: } break; - case 371: -#line 1107 "./util/configparser.y" + case 372: +#line 1114 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4174,8 +4184,8 @@ yyreduce: } break; - case 372: -#line 1115 "./util/configparser.y" + case 373: +#line 1122 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4185,8 +4195,8 @@ yyreduce: } break; - case 373: -#line 1123 "./util/configparser.y" + case 374: +#line 1130 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4196,8 +4206,8 @@ yyreduce: } break; - case 374: -#line 1132 "./util/configparser.y" + case 375: +#line 1139 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4207,8 +4217,8 @@ yyreduce: } break; - case 375: -#line 1141 "./util/configparser.y" + case 376: +#line 1148 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4223,8 +4233,8 @@ yyreduce: } break; - case 376: -#line 1155 "./util/configparser.y" + case 377: +#line 1162 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4234,8 +4244,8 @@ yyreduce: } break; - case 377: -#line 1164 "./util/configparser.y" + case 378: +#line 1171 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4245,8 +4255,8 @@ yyreduce: } break; - case 378: -#line 1173 "./util/configparser.y" + case 379: +#line 1180 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4256,8 +4266,8 @@ yyreduce: } break; - case 379: -#line 1182 "./util/configparser.y" + case 380: +#line 1189 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4267,8 +4277,8 @@ yyreduce: } break; - case 380: -#line 1191 "./util/configparser.y" + case 381: +#line 1198 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4278,8 +4288,8 @@ yyreduce: } break; - case 381: -#line 1200 "./util/configparser.y" + case 382: +#line 1207 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4289,8 +4299,8 @@ yyreduce: } break; - case 382: -#line 1209 "./util/configparser.y" + case 383: +#line 1216 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->chrootdir); @@ -4298,8 +4308,8 @@ yyreduce: } break; - case 383: -#line 1216 "./util/configparser.y" + case 384: +#line 1223 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->username); @@ -4307,8 +4317,8 @@ yyreduce: } break; - case 384: -#line 1223 "./util/configparser.y" + case 385: +#line 1230 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->directory); @@ -4335,8 +4345,8 @@ yyreduce: } break; - case 385: -#line 1249 "./util/configparser.y" + case 386: +#line 1256 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->logfile); @@ -4345,8 +4355,8 @@ yyreduce: } break; - case 386: -#line 1257 "./util/configparser.y" + case 387: +#line 1264 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->pidfile); @@ -4354,8 +4364,8 @@ yyreduce: } break; - case 387: -#line 1264 "./util/configparser.y" + case 388: +#line 1271 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str))) @@ -4363,8 +4373,8 @@ yyreduce: } break; - case 388: -#line 1271 "./util/configparser.y" + case 389: +#line 1278 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); @@ -4372,8 +4382,8 @@ yyreduce: } break; - case 389: -#line 1278 "./util/configparser.y" + case 390: +#line 1285 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); @@ -4381,8 +4391,8 @@ yyreduce: } break; - case 390: -#line 1285 "./util/configparser.y" + case 391: +#line 1292 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -4391,8 +4401,8 @@ yyreduce: } break; - case 391: -#line 1293 "./util/configparser.y" + case 392: +#line 1300 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -4401,8 +4411,8 @@ yyreduce: } break; - case 392: -#line 1301 "./util/configparser.y" + case 393: +#line 1308 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> @@ -4411,8 +4421,8 @@ yyreduce: } break; - case 393: -#line 1309 "./util/configparser.y" + case 394: +#line 1316 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str))) @@ -4420,8 +4430,8 @@ yyreduce: } break; - case 394: -#line 1316 "./util/configparser.y" + case 395: +#line 1323 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4433,8 +4443,8 @@ yyreduce: } break; - case 395: -#line 1327 "./util/configparser.y" + case 396: +#line 1334 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4446,8 +4456,8 @@ yyreduce: } break; - case 396: -#line 1338 "./util/configparser.y" + case 397: +#line 1345 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[(2) - (2)].str))) @@ -4455,8 +4465,8 @@ yyreduce: } break; - case 397: -#line 1345 "./util/configparser.y" + case 398: +#line 1352 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4466,8 +4476,8 @@ yyreduce: } break; - case 398: -#line 1354 "./util/configparser.y" + case 399: +#line 1361 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4477,8 +4487,8 @@ yyreduce: } break; - case 399: -#line 1363 "./util/configparser.y" + case 400: +#line 1370 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4488,8 +4498,8 @@ yyreduce: } break; - case 400: -#line 1372 "./util/configparser.y" + case 401: +#line 1379 "./util/configparser.y" { OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4499,8 +4509,8 @@ yyreduce: } break; - case 401: -#line 1381 "./util/configparser.y" + case 402: +#line 1388 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->identity); @@ -4508,8 +4518,8 @@ yyreduce: } break; - case 402: -#line 1388 "./util/configparser.y" + case 403: +#line 1395 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->version); @@ -4517,8 +4527,8 @@ yyreduce: } break; - case 403: -#line 1395 "./util/configparser.y" + case 404: +#line 1402 "./util/configparser.y" { OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->http_user_agent); @@ -4526,8 +4536,8 @@ yyreduce: } break; - case 404: -#line 1402 "./util/configparser.y" + case 405: +#line 1409 "./util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4544,8 +4554,8 @@ yyreduce: } break; - case 405: -#line 1418 "./util/configparser.y" + case 406: +#line 1425 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_rcvbuf)) @@ -4554,8 +4564,8 @@ yyreduce: } break; - case 406: -#line 1426 "./util/configparser.y" + case 407: +#line 1433 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->so_sndbuf)) @@ -4564,8 +4574,8 @@ yyreduce: } break; - case 407: -#line 1434 "./util/configparser.y" + case 408: +#line 1441 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4576,8 +4586,8 @@ yyreduce: } break; - case 408: -#line 1444 "./util/configparser.y" + case 409: +#line 1451 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4588,8 +4598,8 @@ yyreduce: } break; - case 409: -#line 1454 "./util/configparser.y" + case 410: +#line 1461 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4600,8 +4610,8 @@ yyreduce: } break; - case 410: -#line 1464 "./util/configparser.y" + case 411: +#line 1471 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -4616,8 +4626,8 @@ yyreduce: } break; - case 411: -#line 1478 "./util/configparser.y" + case 412: +#line 1485 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->stream_wait_size)) @@ -4626,8 +4636,8 @@ yyreduce: } break; - case 412: -#line 1486 "./util/configparser.y" + case 413: +#line 1493 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -4641,8 +4651,8 @@ yyreduce: } break; - case 413: -#line 1499 "./util/configparser.y" + case 414: +#line 1506 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -4654,8 +4664,8 @@ yyreduce: } break; - case 414: -#line 1510 "./util/configparser.y" + case 415: +#line 1517 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size)) @@ -4664,8 +4674,8 @@ yyreduce: } break; - case 415: -#line 1518 "./util/configparser.y" + case 416: +#line 1525 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -4679,8 +4689,8 @@ yyreduce: } break; - case 416: -#line 1531 "./util/configparser.y" + case 417: +#line 1538 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -4690,8 +4700,8 @@ yyreduce: } break; - case 417: -#line 1540 "./util/configparser.y" + case 418: +#line 1547 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -4701,8 +4711,8 @@ yyreduce: } break; - case 418: -#line 1549 "./util/configparser.y" + case 419: +#line 1556 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -4712,8 +4722,8 @@ yyreduce: } break; - case 419: -#line 1558 "./util/configparser.y" + case 420: +#line 1565 "./util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4723,8 +4733,8 @@ yyreduce: } break; - case 420: -#line 1567 "./util/configparser.y" + case 421: +#line 1574 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4735,8 +4745,8 @@ yyreduce: } break; - case 421: -#line 1577 "./util/configparser.y" + case 422: +#line 1584 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4747,8 +4757,8 @@ yyreduce: } break; - case 422: -#line 1587 "./util/configparser.y" + case 423: +#line 1594 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size)) @@ -4757,8 +4767,8 @@ yyreduce: } break; - case 423: -#line 1595 "./util/configparser.y" + case 424: +#line 1602 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -4772,8 +4782,8 @@ yyreduce: } break; - case 424: -#line 1608 "./util/configparser.y" + case 425: +#line 1615 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -4783,8 +4793,8 @@ yyreduce: } break; - case 425: -#line 1617 "./util/configparser.y" + case 426: +#line 1624 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " @@ -4793,8 +4803,8 @@ yyreduce: } break; - case 426: -#line 1625 "./util/configparser.y" + case 427: +#line 1632 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -4804,8 +4814,8 @@ yyreduce: } break; - case 427: -#line 1634 "./util/configparser.y" + case 428: +#line 1641 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " @@ -4814,8 +4824,8 @@ yyreduce: } break; - case 428: -#line 1642 "./util/configparser.y" + case 429: +#line 1649 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -4829,8 +4839,8 @@ yyreduce: } break; - case 429: -#line 1655 "./util/configparser.y" + case 430: +#line 1662 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -4840,8 +4850,19 @@ yyreduce: } break; - case 430: -#line 1664 "./util/configparser.y" + case 431: +#line 1671 "./util/configparser.y" + { + OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[(2) - (2)].str))); + if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[(2) - (2)].str)); + free((yyvsp[(2) - (2)].str)); + } + break; + + case 432: +#line 1680 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4852,8 +4873,8 @@ yyreduce: } break; - case 431: -#line 1674 "./util/configparser.y" + case 433: +#line 1690 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->target_fetch_policy); @@ -4861,8 +4882,8 @@ yyreduce: } break; - case 432: -#line 1681 "./util/configparser.y" + case 434: +#line 1697 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4873,8 +4894,8 @@ yyreduce: } break; - case 433: -#line 1691 "./util/configparser.y" + case 435: +#line 1707 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4885,8 +4906,8 @@ yyreduce: } break; - case 434: -#line 1701 "./util/configparser.y" + case 436: +#line 1717 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4897,8 +4918,8 @@ yyreduce: } break; - case 435: -#line 1711 "./util/configparser.y" + case 437: +#line 1727 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4909,8 +4930,8 @@ yyreduce: } break; - case 436: -#line 1721 "./util/configparser.y" + case 438: +#line 1737 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4921,8 +4942,8 @@ yyreduce: } break; - case 437: -#line 1731 "./util/configparser.y" + case 439: +#line 1747 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4933,8 +4954,8 @@ yyreduce: } break; - case 438: -#line 1741 "./util/configparser.y" + case 440: +#line 1757 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4945,8 +4966,8 @@ yyreduce: } break; - case 439: -#line 1751 "./util/configparser.y" + case 441: +#line 1767 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4957,8 +4978,8 @@ yyreduce: } break; - case 440: -#line 1761 "./util/configparser.y" + case 442: +#line 1777 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[(2) - (2)].str))) @@ -4966,8 +4987,8 @@ yyreduce: } break; - case 441: -#line 1768 "./util/configparser.y" + case 443: +#line 1784 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str))) @@ -4975,8 +4996,8 @@ yyreduce: } break; - case 442: -#line 1775 "./util/configparser.y" + case 444: +#line 1791 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str))) @@ -4984,8 +5005,8 @@ yyreduce: } break; - case 443: -#line 1782 "./util/configparser.y" + case 445: +#line 1798 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -4995,8 +5016,8 @@ yyreduce: } break; - case 444: -#line 1791 "./util/configparser.y" + case 446: +#line 1807 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5006,8 +5027,8 @@ yyreduce: } break; - case 445: -#line 1800 "./util/configparser.y" + case 447: +#line 1816 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5017,8 +5038,8 @@ yyreduce: } break; - case 446: -#line 1809 "./util/configparser.y" + case 448: +#line 1825 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5028,8 +5049,8 @@ yyreduce: } break; - case 447: -#line 1818 "./util/configparser.y" + case 449: +#line 1834 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str))) @@ -5037,8 +5058,8 @@ yyreduce: } break; - case 448: -#line 1825 "./util/configparser.y" + case 450: +#line 1841 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5049,8 +5070,8 @@ yyreduce: } break; - case 449: -#line 1835 "./util/configparser.y" + case 451: +#line 1851 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && @@ -5071,8 +5092,8 @@ yyreduce: } break; - case 450: -#line 1855 "./util/configparser.y" + case 452: +#line 1871 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->module_conf); @@ -5080,8 +5101,8 @@ yyreduce: } break; - case 451: -#line 1862 "./util/configparser.y" + case 453: +#line 1878 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str))); if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -5100,8 +5121,8 @@ yyreduce: } break; - case 452: -#line 1880 "./util/configparser.y" + case 454: +#line 1896 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[(2) - (2)].str))); if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -5115,8 +5136,8 @@ yyreduce: } break; - case 453: -#line 1893 "./util/configparser.y" + case 455: +#line 1909 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[(2) - (2)].str))); if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -5130,8 +5151,8 @@ yyreduce: } break; - case 454: -#line 1906 "./util/configparser.y" + case 456: +#line 1922 "./util/configparser.y" { OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[(2) - (2)].str))); if(*(yyvsp[(2) - (2)].str) == '\0' || strcmp((yyvsp[(2) - (2)].str), "0") == 0) { @@ -5145,8 +5166,8 @@ yyreduce: } break; - case 455: -#line 1919 "./util/configparser.y" + case 457: +#line 1935 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5156,8 +5177,8 @@ yyreduce: } break; - case 456: -#line 1928 "./util/configparser.y" + case 458: +#line 1944 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5167,8 +5188,8 @@ yyreduce: } break; - case 457: -#line 1937 "./util/configparser.y" + case 459: +#line 1953 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5178,8 +5199,8 @@ yyreduce: } break; - case 458: -#line 1946 "./util/configparser.y" + case 460: +#line 1962 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5189,8 +5210,8 @@ yyreduce: } break; - case 459: -#line 1955 "./util/configparser.y" + case 461: +#line 1971 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5201,8 +5222,8 @@ yyreduce: } break; - case 460: -#line 1965 "./util/configparser.y" + case 462: +#line 1981 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5213,8 +5234,8 @@ yyreduce: } break; - case 461: -#line 1975 "./util/configparser.y" + case 463: +#line 1991 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5226,8 +5247,8 @@ yyreduce: } break; - case 462: -#line 1986 "./util/configparser.y" + case 464: +#line 2002 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5237,8 +5258,8 @@ yyreduce: } break; - case 463: -#line 1995 "./util/configparser.y" + case 465: +#line 2011 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5248,8 +5269,8 @@ yyreduce: } break; - case 464: -#line 2004 "./util/configparser.y" + case 466: +#line 2020 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5259,8 +5280,8 @@ yyreduce: } break; - case 465: -#line 2013 "./util/configparser.y" + case 467: +#line 2029 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5270,8 +5291,8 @@ yyreduce: } break; - case 466: -#line 2022 "./util/configparser.y" + case 468: +#line 2038 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5281,8 +5302,8 @@ yyreduce: } break; - case 467: -#line 2031 "./util/configparser.y" + case 469: +#line 2047 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5292,8 +5313,8 @@ yyreduce: } break; - case 468: -#line 2040 "./util/configparser.y" + case 470: +#line 2056 "./util/configparser.y" { OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5303,8 +5324,8 @@ yyreduce: } break; - case 469: -#line 2049 "./util/configparser.y" + case 471: +#line 2065 "./util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5314,8 +5335,8 @@ yyreduce: } break; - case 470: -#line 2058 "./util/configparser.y" + case 472: +#line 2074 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5329,8 +5350,8 @@ yyreduce: } break; - case 471: -#line 2071 "./util/configparser.y" + case 473: +#line 2087 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5344,8 +5365,8 @@ yyreduce: } break; - case 472: -#line 2084 "./util/configparser.y" + case 474: +#line 2100 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5355,8 +5376,8 @@ yyreduce: } break; - case 473: -#line 2093 "./util/configparser.y" + case 475: +#line 2109 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); @@ -5364,8 +5385,8 @@ yyreduce: } break; - case 474: -#line 2100 "./util/configparser.y" + case 476: +#line 2116 "./util/configparser.y" { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5375,8 +5396,8 @@ yyreduce: } break; - case 475: -#line 2109 "./util/configparser.y" + case 477: +#line 2125 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5386,8 +5407,8 @@ yyreduce: } break; - case 476: -#line 2118 "./util/configparser.y" + case 478: +#line 2134 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5397,8 +5418,8 @@ yyreduce: } break; - case 477: -#line 2127 "./util/configparser.y" + case 479: +#line 2143 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5408,8 +5429,8 @@ yyreduce: } break; - case 478: -#line 2136 "./util/configparser.y" + case 480: +#line 2152 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5420,8 +5441,8 @@ yyreduce: } break; - case 479: -#line 2145 "./util/configparser.y" + case 481: +#line 2161 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size)) @@ -5430,8 +5451,8 @@ yyreduce: } break; - case 480: -#line 2153 "./util/configparser.y" + case 482: +#line 2169 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -5445,8 +5466,8 @@ yyreduce: } break; - case 481: -#line 2166 "./util/configparser.y" + case 483: +#line 2182 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size)) @@ -5455,8 +5476,8 @@ yyreduce: } break; - case 482: -#line 2174 "./util/configparser.y" + case 484: +#line 2190 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && @@ -5512,8 +5533,8 @@ yyreduce: } break; - case 483: -#line 2229 "./util/configparser.y" + case 485: +#line 2245 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str))) @@ -5521,8 +5542,8 @@ yyreduce: } break; - case 484: -#line 2236 "./util/configparser.y" + case 486: +#line 2252 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); @@ -5538,8 +5559,8 @@ yyreduce: } break; - case 485: -#line 2251 "./util/configparser.y" + case 487: +#line 2267 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5550,8 +5571,8 @@ yyreduce: } break; - case 486: -#line 2261 "./util/configparser.y" + case 488: +#line 2277 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5562,8 +5583,8 @@ yyreduce: } break; - case 487: -#line 2271 "./util/configparser.y" + case 489: +#line 2287 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[(2) - (2)].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[(2) - (2)].str)); @@ -5571,8 +5592,8 @@ yyreduce: } break; - case 488: -#line 2278 "./util/configparser.y" + case 490: +#line 2294 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[(2) - (2)].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[(2) - (2)].str)); @@ -5580,8 +5601,8 @@ yyreduce: } break; - case 489: -#line 2285 "./util/configparser.y" + case 491: +#line 2301 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dns64_prefix); @@ -5589,8 +5610,8 @@ yyreduce: } break; - case 490: -#line 2292 "./util/configparser.y" + case 492: +#line 2308 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5600,8 +5621,8 @@ yyreduce: } break; - case 491: -#line 2301 "./util/configparser.y" + case 493: +#line 2317 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, @@ -5610,8 +5631,8 @@ yyreduce: } break; - case 492: -#line 2309 "./util/configparser.y" + case 494: +#line 2325 "./util/configparser.y" { char* p, *s = (yyvsp[(2) - (2)].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[(2) - (2)].str))); @@ -5626,8 +5647,8 @@ yyreduce: } break; - case 493: -#line 2323 "./util/configparser.y" + case 495: +#line 2339 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), @@ -5649,8 +5670,8 @@ yyreduce: } break; - case 494: -#line 2344 "./util/configparser.y" + case 496: +#line 2360 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), @@ -5672,8 +5693,8 @@ yyreduce: } break; - case 495: -#line 2365 "./util/configparser.y" + case 497: +#line 2381 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5686,8 +5707,8 @@ yyreduce: } break; - case 496: -#line 2377 "./util/configparser.y" + case 498: +#line 2393 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5700,8 +5721,8 @@ yyreduce: } break; - case 497: -#line 2389 "./util/configparser.y" + case 499: +#line 2405 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (yyvsp[(4) - (4)].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5714,8 +5735,8 @@ yyreduce: } break; - case 498: -#line 2401 "./util/configparser.y" + case 500: +#line 2417 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5725,8 +5746,8 @@ yyreduce: } break; - case 499: -#line 2410 "./util/configparser.y" + case 501: +#line 2426 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[(3) - (3)].str), @@ -5748,8 +5769,8 @@ yyreduce: } break; - case 500: -#line 2431 "./util/configparser.y" + case 502: +#line 2447 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5759,8 +5780,8 @@ yyreduce: } break; - case 501: -#line 2440 "./util/configparser.y" + case 503: +#line 2456 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5770,8 +5791,8 @@ yyreduce: } break; - case 502: -#line 2449 "./util/configparser.y" + case 504: +#line 2465 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ip_ratelimit_size)) @@ -5780,8 +5801,8 @@ yyreduce: } break; - case 503: -#line 2457 "./util/configparser.y" + case 505: +#line 2473 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->ratelimit_size)) @@ -5790,8 +5811,8 @@ yyreduce: } break; - case 504: -#line 2465 "./util/configparser.y" + case 506: +#line 2481 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -5805,8 +5826,8 @@ yyreduce: } break; - case 505: -#line 2478 "./util/configparser.y" + case 507: +#line 2494 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -5820,8 +5841,8 @@ yyreduce: } break; - case 506: -#line 2491 "./util/configparser.y" + case 508: +#line 2507 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { @@ -5837,8 +5858,8 @@ yyreduce: } break; - case 507: -#line 2506 "./util/configparser.y" + case 509: +#line 2522 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(atoi((yyvsp[(3) - (3)].str)) == 0 && strcmp((yyvsp[(3) - (3)].str), "0") != 0) { @@ -5854,8 +5875,8 @@ yyreduce: } break; - case 508: -#line 2521 "./util/configparser.y" + case 510: +#line 2537 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5865,8 +5886,8 @@ yyreduce: } break; - case 509: -#line 2530 "./util/configparser.y" + case 511: +#line 2546 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5876,8 +5897,8 @@ yyreduce: } break; - case 510: -#line 2539 "./util/configparser.y" + case 512: +#line 2555 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5888,8 +5909,8 @@ yyreduce: } break; - case 511: -#line 2549 "./util/configparser.y" + case 513: +#line 2565 "./util/configparser.y" { OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5900,8 +5921,8 @@ yyreduce: } break; - case 512: -#line 2559 "./util/configparser.y" + case 514: +#line 2575 "./util/configparser.y" { OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5911,16 +5932,16 @@ yyreduce: } break; - case 513: -#line 2568 "./util/configparser.y" + case 515: +#line 2584 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[(2) - (2)].str)); } break; - case 514: -#line 2574 "./util/configparser.y" + case 516: +#line 2590 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) <= 0) @@ -5930,8 +5951,8 @@ yyreduce: } break; - case 515: -#line 2583 "./util/configparser.y" + case 517: +#line 2599 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -5941,8 +5962,8 @@ yyreduce: } break; - case 516: -#line 2592 "./util/configparser.y" + case 518: +#line 2608 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5953,8 +5974,8 @@ yyreduce: } break; - case 517: -#line 2602 "./util/configparser.y" + case 519: +#line 2618 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5965,8 +5986,8 @@ yyreduce: } break; - case 518: -#line 2612 "./util/configparser.y" + case 520: +#line 2628 "./util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -5977,8 +5998,8 @@ yyreduce: } break; - case 519: -#line 2622 "./util/configparser.y" + case 521: +#line 2638 "./util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -5988,8 +6009,8 @@ yyreduce: } break; - case 520: -#line 2631 "./util/configparser.y" + case 522: +#line 2647 "./util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6000,8 +6021,8 @@ yyreduce: } break; - case 521: -#line 2641 "./util/configparser.y" + case 523: +#line 2657 "./util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -6011,8 +6032,8 @@ yyreduce: } break; - case 522: -#line 2650 "./util/configparser.y" + case 524: +#line 2666 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6026,8 +6047,8 @@ yyreduce: } break; - case 523: -#line 2663 "./util/configparser.y" + case 525: +#line 2679 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6041,8 +6062,8 @@ yyreduce: } break; - case 524: -#line 2676 "./util/configparser.y" + case 526: +#line 2692 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6055,8 +6076,8 @@ yyreduce: } break; - case 525: -#line 2688 "./util/configparser.y" + case 527: +#line 2704 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6071,8 +6092,8 @@ yyreduce: } break; - case 526: -#line 2702 "./util/configparser.y" + case 528: +#line 2718 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6085,8 +6106,8 @@ yyreduce: } break; - case 527: -#line 2714 "./util/configparser.y" + case 529: +#line 2730 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6101,8 +6122,8 @@ yyreduce: } break; - case 528: -#line 2728 "./util/configparser.y" + case 530: +#line 2744 "./util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(!cfg_str2list_insert( @@ -6112,8 +6133,8 @@ yyreduce: } break; - case 529: -#line 2737 "./util/configparser.y" + case 531: +#line 2753 "./util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0) @@ -6125,8 +6146,8 @@ yyreduce: } break; - case 530: -#line 2748 "./util/configparser.y" + case 532: +#line 2764 "./util/configparser.y" { OUTYY(("P(server_ede:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6136,8 +6157,8 @@ yyreduce: } break; - case 531: -#line 2757 "./util/configparser.y" + case 533: +#line 2773 "./util/configparser.y" { OUTYY(("P(server_upstream_cookies:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6147,8 +6168,8 @@ yyreduce: } break; - case 532: -#line 2765 "./util/configparser.y" + case 534: +#line 2781 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->stubs->name) @@ -6159,8 +6180,8 @@ yyreduce: } break; - case 533: -#line 2775 "./util/configparser.y" + case 535: +#line 2791 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str))) @@ -6168,8 +6189,8 @@ yyreduce: } break; - case 534: -#line 2782 "./util/configparser.y" + case 536: +#line 2798 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str))) @@ -6177,8 +6198,8 @@ yyreduce: } break; - case 535: -#line 2789 "./util/configparser.y" + case 537: +#line 2805 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6188,8 +6209,8 @@ yyreduce: } break; - case 536: -#line 2798 "./util/configparser.y" + case 538: +#line 2814 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6199,8 +6220,8 @@ yyreduce: } break; - case 537: -#line 2807 "./util/configparser.y" + case 539: +#line 2823 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6211,8 +6232,8 @@ yyreduce: } break; - case 538: -#line 2817 "./util/configparser.y" + case 540: +#line 2833 "./util/configparser.y" { OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6223,8 +6244,8 @@ yyreduce: } break; - case 539: -#line 2827 "./util/configparser.y" + case 541: +#line 2843 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6235,8 +6256,8 @@ yyreduce: } break; - case 540: -#line 2837 "./util/configparser.y" + case 542: +#line 2853 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->forwards->name) @@ -6247,8 +6268,8 @@ yyreduce: } break; - case 541: -#line 2847 "./util/configparser.y" + case 543: +#line 2863 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str))) @@ -6256,8 +6277,8 @@ yyreduce: } break; - case 542: -#line 2854 "./util/configparser.y" + case 544: +#line 2870 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str))) @@ -6265,8 +6286,8 @@ yyreduce: } break; - case 543: -#line 2861 "./util/configparser.y" + case 545: +#line 2877 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6276,8 +6297,8 @@ yyreduce: } break; - case 544: -#line 2870 "./util/configparser.y" + case 546: +#line 2886 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6287,8 +6308,8 @@ yyreduce: } break; - case 545: -#line 2879 "./util/configparser.y" + case 547: +#line 2895 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6299,8 +6320,8 @@ yyreduce: } break; - case 546: -#line 2889 "./util/configparser.y" + case 548: +#line 2905 "./util/configparser.y" { OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6311,8 +6332,8 @@ yyreduce: } break; - case 547: -#line 2899 "./util/configparser.y" + case 549: +#line 2915 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->auths->name) @@ -6323,8 +6344,8 @@ yyreduce: } break; - case 548: -#line 2909 "./util/configparser.y" + case 550: +#line 2925 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->auths->zonefile); @@ -6332,8 +6353,8 @@ yyreduce: } break; - case 549: -#line 2916 "./util/configparser.y" + case 551: +#line 2932 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[(2) - (2)].str))) @@ -6341,8 +6362,8 @@ yyreduce: } break; - case 550: -#line 2923 "./util/configparser.y" + case 552: +#line 2939 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[(2) - (2)].str))) @@ -6350,8 +6371,8 @@ yyreduce: } break; - case 551: -#line 2930 "./util/configparser.y" + case 553: +#line 2946 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, @@ -6360,8 +6381,8 @@ yyreduce: } break; - case 552: -#line 2938 "./util/configparser.y" + case 554: +#line 2954 "./util/configparser.y" { OUTYY(("P(zonemd-check:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6372,8 +6393,8 @@ yyreduce: } break; - case 553: -#line 2948 "./util/configparser.y" + case 555: +#line 2964 "./util/configparser.y" { OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6384,8 +6405,8 @@ yyreduce: } break; - case 554: -#line 2958 "./util/configparser.y" + case 556: +#line 2974 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6396,8 +6417,8 @@ yyreduce: } break; - case 555: -#line 2968 "./util/configparser.y" + case 557: +#line 2984 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6408,8 +6429,8 @@ yyreduce: } break; - case 556: -#line 2978 "./util/configparser.y" + case 558: +#line 2994 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6420,8 +6441,8 @@ yyreduce: } break; - case 557: -#line 2988 "./util/configparser.y" + case 559: +#line 3004 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_parser->cfg->views->name) @@ -6432,8 +6453,8 @@ yyreduce: } break; - case 558: -#line 2998 "./util/configparser.y" + case 560: +#line 3014 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && @@ -6490,8 +6511,8 @@ yyreduce: } break; - case 559: -#line 3054 "./util/configparser.y" + case 561: +#line 3070 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); validate_respip_action((yyvsp[(3) - (3)].str)); @@ -6502,8 +6523,8 @@ yyreduce: } break; - case 560: -#line 3064 "./util/configparser.y" + case 562: +#line 3080 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[(2) - (3)].str))); if(!cfg_str2list_insert( @@ -6512,8 +6533,8 @@ yyreduce: } break; - case 561: -#line 3072 "./util/configparser.y" + case 563: +#line 3088 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[(2) - (2)].str))) { @@ -6522,8 +6543,8 @@ yyreduce: } break; - case 562: -#line 3080 "./util/configparser.y" + case 564: +#line 3096 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str))); @@ -6539,8 +6560,8 @@ yyreduce: } break; - case 563: -#line 3095 "./util/configparser.y" + case 565: +#line 3111 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6550,15 +6571,16 @@ yyreduce: } break; - case 564: -#line 3104 "./util/configparser.y" + case 566: +#line 3120 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 575: -#line 3115 "./util/configparser.y" + case 577: +#line 3132 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6569,8 +6591,8 @@ yyreduce: } break; - case 576: -#line 3125 "./util/configparser.y" + case 578: +#line 3142 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -6580,8 +6602,8 @@ yyreduce: } break; - case 577: -#line 3134 "./util/configparser.y" + case 579: +#line 3151 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str))) @@ -6589,8 +6611,8 @@ yyreduce: } break; - case 578: -#line 3141 "./util/configparser.y" + case 580: +#line 3158 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[(2) - (2)].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[(2) - (2)].str), "yes")==0); @@ -6598,8 +6620,8 @@ yyreduce: } break; - case 579: -#line 3148 "./util/configparser.y" + case 581: +#line 3165 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->server_key_file); @@ -6607,8 +6629,8 @@ yyreduce: } break; - case 580: -#line 3155 "./util/configparser.y" + case 582: +#line 3172 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->server_cert_file); @@ -6616,8 +6638,8 @@ yyreduce: } break; - case 581: -#line 3162 "./util/configparser.y" + case 583: +#line 3179 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->control_key_file); @@ -6625,8 +6647,8 @@ yyreduce: } break; - case 582: -#line 3169 "./util/configparser.y" + case 584: +#line 3186 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->control_cert_file); @@ -6634,15 +6656,16 @@ yyreduce: } break; - case 583: -#line 3176 "./util/configparser.y" + case 585: +#line 3193 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 605: -#line 3196 "./util/configparser.y" + case 607: +#line 3214 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6652,8 +6675,8 @@ yyreduce: } break; - case 606: -#line 3205 "./util/configparser.y" + case 608: +#line 3223 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6664,8 +6687,8 @@ yyreduce: } break; - case 607: -#line 3215 "./util/configparser.y" + case 609: +#line 3233 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_socket_path); @@ -6673,8 +6696,8 @@ yyreduce: } break; - case 608: -#line 3222 "./util/configparser.y" + case 610: +#line 3240 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_ip); @@ -6682,8 +6705,8 @@ yyreduce: } break; - case 609: -#line 3229 "./util/configparser.y" + case 611: +#line 3247 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6693,8 +6716,8 @@ yyreduce: } break; - case 610: -#line 3238 "./util/configparser.y" + case 612: +#line 3256 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_tls_server_name); @@ -6702,8 +6725,8 @@ yyreduce: } break; - case 611: -#line 3245 "./util/configparser.y" + case 613: +#line 3263 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); @@ -6711,8 +6734,8 @@ yyreduce: } break; - case 612: -#line 3252 "./util/configparser.y" + case 614: +#line 3270 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); @@ -6720,8 +6743,8 @@ yyreduce: } break; - case 613: -#line 3259 "./util/configparser.y" + case 615: +#line 3277 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); @@ -6729,8 +6752,8 @@ yyreduce: } break; - case 614: -#line 3266 "./util/configparser.y" + case 616: +#line 3284 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6740,8 +6763,8 @@ yyreduce: } break; - case 615: -#line 3275 "./util/configparser.y" + case 617: +#line 3293 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6751,8 +6774,8 @@ yyreduce: } break; - case 616: -#line 3284 "./util/configparser.y" + case 618: +#line 3302 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_identity); @@ -6760,8 +6783,8 @@ yyreduce: } break; - case 617: -#line 3291 "./util/configparser.y" + case 619: +#line 3309 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnstap_version); @@ -6769,8 +6792,8 @@ yyreduce: } break; - case 618: -#line 3298 "./util/configparser.y" + case 620: +#line 3316 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6781,8 +6804,8 @@ yyreduce: } break; - case 619: -#line 3308 "./util/configparser.y" + case 621: +#line 3326 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6793,8 +6816,8 @@ yyreduce: } break; - case 620: -#line 3318 "./util/configparser.y" + case 622: +#line 3336 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6805,8 +6828,8 @@ yyreduce: } break; - case 621: -#line 3328 "./util/configparser.y" + case 623: +#line 3346 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6817,8 +6840,8 @@ yyreduce: } break; - case 622: -#line 3338 "./util/configparser.y" + case 624: +#line 3356 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6829,8 +6852,8 @@ yyreduce: } break; - case 623: -#line 3348 "./util/configparser.y" + case 625: +#line 3366 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6841,15 +6864,16 @@ yyreduce: } break; - case 624: -#line 3358 "./util/configparser.y" + case 626: +#line 3376 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 628: -#line 3367 "./util/configparser.y" + case 630: +#line 3386 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[(2) - (2)].str))) @@ -6857,15 +6881,16 @@ yyreduce: } break; - case 629: -#line 3373 "./util/configparser.y" + case 631: +#line 3392 "./util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 633: -#line 3382 "./util/configparser.y" + case 635: +#line 3402 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[(2) - (2)].str))) @@ -6873,8 +6898,8 @@ yyreduce: } break; - case 634: -#line 3388 "./util/configparser.y" + case 636: +#line 3408 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[(2) - (2)].str))); if (strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6885,8 +6910,8 @@ yyreduce: } break; - case 635: -#line 3398 "./util/configparser.y" + case 637: +#line 3418 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->log_identity); @@ -6894,8 +6919,8 @@ yyreduce: } break; - case 636: -#line 3405 "./util/configparser.y" + case 638: +#line 3425 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); validate_respip_action((yyvsp[(3) - (3)].str)); @@ -6905,8 +6930,8 @@ yyreduce: } break; - case 637: -#line 3414 "./util/configparser.y" + case 639: +#line 3434 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[(2) - (3)].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, @@ -6915,15 +6940,16 @@ yyreduce: } break; - case 638: -#line 3422 "./util/configparser.y" + case 640: +#line 3442 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 651: -#line 3438 "./util/configparser.y" + case 653: +#line 3459 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[(2) - (2)].str))); if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0) @@ -6933,8 +6959,8 @@ yyreduce: } break; - case 652: -#line 3448 "./util/configparser.y" + case 654: +#line 3469 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) @@ -6944,8 +6970,8 @@ yyreduce: } break; - case 653: -#line 3457 "./util/configparser.y" + case 655: +#line 3478 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[(2) - (2)].str))); free(cfg_parser->cfg->dnscrypt_provider); @@ -6953,8 +6979,8 @@ yyreduce: } break; - case 654: -#line 3464 "./util/configparser.y" + case 656: +#line 3485 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[(2) - (2)].str))) @@ -6964,8 +6990,8 @@ yyreduce: } break; - case 655: -#line 3473 "./util/configparser.y" + case 657: +#line 3494 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[(2) - (2)].str))) @@ -6973,8 +6999,8 @@ yyreduce: } break; - case 656: -#line 3480 "./util/configparser.y" + case 658: +#line 3501 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[(2) - (2)].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[(2) - (2)].str))) @@ -6984,8 +7010,8 @@ yyreduce: } break; - case 657: -#line 3489 "./util/configparser.y" + case 659: +#line 3510 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) @@ -6994,8 +7020,8 @@ yyreduce: } break; - case 658: -#line 3497 "./util/configparser.y" + case 660: +#line 3518 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -7009,8 +7035,8 @@ yyreduce: } break; - case 659: -#line 3510 "./util/configparser.y" + case 661: +#line 3531 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[(2) - (2)].str))); if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) @@ -7019,8 +7045,8 @@ yyreduce: } break; - case 660: -#line 3518 "./util/configparser.y" + case 662: +#line 3539 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str))); if(atoi((yyvsp[(2) - (2)].str)) == 0) { @@ -7034,15 +7060,16 @@ yyreduce: } break; - case 661: -#line 3531 "./util/configparser.y" + case 663: +#line 3552 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 670: -#line 3542 "./util/configparser.y" + case 672: +#line 3564 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7055,8 +7082,8 @@ yyreduce: } break; - case 671: -#line 3554 "./util/configparser.y" + case 673: +#line 3576 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7069,8 +7096,8 @@ yyreduce: } break; - case 672: -#line 3566 "./util/configparser.y" + case 674: +#line 3588 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7083,8 +7110,8 @@ yyreduce: } break; - case 673: -#line 3578 "./util/configparser.y" + case 675: +#line 3600 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -7100,8 +7127,8 @@ yyreduce: } break; - case 674: -#line 3593 "./util/configparser.y" + case 676: +#line 3615 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7115,8 +7142,8 @@ yyreduce: } break; - case 675: -#line 3606 "./util/configparser.y" + case 677: +#line 3628 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7130,8 +7157,8 @@ yyreduce: } break; - case 676: -#line 3619 "./util/configparser.y" + case 678: +#line 3641 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str))); if (atoi((yyvsp[(3) - (3)].str)) < 0) @@ -7143,15 +7170,16 @@ yyreduce: } break; - case 677: -#line 3630 "./util/configparser.y" + case 679: +#line 3652 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); + cfg_parser->started_toplevel = 1; } break; - case 682: -#line 3639 "./util/configparser.y" + case 684: +#line 3662 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7167,8 +7195,8 @@ yyreduce: } break; - case 683: -#line 3654 "./util/configparser.y" + case 685: +#line 3677 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[(2) - (2)].str))); @@ -7186,7 +7214,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 7190 "util/configparser.c" +#line 7218 "util/configparser.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -7400,7 +7428,7 @@ yyreturn: } -#line 3668 "./util/configparser.y" +#line 3691 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index b2dbb7445..a7ff2f319 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -200,170 +200,171 @@ VAR_UNBLOCK_LAN_ZONES = 416, VAR_INSECURE_LAN_ZONES = 417, VAR_INFRA_CACHE_MIN_RTT = 418, - VAR_INFRA_KEEP_PROBING = 419, - VAR_DNS64_PREFIX = 420, - VAR_DNS64_SYNTHALL = 421, - VAR_DNS64_IGNORE_AAAA = 422, - VAR_DNSTAP = 423, - VAR_DNSTAP_ENABLE = 424, - VAR_DNSTAP_SOCKET_PATH = 425, - VAR_DNSTAP_IP = 426, - VAR_DNSTAP_TLS = 427, - VAR_DNSTAP_TLS_SERVER_NAME = 428, - VAR_DNSTAP_TLS_CERT_BUNDLE = 429, - VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 430, - VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 431, - VAR_DNSTAP_SEND_IDENTITY = 432, - VAR_DNSTAP_SEND_VERSION = 433, - VAR_DNSTAP_BIDIRECTIONAL = 434, - VAR_DNSTAP_IDENTITY = 435, - VAR_DNSTAP_VERSION = 436, - VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 437, - VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 438, - VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 439, - VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 440, - VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 441, - VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 442, - VAR_RESPONSE_IP_TAG = 443, - VAR_RESPONSE_IP = 444, - VAR_RESPONSE_IP_DATA = 445, - VAR_HARDEN_ALGO_DOWNGRADE = 446, - VAR_IP_TRANSPARENT = 447, - VAR_IP_DSCP = 448, - VAR_DISABLE_DNSSEC_LAME_CHECK = 449, - VAR_IP_RATELIMIT = 450, - VAR_IP_RATELIMIT_SLABS = 451, - VAR_IP_RATELIMIT_SIZE = 452, - VAR_RATELIMIT = 453, - VAR_RATELIMIT_SLABS = 454, - VAR_RATELIMIT_SIZE = 455, - VAR_OUTBOUND_MSG_RETRY = 456, - VAR_RATELIMIT_FOR_DOMAIN = 457, - VAR_RATELIMIT_BELOW_DOMAIN = 458, - VAR_IP_RATELIMIT_FACTOR = 459, - VAR_RATELIMIT_FACTOR = 460, - VAR_IP_RATELIMIT_BACKOFF = 461, - VAR_RATELIMIT_BACKOFF = 462, - VAR_SEND_CLIENT_SUBNET = 463, - VAR_CLIENT_SUBNET_ZONE = 464, - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 465, - VAR_CLIENT_SUBNET_OPCODE = 466, - VAR_MAX_CLIENT_SUBNET_IPV4 = 467, - VAR_MAX_CLIENT_SUBNET_IPV6 = 468, - VAR_MIN_CLIENT_SUBNET_IPV4 = 469, - VAR_MIN_CLIENT_SUBNET_IPV6 = 470, - VAR_MAX_ECS_TREE_SIZE_IPV4 = 471, - VAR_MAX_ECS_TREE_SIZE_IPV6 = 472, - VAR_CAPS_WHITELIST = 473, - VAR_CACHE_MAX_NEGATIVE_TTL = 474, - VAR_PERMIT_SMALL_HOLDDOWN = 475, - VAR_QNAME_MINIMISATION = 476, - VAR_QNAME_MINIMISATION_STRICT = 477, - VAR_IP_FREEBIND = 478, - VAR_DEFINE_TAG = 479, - VAR_LOCAL_ZONE_TAG = 480, - VAR_ACCESS_CONTROL_TAG = 481, - VAR_LOCAL_ZONE_OVERRIDE = 482, - VAR_ACCESS_CONTROL_TAG_ACTION = 483, - VAR_ACCESS_CONTROL_TAG_DATA = 484, - VAR_VIEW = 485, - VAR_ACCESS_CONTROL_VIEW = 486, - VAR_VIEW_FIRST = 487, - VAR_SERVE_EXPIRED = 488, - VAR_SERVE_EXPIRED_TTL = 489, - VAR_SERVE_EXPIRED_TTL_RESET = 490, - VAR_SERVE_EXPIRED_REPLY_TTL = 491, - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, - VAR_EDE_SERVE_EXPIRED = 493, - VAR_SERVE_ORIGINAL_TTL = 494, - VAR_FAKE_DSA = 495, - VAR_FAKE_SHA1 = 496, - VAR_LOG_IDENTITY = 497, - VAR_HIDE_TRUSTANCHOR = 498, - VAR_HIDE_HTTP_USER_AGENT = 499, - VAR_HTTP_USER_AGENT = 500, - VAR_TRUST_ANCHOR_SIGNALING = 501, - VAR_AGGRESSIVE_NSEC = 502, - VAR_USE_SYSTEMD = 503, - VAR_SHM_ENABLE = 504, - VAR_SHM_KEY = 505, - VAR_ROOT_KEY_SENTINEL = 506, - VAR_DNSCRYPT = 507, - VAR_DNSCRYPT_ENABLE = 508, - VAR_DNSCRYPT_PORT = 509, - VAR_DNSCRYPT_PROVIDER = 510, - VAR_DNSCRYPT_SECRET_KEY = 511, - VAR_DNSCRYPT_PROVIDER_CERT = 512, - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 513, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 514, - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 515, - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 516, - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 517, - VAR_PAD_RESPONSES = 518, - VAR_PAD_RESPONSES_BLOCK_SIZE = 519, - VAR_PAD_QUERIES = 520, - VAR_PAD_QUERIES_BLOCK_SIZE = 521, - VAR_IPSECMOD_ENABLED = 522, - VAR_IPSECMOD_HOOK = 523, - VAR_IPSECMOD_IGNORE_BOGUS = 524, - VAR_IPSECMOD_MAX_TTL = 525, - VAR_IPSECMOD_WHITELIST = 526, - VAR_IPSECMOD_STRICT = 527, - VAR_CACHEDB = 528, - VAR_CACHEDB_BACKEND = 529, - VAR_CACHEDB_SECRETSEED = 530, - VAR_CACHEDB_REDISHOST = 531, - VAR_CACHEDB_REDISPORT = 532, - VAR_CACHEDB_REDISTIMEOUT = 533, - VAR_CACHEDB_REDISEXPIRERECORDS = 534, - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 535, - VAR_FOR_UPSTREAM = 536, - VAR_AUTH_ZONE = 537, - VAR_ZONEFILE = 538, - VAR_MASTER = 539, - VAR_URL = 540, - VAR_FOR_DOWNSTREAM = 541, - VAR_FALLBACK_ENABLED = 542, - VAR_TLS_ADDITIONAL_PORT = 543, - VAR_LOW_RTT = 544, - VAR_LOW_RTT_PERMIL = 545, - VAR_FAST_SERVER_PERMIL = 546, - VAR_FAST_SERVER_NUM = 547, - VAR_ALLOW_NOTIFY = 548, - VAR_TLS_WIN_CERT = 549, - VAR_TCP_CONNECTION_LIMIT = 550, - VAR_FORWARD_NO_CACHE = 551, - VAR_STUB_NO_CACHE = 552, - VAR_LOG_SERVFAIL = 553, - VAR_DENY_ANY = 554, - VAR_UNKNOWN_SERVER_TIME_LIMIT = 555, - VAR_LOG_TAG_QUERYREPLY = 556, - VAR_STREAM_WAIT_SIZE = 557, - VAR_TLS_CIPHERS = 558, - VAR_TLS_CIPHERSUITES = 559, - VAR_TLS_USE_SNI = 560, - VAR_IPSET = 561, - VAR_IPSET_NAME_V4 = 562, - VAR_IPSET_NAME_V6 = 563, - VAR_TLS_SESSION_TICKET_KEYS = 564, - VAR_RPZ = 565, - VAR_TAGS = 566, - VAR_RPZ_ACTION_OVERRIDE = 567, - VAR_RPZ_CNAME_OVERRIDE = 568, - VAR_RPZ_LOG = 569, - VAR_RPZ_LOG_NAME = 570, - VAR_DYNLIB = 571, - VAR_DYNLIB_FILE = 572, - VAR_EDNS_CLIENT_STRING = 573, - VAR_EDNS_CLIENT_STRING_OPCODE = 574, - VAR_NSID = 575, - VAR_ZONEMD_PERMISSIVE_MODE = 576, - VAR_ZONEMD_CHECK = 577, - VAR_ZONEMD_REJECT_ABSENCE = 578, - VAR_RPZ_SIGNAL_NXDOMAIN_RA = 579, - VAR_INTERFACE_AUTOMATIC_PORTS = 580, - VAR_EDE = 581, - VAR_UPSTREAM_COOKIES = 582 + VAR_INFRA_CACHE_MAX_RTT = 419, + VAR_INFRA_KEEP_PROBING = 420, + VAR_DNS64_PREFIX = 421, + VAR_DNS64_SYNTHALL = 422, + VAR_DNS64_IGNORE_AAAA = 423, + VAR_DNSTAP = 424, + VAR_DNSTAP_ENABLE = 425, + VAR_DNSTAP_SOCKET_PATH = 426, + VAR_DNSTAP_IP = 427, + VAR_DNSTAP_TLS = 428, + VAR_DNSTAP_TLS_SERVER_NAME = 429, + VAR_DNSTAP_TLS_CERT_BUNDLE = 430, + VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 431, + VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 432, + VAR_DNSTAP_SEND_IDENTITY = 433, + VAR_DNSTAP_SEND_VERSION = 434, + VAR_DNSTAP_BIDIRECTIONAL = 435, + VAR_DNSTAP_IDENTITY = 436, + VAR_DNSTAP_VERSION = 437, + VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 438, + VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 439, + VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 440, + VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 441, + VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 442, + VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 443, + VAR_RESPONSE_IP_TAG = 444, + VAR_RESPONSE_IP = 445, + VAR_RESPONSE_IP_DATA = 446, + VAR_HARDEN_ALGO_DOWNGRADE = 447, + VAR_IP_TRANSPARENT = 448, + VAR_IP_DSCP = 449, + VAR_DISABLE_DNSSEC_LAME_CHECK = 450, + VAR_IP_RATELIMIT = 451, + VAR_IP_RATELIMIT_SLABS = 452, + VAR_IP_RATELIMIT_SIZE = 453, + VAR_RATELIMIT = 454, + VAR_RATELIMIT_SLABS = 455, + VAR_RATELIMIT_SIZE = 456, + VAR_OUTBOUND_MSG_RETRY = 457, + VAR_RATELIMIT_FOR_DOMAIN = 458, + VAR_RATELIMIT_BELOW_DOMAIN = 459, + VAR_IP_RATELIMIT_FACTOR = 460, + VAR_RATELIMIT_FACTOR = 461, + VAR_IP_RATELIMIT_BACKOFF = 462, + VAR_RATELIMIT_BACKOFF = 463, + VAR_SEND_CLIENT_SUBNET = 464, + VAR_CLIENT_SUBNET_ZONE = 465, + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 466, + VAR_CLIENT_SUBNET_OPCODE = 467, + VAR_MAX_CLIENT_SUBNET_IPV4 = 468, + VAR_MAX_CLIENT_SUBNET_IPV6 = 469, + VAR_MIN_CLIENT_SUBNET_IPV4 = 470, + VAR_MIN_CLIENT_SUBNET_IPV6 = 471, + VAR_MAX_ECS_TREE_SIZE_IPV4 = 472, + VAR_MAX_ECS_TREE_SIZE_IPV6 = 473, + VAR_CAPS_WHITELIST = 474, + VAR_CACHE_MAX_NEGATIVE_TTL = 475, + VAR_PERMIT_SMALL_HOLDDOWN = 476, + VAR_QNAME_MINIMISATION = 477, + VAR_QNAME_MINIMISATION_STRICT = 478, + VAR_IP_FREEBIND = 479, + VAR_DEFINE_TAG = 480, + VAR_LOCAL_ZONE_TAG = 481, + VAR_ACCESS_CONTROL_TAG = 482, + VAR_LOCAL_ZONE_OVERRIDE = 483, + VAR_ACCESS_CONTROL_TAG_ACTION = 484, + VAR_ACCESS_CONTROL_TAG_DATA = 485, + VAR_VIEW = 486, + VAR_ACCESS_CONTROL_VIEW = 487, + VAR_VIEW_FIRST = 488, + VAR_SERVE_EXPIRED = 489, + VAR_SERVE_EXPIRED_TTL = 490, + VAR_SERVE_EXPIRED_TTL_RESET = 491, + VAR_SERVE_EXPIRED_REPLY_TTL = 492, + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 493, + VAR_EDE_SERVE_EXPIRED = 494, + VAR_SERVE_ORIGINAL_TTL = 495, + VAR_FAKE_DSA = 496, + VAR_FAKE_SHA1 = 497, + VAR_LOG_IDENTITY = 498, + VAR_HIDE_TRUSTANCHOR = 499, + VAR_HIDE_HTTP_USER_AGENT = 500, + VAR_HTTP_USER_AGENT = 501, + VAR_TRUST_ANCHOR_SIGNALING = 502, + VAR_AGGRESSIVE_NSEC = 503, + VAR_USE_SYSTEMD = 504, + VAR_SHM_ENABLE = 505, + VAR_SHM_KEY = 506, + VAR_ROOT_KEY_SENTINEL = 507, + VAR_DNSCRYPT = 508, + VAR_DNSCRYPT_ENABLE = 509, + VAR_DNSCRYPT_PORT = 510, + VAR_DNSCRYPT_PROVIDER = 511, + VAR_DNSCRYPT_SECRET_KEY = 512, + VAR_DNSCRYPT_PROVIDER_CERT = 513, + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 514, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 515, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 516, + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 517, + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 518, + VAR_PAD_RESPONSES = 519, + VAR_PAD_RESPONSES_BLOCK_SIZE = 520, + VAR_PAD_QUERIES = 521, + VAR_PAD_QUERIES_BLOCK_SIZE = 522, + VAR_IPSECMOD_ENABLED = 523, + VAR_IPSECMOD_HOOK = 524, + VAR_IPSECMOD_IGNORE_BOGUS = 525, + VAR_IPSECMOD_MAX_TTL = 526, + VAR_IPSECMOD_WHITELIST = 527, + VAR_IPSECMOD_STRICT = 528, + VAR_CACHEDB = 529, + VAR_CACHEDB_BACKEND = 530, + VAR_CACHEDB_SECRETSEED = 531, + VAR_CACHEDB_REDISHOST = 532, + VAR_CACHEDB_REDISPORT = 533, + VAR_CACHEDB_REDISTIMEOUT = 534, + VAR_CACHEDB_REDISEXPIRERECORDS = 535, + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 536, + VAR_FOR_UPSTREAM = 537, + VAR_AUTH_ZONE = 538, + VAR_ZONEFILE = 539, + VAR_MASTER = 540, + VAR_URL = 541, + VAR_FOR_DOWNSTREAM = 542, + VAR_FALLBACK_ENABLED = 543, + VAR_TLS_ADDITIONAL_PORT = 544, + VAR_LOW_RTT = 545, + VAR_LOW_RTT_PERMIL = 546, + VAR_FAST_SERVER_PERMIL = 547, + VAR_FAST_SERVER_NUM = 548, + VAR_ALLOW_NOTIFY = 549, + VAR_TLS_WIN_CERT = 550, + VAR_TCP_CONNECTION_LIMIT = 551, + VAR_FORWARD_NO_CACHE = 552, + VAR_STUB_NO_CACHE = 553, + VAR_LOG_SERVFAIL = 554, + VAR_DENY_ANY = 555, + VAR_UNKNOWN_SERVER_TIME_LIMIT = 556, + VAR_LOG_TAG_QUERYREPLY = 557, + VAR_STREAM_WAIT_SIZE = 558, + VAR_TLS_CIPHERS = 559, + VAR_TLS_CIPHERSUITES = 560, + VAR_TLS_USE_SNI = 561, + VAR_IPSET = 562, + VAR_IPSET_NAME_V4 = 563, + VAR_IPSET_NAME_V6 = 564, + VAR_TLS_SESSION_TICKET_KEYS = 565, + VAR_RPZ = 566, + VAR_TAGS = 567, + VAR_RPZ_ACTION_OVERRIDE = 568, + VAR_RPZ_CNAME_OVERRIDE = 569, + VAR_RPZ_LOG = 570, + VAR_RPZ_LOG_NAME = 571, + VAR_DYNLIB = 572, + VAR_DYNLIB_FILE = 573, + VAR_EDNS_CLIENT_STRING = 574, + VAR_EDNS_CLIENT_STRING_OPCODE = 575, + VAR_NSID = 576, + VAR_ZONEMD_PERMISSIVE_MODE = 577, + VAR_ZONEMD_CHECK = 578, + VAR_ZONEMD_REJECT_ABSENCE = 579, + VAR_RPZ_SIGNAL_NXDOMAIN_RA = 580, + VAR_INTERFACE_AUTOMATIC_PORTS = 581, + VAR_EDE = 582, + VAR_UPSTREAM_COOKIES = 583 }; #endif /* Tokens. */ @@ -528,170 +529,171 @@ #define VAR_UNBLOCK_LAN_ZONES 416 #define VAR_INSECURE_LAN_ZONES 417 #define VAR_INFRA_CACHE_MIN_RTT 418 -#define VAR_INFRA_KEEP_PROBING 419 -#define VAR_DNS64_PREFIX 420 -#define VAR_DNS64_SYNTHALL 421 -#define VAR_DNS64_IGNORE_AAAA 422 -#define VAR_DNSTAP 423 -#define VAR_DNSTAP_ENABLE 424 -#define VAR_DNSTAP_SOCKET_PATH 425 -#define VAR_DNSTAP_IP 426 -#define VAR_DNSTAP_TLS 427 -#define VAR_DNSTAP_TLS_SERVER_NAME 428 -#define VAR_DNSTAP_TLS_CERT_BUNDLE 429 -#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 430 -#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 431 -#define VAR_DNSTAP_SEND_IDENTITY 432 -#define VAR_DNSTAP_SEND_VERSION 433 -#define VAR_DNSTAP_BIDIRECTIONAL 434 -#define VAR_DNSTAP_IDENTITY 435 -#define VAR_DNSTAP_VERSION 436 -#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 437 -#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 438 -#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 439 -#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 440 -#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 441 -#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 442 -#define VAR_RESPONSE_IP_TAG 443 -#define VAR_RESPONSE_IP 444 -#define VAR_RESPONSE_IP_DATA 445 -#define VAR_HARDEN_ALGO_DOWNGRADE 446 -#define VAR_IP_TRANSPARENT 447 -#define VAR_IP_DSCP 448 -#define VAR_DISABLE_DNSSEC_LAME_CHECK 449 -#define VAR_IP_RATELIMIT 450 -#define VAR_IP_RATELIMIT_SLABS 451 -#define VAR_IP_RATELIMIT_SIZE 452 -#define VAR_RATELIMIT 453 -#define VAR_RATELIMIT_SLABS 454 -#define VAR_RATELIMIT_SIZE 455 -#define VAR_OUTBOUND_MSG_RETRY 456 -#define VAR_RATELIMIT_FOR_DOMAIN 457 -#define VAR_RATELIMIT_BELOW_DOMAIN 458 -#define VAR_IP_RATELIMIT_FACTOR 459 -#define VAR_RATELIMIT_FACTOR 460 -#define VAR_IP_RATELIMIT_BACKOFF 461 -#define VAR_RATELIMIT_BACKOFF 462 -#define VAR_SEND_CLIENT_SUBNET 463 -#define VAR_CLIENT_SUBNET_ZONE 464 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 465 -#define VAR_CLIENT_SUBNET_OPCODE 466 -#define VAR_MAX_CLIENT_SUBNET_IPV4 467 -#define VAR_MAX_CLIENT_SUBNET_IPV6 468 -#define VAR_MIN_CLIENT_SUBNET_IPV4 469 -#define VAR_MIN_CLIENT_SUBNET_IPV6 470 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 471 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 472 -#define VAR_CAPS_WHITELIST 473 -#define VAR_CACHE_MAX_NEGATIVE_TTL 474 -#define VAR_PERMIT_SMALL_HOLDDOWN 475 -#define VAR_QNAME_MINIMISATION 476 -#define VAR_QNAME_MINIMISATION_STRICT 477 -#define VAR_IP_FREEBIND 478 -#define VAR_DEFINE_TAG 479 -#define VAR_LOCAL_ZONE_TAG 480 -#define VAR_ACCESS_CONTROL_TAG 481 -#define VAR_LOCAL_ZONE_OVERRIDE 482 -#define VAR_ACCESS_CONTROL_TAG_ACTION 483 -#define VAR_ACCESS_CONTROL_TAG_DATA 484 -#define VAR_VIEW 485 -#define VAR_ACCESS_CONTROL_VIEW 486 -#define VAR_VIEW_FIRST 487 -#define VAR_SERVE_EXPIRED 488 -#define VAR_SERVE_EXPIRED_TTL 489 -#define VAR_SERVE_EXPIRED_TTL_RESET 490 -#define VAR_SERVE_EXPIRED_REPLY_TTL 491 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 492 -#define VAR_EDE_SERVE_EXPIRED 493 -#define VAR_SERVE_ORIGINAL_TTL 494 -#define VAR_FAKE_DSA 495 -#define VAR_FAKE_SHA1 496 -#define VAR_LOG_IDENTITY 497 -#define VAR_HIDE_TRUSTANCHOR 498 -#define VAR_HIDE_HTTP_USER_AGENT 499 -#define VAR_HTTP_USER_AGENT 500 -#define VAR_TRUST_ANCHOR_SIGNALING 501 -#define VAR_AGGRESSIVE_NSEC 502 -#define VAR_USE_SYSTEMD 503 -#define VAR_SHM_ENABLE 504 -#define VAR_SHM_KEY 505 -#define VAR_ROOT_KEY_SENTINEL 506 -#define VAR_DNSCRYPT 507 -#define VAR_DNSCRYPT_ENABLE 508 -#define VAR_DNSCRYPT_PORT 509 -#define VAR_DNSCRYPT_PROVIDER 510 -#define VAR_DNSCRYPT_SECRET_KEY 511 -#define VAR_DNSCRYPT_PROVIDER_CERT 512 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 513 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 514 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 515 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 516 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 517 -#define VAR_PAD_RESPONSES 518 -#define VAR_PAD_RESPONSES_BLOCK_SIZE 519 -#define VAR_PAD_QUERIES 520 -#define VAR_PAD_QUERIES_BLOCK_SIZE 521 -#define VAR_IPSECMOD_ENABLED 522 -#define VAR_IPSECMOD_HOOK 523 -#define VAR_IPSECMOD_IGNORE_BOGUS 524 -#define VAR_IPSECMOD_MAX_TTL 525 -#define VAR_IPSECMOD_WHITELIST 526 -#define VAR_IPSECMOD_STRICT 527 -#define VAR_CACHEDB 528 -#define VAR_CACHEDB_BACKEND 529 -#define VAR_CACHEDB_SECRETSEED 530 -#define VAR_CACHEDB_REDISHOST 531 -#define VAR_CACHEDB_REDISPORT 532 -#define VAR_CACHEDB_REDISTIMEOUT 533 -#define VAR_CACHEDB_REDISEXPIRERECORDS 534 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 535 -#define VAR_FOR_UPSTREAM 536 -#define VAR_AUTH_ZONE 537 -#define VAR_ZONEFILE 538 -#define VAR_MASTER 539 -#define VAR_URL 540 -#define VAR_FOR_DOWNSTREAM 541 -#define VAR_FALLBACK_ENABLED 542 -#define VAR_TLS_ADDITIONAL_PORT 543 -#define VAR_LOW_RTT 544 -#define VAR_LOW_RTT_PERMIL 545 -#define VAR_FAST_SERVER_PERMIL 546 -#define VAR_FAST_SERVER_NUM 547 -#define VAR_ALLOW_NOTIFY 548 -#define VAR_TLS_WIN_CERT 549 -#define VAR_TCP_CONNECTION_LIMIT 550 -#define VAR_FORWARD_NO_CACHE 551 -#define VAR_STUB_NO_CACHE 552 -#define VAR_LOG_SERVFAIL 553 -#define VAR_DENY_ANY 554 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 555 -#define VAR_LOG_TAG_QUERYREPLY 556 -#define VAR_STREAM_WAIT_SIZE 557 -#define VAR_TLS_CIPHERS 558 -#define VAR_TLS_CIPHERSUITES 559 -#define VAR_TLS_USE_SNI 560 -#define VAR_IPSET 561 -#define VAR_IPSET_NAME_V4 562 -#define VAR_IPSET_NAME_V6 563 -#define VAR_TLS_SESSION_TICKET_KEYS 564 -#define VAR_RPZ 565 -#define VAR_TAGS 566 -#define VAR_RPZ_ACTION_OVERRIDE 567 -#define VAR_RPZ_CNAME_OVERRIDE 568 -#define VAR_RPZ_LOG 569 -#define VAR_RPZ_LOG_NAME 570 -#define VAR_DYNLIB 571 -#define VAR_DYNLIB_FILE 572 -#define VAR_EDNS_CLIENT_STRING 573 -#define VAR_EDNS_CLIENT_STRING_OPCODE 574 -#define VAR_NSID 575 -#define VAR_ZONEMD_PERMISSIVE_MODE 576 -#define VAR_ZONEMD_CHECK 577 -#define VAR_ZONEMD_REJECT_ABSENCE 578 -#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 579 -#define VAR_INTERFACE_AUTOMATIC_PORTS 580 -#define VAR_EDE 581 -#define VAR_UPSTREAM_COOKIES 582 +#define VAR_INFRA_CACHE_MAX_RTT 419 +#define VAR_INFRA_KEEP_PROBING 420 +#define VAR_DNS64_PREFIX 421 +#define VAR_DNS64_SYNTHALL 422 +#define VAR_DNS64_IGNORE_AAAA 423 +#define VAR_DNSTAP 424 +#define VAR_DNSTAP_ENABLE 425 +#define VAR_DNSTAP_SOCKET_PATH 426 +#define VAR_DNSTAP_IP 427 +#define VAR_DNSTAP_TLS 428 +#define VAR_DNSTAP_TLS_SERVER_NAME 429 +#define VAR_DNSTAP_TLS_CERT_BUNDLE 430 +#define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 431 +#define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 432 +#define VAR_DNSTAP_SEND_IDENTITY 433 +#define VAR_DNSTAP_SEND_VERSION 434 +#define VAR_DNSTAP_BIDIRECTIONAL 435 +#define VAR_DNSTAP_IDENTITY 436 +#define VAR_DNSTAP_VERSION 437 +#define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 438 +#define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 439 +#define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 440 +#define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 441 +#define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 442 +#define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 443 +#define VAR_RESPONSE_IP_TAG 444 +#define VAR_RESPONSE_IP 445 +#define VAR_RESPONSE_IP_DATA 446 +#define VAR_HARDEN_ALGO_DOWNGRADE 447 +#define VAR_IP_TRANSPARENT 448 +#define VAR_IP_DSCP 449 +#define VAR_DISABLE_DNSSEC_LAME_CHECK 450 +#define VAR_IP_RATELIMIT 451 +#define VAR_IP_RATELIMIT_SLABS 452 +#define VAR_IP_RATELIMIT_SIZE 453 +#define VAR_RATELIMIT 454 +#define VAR_RATELIMIT_SLABS 455 +#define VAR_RATELIMIT_SIZE 456 +#define VAR_OUTBOUND_MSG_RETRY 457 +#define VAR_RATELIMIT_FOR_DOMAIN 458 +#define VAR_RATELIMIT_BELOW_DOMAIN 459 +#define VAR_IP_RATELIMIT_FACTOR 460 +#define VAR_RATELIMIT_FACTOR 461 +#define VAR_IP_RATELIMIT_BACKOFF 462 +#define VAR_RATELIMIT_BACKOFF 463 +#define VAR_SEND_CLIENT_SUBNET 464 +#define VAR_CLIENT_SUBNET_ZONE 465 +#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 466 +#define VAR_CLIENT_SUBNET_OPCODE 467 +#define VAR_MAX_CLIENT_SUBNET_IPV4 468 +#define VAR_MAX_CLIENT_SUBNET_IPV6 469 +#define VAR_MIN_CLIENT_SUBNET_IPV4 470 +#define VAR_MIN_CLIENT_SUBNET_IPV6 471 +#define VAR_MAX_ECS_TREE_SIZE_IPV4 472 +#define VAR_MAX_ECS_TREE_SIZE_IPV6 473 +#define VAR_CAPS_WHITELIST 474 +#define VAR_CACHE_MAX_NEGATIVE_TTL 475 +#define VAR_PERMIT_SMALL_HOLDDOWN 476 +#define VAR_QNAME_MINIMISATION 477 +#define VAR_QNAME_MINIMISATION_STRICT 478 +#define VAR_IP_FREEBIND 479 +#define VAR_DEFINE_TAG 480 +#define VAR_LOCAL_ZONE_TAG 481 +#define VAR_ACCESS_CONTROL_TAG 482 +#define VAR_LOCAL_ZONE_OVERRIDE 483 +#define VAR_ACCESS_CONTROL_TAG_ACTION 484 +#define VAR_ACCESS_CONTROL_TAG_DATA 485 +#define VAR_VIEW 486 +#define VAR_ACCESS_CONTROL_VIEW 487 +#define VAR_VIEW_FIRST 488 +#define VAR_SERVE_EXPIRED 489 +#define VAR_SERVE_EXPIRED_TTL 490 +#define VAR_SERVE_EXPIRED_TTL_RESET 491 +#define VAR_SERVE_EXPIRED_REPLY_TTL 492 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 493 +#define VAR_EDE_SERVE_EXPIRED 494 +#define VAR_SERVE_ORIGINAL_TTL 495 +#define VAR_FAKE_DSA 496 +#define VAR_FAKE_SHA1 497 +#define VAR_LOG_IDENTITY 498 +#define VAR_HIDE_TRUSTANCHOR 499 +#define VAR_HIDE_HTTP_USER_AGENT 500 +#define VAR_HTTP_USER_AGENT 501 +#define VAR_TRUST_ANCHOR_SIGNALING 502 +#define VAR_AGGRESSIVE_NSEC 503 +#define VAR_USE_SYSTEMD 504 +#define VAR_SHM_ENABLE 505 +#define VAR_SHM_KEY 506 +#define VAR_ROOT_KEY_SENTINEL 507 +#define VAR_DNSCRYPT 508 +#define VAR_DNSCRYPT_ENABLE 509 +#define VAR_DNSCRYPT_PORT 510 +#define VAR_DNSCRYPT_PROVIDER 511 +#define VAR_DNSCRYPT_SECRET_KEY 512 +#define VAR_DNSCRYPT_PROVIDER_CERT 513 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 514 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 515 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 516 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 517 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 518 +#define VAR_PAD_RESPONSES 519 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 520 +#define VAR_PAD_QUERIES 521 +#define VAR_PAD_QUERIES_BLOCK_SIZE 522 +#define VAR_IPSECMOD_ENABLED 523 +#define VAR_IPSECMOD_HOOK 524 +#define VAR_IPSECMOD_IGNORE_BOGUS 525 +#define VAR_IPSECMOD_MAX_TTL 526 +#define VAR_IPSECMOD_WHITELIST 527 +#define VAR_IPSECMOD_STRICT 528 +#define VAR_CACHEDB 529 +#define VAR_CACHEDB_BACKEND 530 +#define VAR_CACHEDB_SECRETSEED 531 +#define VAR_CACHEDB_REDISHOST 532 +#define VAR_CACHEDB_REDISPORT 533 +#define VAR_CACHEDB_REDISTIMEOUT 534 +#define VAR_CACHEDB_REDISEXPIRERECORDS 535 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 536 +#define VAR_FOR_UPSTREAM 537 +#define VAR_AUTH_ZONE 538 +#define VAR_ZONEFILE 539 +#define VAR_MASTER 540 +#define VAR_URL 541 +#define VAR_FOR_DOWNSTREAM 542 +#define VAR_FALLBACK_ENABLED 543 +#define VAR_TLS_ADDITIONAL_PORT 544 +#define VAR_LOW_RTT 545 +#define VAR_LOW_RTT_PERMIL 546 +#define VAR_FAST_SERVER_PERMIL 547 +#define VAR_FAST_SERVER_NUM 548 +#define VAR_ALLOW_NOTIFY 549 +#define VAR_TLS_WIN_CERT 550 +#define VAR_TCP_CONNECTION_LIMIT 551 +#define VAR_FORWARD_NO_CACHE 552 +#define VAR_STUB_NO_CACHE 553 +#define VAR_LOG_SERVFAIL 554 +#define VAR_DENY_ANY 555 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 556 +#define VAR_LOG_TAG_QUERYREPLY 557 +#define VAR_STREAM_WAIT_SIZE 558 +#define VAR_TLS_CIPHERS 559 +#define VAR_TLS_CIPHERSUITES 560 +#define VAR_TLS_USE_SNI 561 +#define VAR_IPSET 562 +#define VAR_IPSET_NAME_V4 563 +#define VAR_IPSET_NAME_V6 564 +#define VAR_TLS_SESSION_TICKET_KEYS 565 +#define VAR_RPZ 566 +#define VAR_TAGS 567 +#define VAR_RPZ_ACTION_OVERRIDE 568 +#define VAR_RPZ_CNAME_OVERRIDE 569 +#define VAR_RPZ_LOG 570 +#define VAR_RPZ_LOG_NAME 571 +#define VAR_DYNLIB 572 +#define VAR_DYNLIB_FILE 573 +#define VAR_EDNS_CLIENT_STRING 574 +#define VAR_EDNS_CLIENT_STRING_OPCODE 575 +#define VAR_NSID 576 +#define VAR_ZONEMD_PERMISSIVE_MODE 577 +#define VAR_ZONEMD_CHECK 578 +#define VAR_ZONEMD_REJECT_ABSENCE 579 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 580 +#define VAR_INTERFACE_AUTOMATIC_PORTS 581 +#define VAR_EDE 582 +#define VAR_UPSTREAM_COOKIES 583 @@ -703,7 +705,7 @@ typedef union YYSTYPE char* str; } /* Line 1529 of yacc.c. */ -#line 707 "util/configparser.h" +#line 709 "util/configparser.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/util/configparser.y b/util/configparser.y index a9431237d..25b573258 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -120,7 +120,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES -%token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_KEEP_PROBING +%token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_CACHE_MAX_RTT VAR_INFRA_KEEP_PROBING %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP %token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE @@ -205,12 +205,14 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | force_toplevel: VAR_FORCE_TOPLEVEL { OUTYY(("\nP(force-toplevel)\n")); + cfg_parser->started_toplevel = 0; } ; /* server: declaration */ serverstart: VAR_SERVER { OUTYY(("\nP(server:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_server: contents_server content_server @@ -268,7 +270,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_so_reuseport | server_delay_close | server_udp_connect | server_unblock_lan_zones | server_insecure_lan_zones | server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | - server_infra_cache_min_rtt | server_harden_algo_downgrade | + server_infra_cache_min_rtt | server_infra_cache_max_rtt | server_harden_algo_downgrade | server_ip_transparent | server_ip_ratelimit | server_ratelimit | server_ip_dscp | server_infra_keep_probing | server_ip_ratelimit_slabs | server_ratelimit_slabs | @@ -321,6 +323,7 @@ stubstart: VAR_STUB_ZONE { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->stubs; @@ -339,6 +342,7 @@ forwardstart: VAR_FORWARD_ZONE { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->forwards; @@ -357,6 +361,7 @@ viewstart: VAR_VIEW { struct config_view* s; OUTYY(("\nP(view:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_view*)calloc(1, sizeof(struct config_view)); if(s) { s->next = cfg_parser->cfg->views; @@ -377,6 +382,7 @@ authstart: VAR_AUTH_ZONE { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; @@ -475,6 +481,7 @@ rpzstart: VAR_RPZ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); + cfg_parser->started_toplevel = 1; s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; @@ -1660,6 +1667,15 @@ server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG free($2); } ; +server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG + { + OUTYY(("P(server_infra_cache_max_rtt:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->infra_cache_max_rtt = atoi($2); + free($2); + } + ; server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG { OUTYY(("P(server_infra_keep_probing:%s)\n", $2)); @@ -3103,6 +3119,7 @@ view_first: VAR_VIEW_FIRST STRING_ARG rcstart: VAR_REMOTE_CONTROL { OUTYY(("\nP(remote-control:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_rc: contents_rc content_rc @@ -3175,6 +3192,7 @@ rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG dtstart: VAR_DNSTAP { OUTYY(("\nP(dnstap:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_dt: contents_dt content_dt @@ -3357,6 +3375,7 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES pythonstart: VAR_PYTHON { OUTYY(("\nP(python:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_py: contents_py content_py @@ -3372,6 +3391,7 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG dynlibstart: VAR_DYNLIB { OUTYY(("\nP(dynlib:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_dl: contents_dl content_dl @@ -3421,6 +3441,7 @@ server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG dnscstart: VAR_DNSCRYPT { OUTYY(("\nP(dnscrypt:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_dnsc: contents_dnsc content_dnsc @@ -3530,6 +3551,7 @@ dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG cachedbstart: VAR_CACHEDB { OUTYY(("\nP(cachedb:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_cachedb: contents_cachedb content_cachedb @@ -3629,6 +3651,7 @@ server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG ipsetstart: VAR_IPSET { OUTYY(("\nP(ipset:)\n")); + cfg_parser->started_toplevel = 1; } ; contents_ipset: contents_ipset content_ipset diff --git a/util/data/msgreply.c b/util/data/msgreply.c index e3ee607b1..1e6ee9704 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -1015,7 +1015,7 @@ int edns_opt_list_append_ede(struct edns_option** list, struct regional* region, prevp = list; while(*prevp != NULL) prevp = &((*prevp)->next); - verbose(VERB_ALGO, "attached EDE code: %d with message: %s", code, txt); + verbose(VERB_ALGO, "attached EDE code: %d with message: %s", code, (txt?txt:"\"\"")); *prevp = opt; return 1; } diff --git a/util/iana_ports.inc b/util/iana_ports.inc index c7662dc62..80a8144d3 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -2917,6 +2917,7 @@ 3297, 3298, 3299, +3301, 3302, 3303, 3304, @@ -3975,6 +3976,7 @@ 4789, 4790, 4791, +4792, 4800, 4801, 4802, @@ -4342,6 +4344,13 @@ 5859, 5863, 5900, +5903, +5904, +5905, +5906, +5907, +5908, +5909, 5910, 5911, 5912, @@ -4553,6 +4562,7 @@ 6965, 6966, 6969, +6980, 6997, 6998, 6999, diff --git a/util/module.h b/util/module.h index 33068a71c..013c65b02 100644 --- a/util/module.h +++ b/util/module.h @@ -665,6 +665,12 @@ struct module_qstate { int need_refetch; /** whether the query (or a subquery) was ratelimited */ int was_ratelimited; + /** time when query was started. This is when the qstate is created. + * This is used so that type NS data cannot be overwritten by them + * expiring while the lookup is in progress, using data fetched from + * those servers. By comparing expiry time with qstarttime for type NS. + */ + time_t qstarttime; /** * Attributes of clients that share the qstate that may affect IP-based diff --git a/util/net_help.c b/util/net_help.c index 114920e3f..8153dbdd1 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -1162,10 +1162,11 @@ add_WIN_cacerts_to_openssl_store(SSL_CTX* tls_ctx) (const unsigned char **)&pTargetCert->pbCertEncoded, pTargetCert->cbCertEncoded); if (!cert1) { + unsigned long error = ERR_get_error(); /* 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)); + (int)error, ERR_error_string(error, NULL)); return 0; } else { @@ -1176,10 +1177,11 @@ add_WIN_cacerts_to_openssl_store(SSL_CTX* tls_ctx) /* 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) { + ERR_GET_REASON(error) != X509_R_CERT_ALREADY_IN_HASH_TABLE) { + error = ERR_get_error(); verbose(VERB_ALGO, "%s %d:%s\n", - "Error adding certificate", (int)ERR_get_error(), - ERR_error_string(ERR_get_error(), NULL)); + "Error adding certificate", (int)error, + ERR_error_string(error, NULL)); X509_free(cert1); return 0; } diff --git a/util/rtt.c b/util/rtt.c index f51576fb5..b64206eca 100644 --- a/util/rtt.c +++ b/util/rtt.c @@ -45,6 +45,9 @@ /* overwritten by config: infra_cache_min_rtt: */ int RTT_MIN_TIMEOUT = 50; +/* overwritten by config: infra_cache_max_rtt: */ +int RTT_MAX_TIMEOUT = 120000; + /** calculate RTO from rtt information */ static int calc_rto(const struct rtt_info* rtt) diff --git a/util/rtt.h b/util/rtt.h index 07e65ee1d..63ed8eadb 100644 --- a/util/rtt.h +++ b/util/rtt.h @@ -58,7 +58,7 @@ struct rtt_info { /** min retransmit timeout value, in milliseconds */ extern int RTT_MIN_TIMEOUT; /** max retransmit timeout value, in milliseconds */ -#define RTT_MAX_TIMEOUT 120000 +extern int RTT_MAX_TIMEOUT; /** * Initialize RTT estimators. diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 7abf66f01..786516749 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -97,6 +97,23 @@ log_crypto_error(const char* str, unsigned long e) log_err("%s crypto %s", str, buf); } +/** + * Output a libcrypto openssl error to the logfile as a debug message. + * @param level: debug level to use in verbose() call + * @param str: string to add to it. + * @param e: the error to output, error number from ERR_get_error(). + */ +static void +log_crypto_verbose(enum verbosity_value level, const char* str, unsigned long e) +{ + char buf[128]; + /* or use ERR_error_string if ERR_error_string_n is not avail TODO */ + ERR_error_string_n(e, buf, sizeof(buf)); + /* buf now contains */ + /* error:[error code]:[library name]:[function name]:[reason string] */ + verbose(level, "%s crypto %s", str, buf); +} + /* return size of digest if supported, or 0 otherwise */ size_t nsec3_hash_algo_size_supported(int id) @@ -215,6 +232,10 @@ ds_digest_size_supported(int algo) switch(algo) { case LDNS_SHA1: #if defined(HAVE_EVP_SHA1) && defined(USE_SHA1) +#ifdef HAVE_EVP_DEFAULT_PROPERTIES_IS_FIPS_ENABLED + if (EVP_default_properties_is_fips_enabled(NULL)) + return 0; +#endif return SHA_DIGEST_LENGTH; #else if(fake_sha1) return 20; @@ -325,7 +346,11 @@ dnskey_algo_id_is_supported(int id) case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: #ifdef USE_SHA1 +#ifdef HAVE_EVP_DEFAULT_PROPERTIES_IS_FIPS_ENABLED + return !EVP_default_properties_is_fips_enabled(NULL); +#else return 1; +#endif #else if(fake_sha1) return 1; return 0; @@ -341,15 +366,22 @@ dnskey_algo_id_is_supported(int id) case LDNS_ECDSAP256SHA256: case LDNS_ECDSAP384SHA384: #endif +#if (defined(HAVE_EVP_SHA256) && defined(USE_SHA2)) || (defined(HAVE_EVP_SHA512) && defined(USE_SHA2)) || defined(USE_ECDSA) + return 1; +#endif #ifdef USE_ED25519 case LDNS_ED25519: #endif #ifdef USE_ED448 case LDNS_ED448: #endif -#if (defined(HAVE_EVP_SHA256) && defined(USE_SHA2)) || (defined(HAVE_EVP_SHA512) && defined(USE_SHA2)) || defined(USE_ECDSA) || defined(USE_ED25519) || defined(USE_ED448) +#if defined(USE_ED25519) || defined(USE_ED448) +#ifdef HAVE_EVP_DEFAULT_PROPERTIES_IS_FIPS_ENABLED + return !EVP_default_properties_is_fips_enabled(NULL); +#else return 1; #endif +#endif #ifdef USE_GOST case LDNS_ECC_GOST: @@ -652,6 +684,36 @@ setup_key_digest(int algo, EVP_PKEY** evp_key, const EVP_MD** digest_type, return 1; } +static void +digest_ctx_free(EVP_MD_CTX* ctx, EVP_PKEY *evp_key, + unsigned char* sigblock, int dofree, int docrypto_free) +{ +#ifdef HAVE_EVP_MD_CTX_NEW + EVP_MD_CTX_destroy(ctx); +#else + EVP_MD_CTX_cleanup(ctx); + free(ctx); +#endif + EVP_PKEY_free(evp_key); + if(dofree) free(sigblock); + else if(docrypto_free) OPENSSL_free(sigblock); +} + +static enum sec_status +digest_error_status(const char *str) +{ + unsigned long e = ERR_get_error(); +#ifdef EVP_R_INVALID_DIGEST + if (ERR_GET_LIB(e) == ERR_LIB_EVP && + ERR_GET_REASON(e) == EVP_R_INVALID_DIGEST) { + log_crypto_verbose(VERB_ALGO, str, e); + return sec_status_indeterminate; + } +#endif + log_crypto_verbose(VERB_QUERY, str, e); + return sec_status_unchecked; +} + /** * Check a canonical sig+rrset and signature against a dnskey * @param buf: buffer with data to verify, the first rrsig part and the @@ -663,10 +725,11 @@ setup_key_digest(int algo, EVP_PKEY** evp_key, const EVP_MD** digest_type, * @param keylen: length of keydata. * @param reason: bogus reason in more detail. * @return secure if verification succeeded, bogus on crypto failure, - * unchecked on format errors and alloc failures. + * unchecked on format errors and alloc failures, indeterminate + * if digest is not supported by the crypto library (openssl3+ only). */ enum sec_status -verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, +verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen, char** reason) { @@ -735,62 +798,36 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, } #ifndef HAVE_EVP_DIGESTVERIFY if(EVP_DigestInit(ctx, digest_type) == 0) { - verbose(VERB_QUERY, "verify: EVP_DigestInit failed"); -#ifdef HAVE_EVP_MD_CTX_NEW - EVP_MD_CTX_destroy(ctx); -#else - EVP_MD_CTX_cleanup(ctx); - free(ctx); -#endif - EVP_PKEY_free(evp_key); - if(dofree) free(sigblock); - else if(docrypto_free) OPENSSL_free(sigblock); - return sec_status_unchecked; + enum sec_status sec; + sec = digest_error_status("verify: EVP_DigestInit failed"); + digest_ctx_free(ctx, evp_key, sigblock, + dofree, docrypto_free); + return sec; } if(EVP_DigestUpdate(ctx, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf)) == 0) { - verbose(VERB_QUERY, "verify: EVP_DigestUpdate failed"); -#ifdef HAVE_EVP_MD_CTX_NEW - EVP_MD_CTX_destroy(ctx); -#else - EVP_MD_CTX_cleanup(ctx); - free(ctx); -#endif - EVP_PKEY_free(evp_key); - if(dofree) free(sigblock); - else if(docrypto_free) OPENSSL_free(sigblock); + log_crypto_verbose(VERB_QUERY, "verify: EVP_DigestUpdate failed", + ERR_get_error()); + digest_ctx_free(ctx, evp_key, sigblock, + dofree, docrypto_free); return sec_status_unchecked; } res = EVP_VerifyFinal(ctx, sigblock, sigblock_len, evp_key); #else /* HAVE_EVP_DIGESTVERIFY */ if(EVP_DigestVerifyInit(ctx, NULL, digest_type, NULL, evp_key) == 0) { - verbose(VERB_QUERY, "verify: EVP_DigestVerifyInit failed"); -#ifdef HAVE_EVP_MD_CTX_NEW - EVP_MD_CTX_destroy(ctx); -#else - EVP_MD_CTX_cleanup(ctx); - free(ctx); -#endif - EVP_PKEY_free(evp_key); - if(dofree) free(sigblock); - else if(docrypto_free) OPENSSL_free(sigblock); - return sec_status_unchecked; + enum sec_status sec; + sec = digest_error_status("verify: EVP_DigestVerifyInit failed"); + digest_ctx_free(ctx, evp_key, sigblock, + dofree, docrypto_free); + return sec; } res = EVP_DigestVerify(ctx, sigblock, sigblock_len, (unsigned char*)sldns_buffer_begin(buf), sldns_buffer_limit(buf)); #endif -#ifdef HAVE_EVP_MD_CTX_NEW - EVP_MD_CTX_destroy(ctx); -#else - EVP_MD_CTX_cleanup(ctx); - free(ctx); -#endif - EVP_PKEY_free(evp_key); - - if(dofree) free(sigblock); - else if(docrypto_free) OPENSSL_free(sigblock); + digest_ctx_free(ctx, evp_key, sigblock, + dofree, docrypto_free); if(res == 1) { return sec_status_secure; diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index d5f16b11f..5ab21e20e 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -513,25 +513,96 @@ size_t algo_needs_num_missing(struct algo_needs* n) int algo_needs_missing(struct algo_needs* n) { - int i; - /* first check if a needed algo was bogus - report that */ - for(i=0; ineeds[i] == 2) return 0; - /* now check which algo is missing */ - for(i=0; ineeds[i] == 1) - return i; + if(n->needs[i] == 1 && miss == -1) + miss = i; + } + if(miss != -1) return miss; return 0; } +/** + * verify rrset, with dnskey rrset, for a specific rrsig in rrset + * @param env: module environment, scratch space is used. + * @param ve: validator environment, date settings. + * @param now: current time for validation (can be overridden). + * @param rrset: to be validated. + * @param dnskey: DNSKEY rrset, keyset to try. + * @param sig_idx: which signature to try to validate. + * @param sortree: reused sorted order. Stored in region. Pass NULL at start, + * and for a new rrset. + * @param reason: if bogus, a string returned, fixed or alloced in scratch. + * @param reason_bogus: EDE (RFC8914) code paired with the reason of failure. + * @param section: section of packet where this rrset comes from. + * @param qstate: qstate with region. + * @return secure if any key signs *this* signature. bogus if no key signs it, + * unchecked on error, or indeterminate if all keys are not supported by + * the crypto library (openssl3+ only). + */ static enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t sig_idx, struct rbtree_type** sortree, char** reason, sldns_ede_code *reason_bogus, - sldns_pkt_section section, struct module_qstate* qstate); + sldns_pkt_section section, struct module_qstate* qstate) +{ + /* find matching keys and check them */ + enum sec_status sec = sec_status_bogus; + uint16_t tag = rrset_get_sig_keytag(rrset, sig_idx); + int algo = rrset_get_sig_algo(rrset, sig_idx); + size_t i, num = rrset_get_count(dnskey); + size_t numchecked = 0; + size_t numindeterminate = 0; + int buf_canon = 0; + verbose(VERB_ALGO, "verify sig %d %d", (int)tag, algo); + if(!dnskey_algo_id_is_supported(algo)) { + if(reason_bogus) + *reason_bogus = LDNS_EDE_UNSUPPORTED_DNSKEY_ALG; + verbose(VERB_QUERY, "verify sig: unknown algorithm"); + return sec_status_insecure; + } + + for(i=0; iscratch, + env->scratch_buffer, ve, now, rrset, dnskey, i, + sig_idx, sortree, &buf_canon, reason, reason_bogus, + section, qstate); + if(sec == sec_status_secure) + return sec; + else if(sec == sec_status_indeterminate) + numindeterminate ++; + } + if(numchecked == 0) { + *reason = "signatures from unknown keys"; + if(reason_bogus) + *reason_bogus = LDNS_EDE_DNSKEY_MISSING; + verbose(VERB_QUERY, "verify: could not find appropriate key"); + return sec_status_bogus; + } + if(numindeterminate == numchecked) { + *reason = "unsupported algorithm by crypto library"; + if(reason_bogus) + *reason_bogus = LDNS_EDE_UNSUPPORTED_DNSKEY_ALG; + verbose(VERB_ALGO, "verify sig: unsupported algorithm by " + "crypto library"); + return sec_status_indeterminate; + } + return sec_status_bogus; +} enum sec_status dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve, @@ -607,14 +678,14 @@ void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s) *reason = s; } -enum sec_status +enum sec_status dnskey_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, char** reason, sldns_ede_code *reason_bogus, sldns_pkt_section section, struct module_qstate* qstate) { enum sec_status sec; - size_t i, num, numchecked = 0; + size_t i, num, numchecked = 0, numindeterminate = 0; rbtree_type* sortree = NULL; int buf_canon = 0; uint16_t tag = dnskey_calc_keytag(dnskey, dnskey_idx); @@ -642,56 +713,21 @@ dnskey_verify_rrset(struct module_env* env, struct val_env* ve, if(sec == sec_status_secure) return sec; numchecked ++; + if(sec == sec_status_indeterminate) + numindeterminate ++; } verbose(VERB_ALGO, "rrset failed to verify: all signatures are bogus"); - if(!numchecked) *reason = "signature missing"; - return sec_status_bogus; -} - -static enum sec_status -dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve, - time_t now, struct ub_packed_rrset_key* rrset, - struct ub_packed_rrset_key* dnskey, size_t sig_idx, - struct rbtree_type** sortree, - char** reason, sldns_ede_code *reason_bogus, - sldns_pkt_section section, struct module_qstate* qstate) -{ - /* find matching keys and check them */ - enum sec_status sec = sec_status_bogus; - uint16_t tag = rrset_get_sig_keytag(rrset, sig_idx); - int algo = rrset_get_sig_algo(rrset, sig_idx); - size_t i, num = rrset_get_count(dnskey); - size_t numchecked = 0; - int buf_canon = 0; - verbose(VERB_ALGO, "verify sig %d %d", (int)tag, algo); - if(!dnskey_algo_id_is_supported(algo)) { + if(!numchecked) { + *reason = "signature missing"; + if(reason_bogus) + *reason_bogus = LDNS_EDE_RRSIGS_MISSING; + } else if(numchecked == numindeterminate) { + verbose(VERB_ALGO, "rrset failed to verify due to algorithm " + "refusal by cryptolib"); if(reason_bogus) *reason_bogus = LDNS_EDE_UNSUPPORTED_DNSKEY_ALG; - verbose(VERB_QUERY, "verify sig: unknown algorithm"); - return sec_status_insecure; - } - - for(i=0; iscratch, - env->scratch_buffer, ve, now, rrset, dnskey, i, - sig_idx, sortree, &buf_canon, reason, reason_bogus, - section, qstate); - if(sec == sec_status_secure) - return sec; - } - if(numchecked == 0) { - *reason = "signatures from unknown keys"; - if(reason_bogus) - *reason_bogus = LDNS_EDE_DNSKEY_MISSING; - verbose(VERB_QUERY, "verify: could not find appropriate key"); - return sec_status_bogus; + *reason = "algorithm refused by cryptolib"; + return sec_status_indeterminate; } return sec_status_bogus; } diff --git a/validator/val_utils.c b/validator/val_utils.c index 18a7c9c2e..e2319ee23 100644 --- a/validator/val_utils.c +++ b/validator/val_utils.c @@ -458,7 +458,7 @@ verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve, } /* If it didn't validate with the DNSKEY, try the next one! */ } - if(numsizesupp != 0) { + if(numsizesupp != 0 || sec == sec_status_indeterminate) { /* there is a working DS, but that DNSKEY is not supported */ return sec_status_insecure; } @@ -489,7 +489,6 @@ int val_favorite_ds_algo(struct ub_packed_rrset_key* ds_rrset) return digest_algo; } -// @TODO change the use of this function to _ede function in authzone.c:8111 enum sec_status val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, diff --git a/validator/validator.c b/validator/validator.c index 75f3220cf..1723afefe 100644 --- a/validator/validator.c +++ b/validator/validator.c @@ -2202,7 +2202,7 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq, if(!qstate->no_cache_store) { if(!dns_cache_store(qstate->env, &vq->orig_msg->qinfo, vq->orig_msg->rep, 0, qstate->prefetch_leeway, 0, NULL, - qstate->query_flags)) { + qstate->query_flags, qstate->qstarttime)) { log_err("out of memory caching validator results"); } } @@ -2211,7 +2211,7 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq, /* and this does not get prefetched, so no leeway */ if(!dns_cache_store(qstate->env, &vq->orig_msg->qinfo, vq->orig_msg->rep, 1, 0, 0, NULL, - qstate->query_flags)) { + qstate->query_flags, qstate->qstarttime)) { log_err("out of memory caching validator results"); } } @@ -2493,7 +2493,8 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq, /* If they aren't usable, then we treat it like * there was no DS. */ - // @TODO add EDE Unsupported DS Digest Type + /* TODO add EDE Unsupported DS Digest Type; this needs + * EDE to be added on non SERVFAIL answers. */ *ke = key_entry_create_null(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass,