diff --git a/README.md b/README.md index c8877d1e9df5..d1bbcf2b7797 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ have any feedback, we would love to hear from you. Don’t hesitate to [create an issue on Github](https://github.com/NLnetLabs/unbound/issues/new) or post a message on the [Unbound mailing list](https://lists.nlnetlabs.nl/mailman/listinfo/unbound-users). You can learn more about Unbound by reading our -[documentation](https://nlnetlabs.nl/documentation/unbound/). +[documentation](https://unbound.docs.nlnetlabs.nl/). ## Compiling @@ -33,7 +33,7 @@ support. All of Unbound's configuration options are described in the man pages, which will be installed and are available on the Unbound -[documentation page](https://nlnetlabs.nl/documentation/unbound/). +[documentation page](https://unbound.docs.nlnetlabs.nl/). An example configuration file is located in [doc/example.conf](https://github.com/NLnetLabs/unbound/blob/master/doc/example.conf.in). diff --git a/config.guess b/config.guess index e81d3ae7c210..7f76b6228f73 100755 --- a/config.guess +++ b/config.guess @@ -1,14 +1,14 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2021 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2021-06-03' +timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -60,7 +60,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2021 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -437,7 +437,7 @@ case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 @@ -929,6 +929,9 @@ EOF i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; *:Interix*:*) case $UNAME_MACHINE in x86) @@ -1522,6 +1525,9 @@ EOF i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; diff --git a/config.h.in b/config.h.in index e8a26735d2d3..197c2838b33f 100644 --- a/config.h.in +++ b/config.h.in @@ -381,6 +381,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H +/* Define to 1 if you have the header file. */ +#undef HAVE_NETIOAPI_H + /* Use libnettle for crypto */ #undef HAVE_NETTLE diff --git a/config.sub b/config.sub index d74fb6deac94..dba16e84c77c 100755 --- a/config.sub +++ b/config.sub @@ -1,14 +1,14 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2021 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2021-08-14' +timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -76,7 +76,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2021 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -1020,6 +1020,11 @@ case $cpu-$vendor in ;; # Here we normalize CPU types with a missing or matching vendor + armh-unknown | armh-alt) + cpu=armv7l + vendor=alt + basic_os=${basic_os:-linux-gnueabihf} + ;; dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull @@ -1121,7 +1126,7 @@ case $cpu-$vendor in xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; - arm64-*) + arm64-* | aarch64le-*) cpu=aarch64 ;; @@ -1304,7 +1309,7 @@ esac if test x$basic_os != x then -# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) @@ -1748,7 +1753,8 @@ case $os in | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ - | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr*) + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ + | fiwix* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) diff --git a/configure b/configure index 0e964568e234..48f9c2d02b68 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.14.0. +# Generated by GNU Autoconf 2.69 for unbound 1.15.0. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.14.0' -PACKAGE_STRING='unbound 1.14.0' +PACKAGE_VERSION='1.15.0' +PACKAGE_STRING='unbound 1.15.0' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1466,7 +1466,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.14.0 to adapt to many kinds of systems. +\`configure' configures unbound 1.15.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1531,7 +1531,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.14.0:";; + short | recursive ) echo "Configuration of unbound 1.15.0:";; esac cat <<\_ACEOF @@ -1773,7 +1773,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.14.0 +unbound configure 1.15.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2482,7 +2482,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.14.0, which was +It was created by unbound $as_me 1.15.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2832,13 +2832,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu UNBOUND_VERSION_MAJOR=1 -UNBOUND_VERSION_MINOR=14 +UNBOUND_VERSION_MINOR=15 UNBOUND_VERSION_MICRO=0 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=14 +LIBUNBOUND_REVISION=15 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2920,6 +2920,7 @@ LIBUNBOUND_AGE=1 # 1.13.1 had 9:12:1 # 1.13.2 had 9:13:1 # 1.14.0 had 9:14:1 +# 1.15.0 had 9:15:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -14812,6 +14813,51 @@ fi done +for ac_header in netioapi.h +do : + ac_fn_c_check_header_compile "$LINENO" "netioapi.h" "ac_cv_header_netioapi_h" "$ac_includes_default +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETINET_TCP_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#endif + +" +if test "x$ac_cv_header_netioapi_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETIOAPI_H 1 +_ACEOF + +fi + +done + # check for types. # Using own tests for int64* because autoconf builtin only give 32bit. @@ -17895,7 +17941,7 @@ if test "`uname`" = "NetBSD"; then fi -if test "`uname -o`" = "GNU/Linux"; then +if test "`uname`" = "Linux"; then # splint cannot parse modern c99 header files GCC_DOCKER_LINTFLAGS='-syntax' @@ -21840,7 +21886,7 @@ _ACEOF -version=1.14.0 +version=1.15.0 date=`date +'%b %e, %Y'` @@ -22359,7 +22405,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.14.0, which was +This file was extended by unbound $as_me 1.15.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22425,7 +22471,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.14.0 +unbound config.status 1.15.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 36fdb4598c27..5c7da1978131 100644 --- a/configure.ac +++ b/configure.ac @@ -10,7 +10,7 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) -m4_define([VERSION_MINOR],[14]) +m4_define([VERSION_MINOR],[15]) m4_define([VERSION_MICRO],[0]) 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]) @@ -18,7 +18,7 @@ AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=14 +LIBUNBOUND_REVISION=15 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -100,6 +100,7 @@ LIBUNBOUND_AGE=1 # 1.13.1 had 9:12:1 # 1.13.2 had 9:13:1 # 1.14.0 had 9:14:1 +# 1.15.0 had 9:15:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -412,6 +413,39 @@ AC_CHECK_HEADERS([net/if.h],,, [ # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH AC_CHECK_HEADERS([TargetConditionals.h],,, [AC_INCLUDES_DEFAULT]) +AC_CHECK_HEADERS([netioapi.h],,, [AC_INCLUDES_DEFAULT +#if HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_SYS_UIO_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETINET_TCP_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#endif + +#ifdef HAVE_WS2TCPIP_H +#include +#endif +]) # check for types. # Using own tests for int64* because autoconf builtin only give 32bit. @@ -782,7 +816,7 @@ if test "`uname`" = "NetBSD"; then AC_SUBST(NETBSD_LINTFLAGS) fi -if test "`uname -o`" = "GNU/Linux"; then +if test "`uname`" = "Linux"; then # splint cannot parse modern c99 header files GCC_DOCKER_LINTFLAGS='-syntax' AC_SUBST(GCC_DOCKER_LINTFLAGS) diff --git a/contrib/aaaa-filter-iterator.patch b/contrib/aaaa-filter-iterator.patch index f51de2a40d9b..5513133722db 100644 --- a/contrib/aaaa-filter-iterator.patch +++ b/contrib/aaaa-filter-iterator.patch @@ -1,8 +1,8 @@ diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in -index f426ac5f..147fbfa9 100644 +index 5a75e319..c6c6dbe2 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in -@@ -872,6 +872,13 @@ potentially broken nameservers. A lot of domains will not be resolvable when +@@ -970,6 +970,13 @@ potentially broken nameservers. A lot of domains will not be resolvable when this option in enabled. Only use if you know what you are doing. This option only has effect when qname-minimisation is enabled. Default is no. .TP @@ -17,10 +17,10 @@ index f426ac5f..147fbfa9 100644 Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN and other denials, using information from previous NXDOMAINs answers. diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c -index aae934dd..55c55de0 100644 +index f093c1bf..e55a2246 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c -@@ -667,6 +667,32 @@ static int sanitize_nsec_is_overreach(struct rrset_parse* rrset, +@@ -679,6 +679,32 @@ static int sanitize_nsec_is_overreach(sldns_buffer* pkt, return 0; } @@ -53,7 +53,7 @@ index aae934dd..55c55de0 100644 /** * Given a response event, remove suspect RRsets from the response. * "Suspect" rrsets are potentially poison. Note that this routine expects -@@ -686,6 +712,7 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, +@@ -698,6 +724,7 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinfo, uint8_t* zonename, struct module_env* env, struct iter_env* ie) { @@ -61,7 +61,7 @@ index aae934dd..55c55de0 100644 int del_addi = 0; /* if additional-holding rrsets are deleted, we do not trust the normalized additional-A-AAAA any more */ struct rrset_parse* rrset, *prev; -@@ -721,6 +748,13 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, +@@ -733,6 +760,13 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, rrset = rrset->rrset_all_next; } @@ -75,7 +75,7 @@ index aae934dd..55c55de0 100644 /* At this point, we brutally remove ALL rrsets that aren't * children of the originating zone. The idea here is that, * as far as we know, the server that we contacted is ONLY -@@ -732,6 +766,24 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, +@@ -744,6 +778,24 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, rrset = msg->rrset_first; while(rrset) { @@ -101,22 +101,22 @@ index aae934dd..55c55de0 100644 if( (rrset->type == LDNS_RR_TYPE_A || rrset->type == LDNS_RR_TYPE_AAAA)) { diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c -index 7bc67da6..e10f547a 100644 +index 2482a1f4..bd5ba243 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c -@@ -175,6 +175,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg) - } +@@ -177,6 +177,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg) iter_env->supports_ipv6 = cfg->do_ip6; iter_env->supports_ipv4 = cfg->do_ip4; + iter_env->outbound_msg_retry = cfg->outbound_msg_retry; + iter_env->aaaa_filter = cfg->aaaa_filter; return 1; } diff --git a/iterator/iterator.c b/iterator/iterator.c -index 23b07ea9..ca29b48c 100644 +index 54006940..768fe202 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c -@@ -2127,6 +2127,53 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) +@@ -2155,6 +2155,53 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) return 0; } @@ -170,7 +170,7 @@ index 23b07ea9..ca29b48c 100644 /** * This is the request event state where the request will be sent to one of -@@ -2186,6 +2233,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, +@@ -2216,6 +2263,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -184,7 +184,7 @@ index 23b07ea9..ca29b48c 100644 /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ if(!iq->dp) { -@@ -3574,6 +3628,61 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, +@@ -3648,6 +3702,61 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } @@ -246,7 +246,7 @@ index 23b07ea9..ca29b48c 100644 /* * Return priming query results to interested super querystates. * -@@ -3593,6 +3702,9 @@ iter_inform_super(struct module_qstate* qstate, int id, +@@ -3667,6 +3776,9 @@ iter_inform_super(struct module_qstate* qstate, int id, else if(super->qinfo.qtype == LDNS_RR_TYPE_DS && ((struct iter_qstate*) super->minfo[id])->state == DSNS_FIND_STATE) processDSNSResponse(qstate, id, super); @@ -256,7 +256,7 @@ index 23b07ea9..ca29b48c 100644 else if(qstate->return_rcode != LDNS_RCODE_NOERROR) error_supers(qstate, id, super); else if(qstate->is_priming) -@@ -3630,6 +3742,9 @@ iter_handle(struct module_qstate* qstate, struct iter_qstate* iq, +@@ -3704,6 +3816,9 @@ iter_handle(struct module_qstate* qstate, struct iter_qstate* iq, case INIT_REQUEST_3_STATE: cont = processInitRequest3(qstate, iq, id); break; @@ -266,7 +266,7 @@ index 23b07ea9..ca29b48c 100644 case QUERYTARGETS_STATE: cont = processQueryTargets(qstate, iq, ie, id); break; -@@ -3961,6 +4076,8 @@ iter_state_to_string(enum iter_state state) +@@ -4040,6 +4155,8 @@ iter_state_to_string(enum iter_state state) return "INIT REQUEST STATE (stage 2)"; case INIT_REQUEST_3_STATE: return "INIT REQUEST STATE (stage 3)"; @@ -275,7 +275,7 @@ index 23b07ea9..ca29b48c 100644 case QUERYTARGETS_STATE : return "QUERY TARGETS STATE"; case PRIME_RESP_STATE : -@@ -3985,6 +4102,7 @@ iter_state_is_responsestate(enum iter_state s) +@@ -4064,6 +4181,7 @@ iter_state_is_responsestate(enum iter_state s) case INIT_REQUEST_STATE : case INIT_REQUEST_2_STATE : case INIT_REQUEST_3_STATE : @@ -284,10 +284,10 @@ index 23b07ea9..ca29b48c 100644 case COLLECT_CLASS_STATE : return 0; diff --git a/iterator/iterator.h b/iterator/iterator.h -index 342ac207..731948d1 100644 +index 8b840528..a61c4195 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h -@@ -135,6 +135,9 @@ struct iter_env { +@@ -133,6 +133,9 @@ struct iter_env { */ int* target_fetch_policy; @@ -297,7 +297,7 @@ index 342ac207..731948d1 100644 /** lock on ratelimit counter */ lock_basic_type queries_ratelimit_lock; /** number of queries that have been ratelimited */ -@@ -186,6 +189,14 @@ enum iter_state { +@@ -187,6 +190,14 @@ enum iter_state { */ INIT_REQUEST_3_STATE, @@ -312,7 +312,7 @@ index 342ac207..731948d1 100644 /** * Each time a delegation point changes for a given query or a * query times out and/or wakes up, this state is (re)visited. -@@ -375,6 +386,13 @@ struct iter_qstate { +@@ -376,6 +387,13 @@ struct iter_qstate { */ int refetch_glue; @@ -327,10 +327,10 @@ index 342ac207..731948d1 100644 struct outbound_list outlist; diff --git a/pythonmod/interface.i b/pythonmod/interface.i -index f08b575d..47f1bb2e 100644 +index 1ca8686a..d91b19ec 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i -@@ -975,6 +975,7 @@ struct config_file { +@@ -995,6 +995,7 @@ struct config_file { int harden_dnssec_stripped; int harden_referral_path; int use_caps_bits_for_id; @@ -339,10 +339,10 @@ index f08b575d..47f1bb2e 100644 struct config_strlist* private_domain; size_t unwanted_threshold; diff --git a/util/config_file.c b/util/config_file.c -index 0ab8614a..729fb147 100644 +index 969d664b..8d94b008 100644 --- a/util/config_file.c +++ b/util/config_file.c -@@ -218,6 +218,7 @@ config_create(void) +@@ -231,6 +231,7 @@ config_create(void) cfg->harden_referral_path = 0; cfg->harden_algo_downgrade = 0; cfg->use_caps_bits_for_id = 0; @@ -351,10 +351,10 @@ index 0ab8614a..729fb147 100644 cfg->private_address = NULL; cfg->private_domain = NULL; diff --git a/util/config_file.h b/util/config_file.h -index e61257a3..dabaa7bb 100644 +index c7c9a0a4..e3aa15b0 100644 --- a/util/config_file.h +++ b/util/config_file.h -@@ -260,6 +260,8 @@ struct config_file { +@@ -285,6 +285,8 @@ struct config_file { int harden_algo_downgrade; /** use 0x20 bits in query as random ID bits */ int use_caps_bits_for_id; @@ -364,38 +364,38 @@ index e61257a3..dabaa7bb 100644 struct config_strlist* caps_whitelist; /** strip away these private addrs from answers, no DNS Rebinding */ diff --git a/util/configlexer.lex b/util/configlexer.lex -index 79a0edca..4eaec678 100644 +index 34a0e5dd..c890be2a 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex -@@ -304,6 +304,7 @@ harden-algo-downgrade{COLON} { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } - use-caps-for-id{COLON} { YDVAR(1, VAR_USE_CAPS_FOR_ID) } +@@ -317,6 +317,7 @@ use-caps-for-id{COLON} { YDVAR(1, VAR_USE_CAPS_FOR_ID) } caps-whitelist{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } + caps-exempt{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } unwanted-reply-threshold{COLON} { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +aaaa-filter{COLON} { YDVAR(1, VAR_AAAA_FILTER) } private-address{COLON} { YDVAR(1, VAR_PRIVATE_ADDRESS) } private-domain{COLON} { YDVAR(1, VAR_PRIVATE_DOMAIN) } prefetch-key{COLON} { YDVAR(1, VAR_PREFETCH_KEY) } diff --git a/util/configparser.y b/util/configparser.y -index 1d0e8658..f284dd43 100644 +index d4f965f9..8cc237c6 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -97,6 +97,7 @@ extern struct config_parser_state* cfg_parser; - %token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT + %token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT %token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR %token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS +%token VAR_AAAA_FILTER %token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE %token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE %token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE -@@ -233,6 +234,7 @@ content_server: server_num_threads | server_verbosity | server_port | +@@ -247,6 +248,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | server_harden_referral_path | server_private_address | - server_private_domain | server_extended_statistics | + server_private_domain | server_extended_statistics | + server_aaaa_filter | - server_local_data_ptr | server_jostle_timeout | - server_unwanted_reply_threshold | server_log_time_ascii | - server_domain_insecure | server_val_sig_skew_min | -@@ -1563,6 +1565,15 @@ server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG + server_local_data_ptr | server_jostle_timeout | + server_unwanted_reply_threshold | server_log_time_ascii | + server_domain_insecure | server_val_sig_skew_min | +@@ -1754,6 +1756,15 @@ server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG yyerror("out of memory"); } ; diff --git a/daemon/remote.c b/daemon/remote.c index adf0383895d4..675ef43970d1 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -300,6 +300,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, */ if(fd != -1) { #ifdef HAVE_CHOWN + chmod(ip, (mode_t)(S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)); if (cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1) { if(chown(ip, cfg_uid, cfg_gid) == -1) @@ -307,7 +308,6 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, (unsigned)cfg_uid, (unsigned)cfg_gid, ip, strerror(errno)); } - chmod(ip, (mode_t)(S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)); #else (void)cfg; #endif @@ -2015,7 +2015,7 @@ print_root_fwds(RES* ssl, struct iter_forwards* fwds, uint8_t* root) /** parse args into delegpt */ static struct delegpt* -parse_delegpt(RES* ssl, char* args, uint8_t* nm, int allow_names) +parse_delegpt(RES* ssl, char* args, uint8_t* nm) { /* parse args and add in */ char* p = args; @@ -2037,40 +2037,35 @@ parse_delegpt(RES* ssl, char* args, uint8_t* nm, int allow_names) } /* parse address */ if(!authextstrtoaddr(todo, &addr, &addrlen, &auth_name)) { - if(allow_names) { - uint8_t* n = NULL; - size_t ln; - int lb; - if(!parse_arg_name(ssl, todo, &n, &ln, &lb)) { - (void)ssl_printf(ssl, "error cannot " - "parse IP address or name " - "'%s'\n", todo); - delegpt_free_mlc(dp); - return NULL; - } - if(!delegpt_add_ns_mlc(dp, n, 0)) { - (void)ssl_printf(ssl, "error out of memory\n"); - free(n); - delegpt_free_mlc(dp); - return NULL; - } - free(n); - - } else { + uint8_t* dname= NULL; + int port; + dname = authextstrtodname(todo, &port, &auth_name); + if(!dname) { (void)ssl_printf(ssl, "error cannot parse" - " IP address '%s'\n", todo); + " '%s'\n", todo); + delegpt_free_mlc(dp); + return NULL; + } +#if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) + if(auth_name) + log_err("no name verification functionality in " + "ssl library, ignored name for %s", todo); +#endif + if(!delegpt_add_ns_mlc(dp, dname, 0, auth_name, port)) { + (void)ssl_printf(ssl, "error out of memory\n"); + free(dname); delegpt_free_mlc(dp); return NULL; } } else { #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(auth_name) - log_err("no name verification functionality in " + log_err("no name verification functionality in " "ssl library, ignored name for %s", todo); #endif /* add address */ if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0, - auth_name)) { + auth_name, -1)) { (void)ssl_printf(ssl, "error out of memory\n"); delegpt_free_mlc(dp); return NULL; @@ -2103,7 +2098,7 @@ do_forward(RES* ssl, struct worker* worker, char* args) forwards_delete_zone(fwd, LDNS_RR_CLASS_IN, root); } else { struct delegpt* dp; - if(!(dp = parse_delegpt(ssl, args, root, 0))) + if(!(dp = parse_delegpt(ssl, args, root))) return; if(!forwards_add_zone(fwd, LDNS_RR_CLASS_IN, dp)) { (void)ssl_printf(ssl, "error out of memory\n"); @@ -2149,7 +2144,7 @@ parse_fs_args(RES* ssl, char* args, uint8_t** nm, struct delegpt** dp, /* parse dp */ if(dp) { - if(!(*dp = parse_delegpt(ssl, args, *nm, 1))) { + if(!(*dp = parse_delegpt(ssl, args, *nm))) { free(*nm); return 0; } @@ -2865,6 +2860,8 @@ struct ratelimit_list_arg { int all; /** current time */ time_t now; + /** if backoff is enabled */ + int backoff; }; #define ip_ratelimit_list_arg ratelimit_list_arg @@ -2878,7 +2875,7 @@ rate_list(struct lruhash_entry* e, void* arg) struct rate_data* d = (struct rate_data*)e->data; char buf[257]; int lim = infra_find_ratelimit(a->infra, k->name, k->namelen); - int max = infra_rate_max(d, a->now); + int max = infra_rate_max(d, a->now, a->backoff); if(a->all == 0) { if(max < lim) return; @@ -2896,7 +2893,7 @@ ip_rate_list(struct lruhash_entry* e, void* arg) struct ip_rate_key* k = (struct ip_rate_key*)e->key; struct ip_rate_data* d = (struct ip_rate_data*)e->data; int lim = infra_ip_ratelimit; - int max = infra_rate_max(d, a->now); + int max = infra_rate_max(d, a->now, a->backoff); if(a->all == 0) { if(max < lim) return; @@ -2914,6 +2911,7 @@ do_ratelimit_list(RES* ssl, struct worker* worker, char* arg) a.infra = worker->env.infra_cache; a.now = *worker->env.now; a.ssl = ssl; + a.backoff = worker->env.cfg->ratelimit_backoff; arg = skipwhite(arg); if(strcmp(arg, "+a") == 0) a.all = 1; @@ -2932,6 +2930,7 @@ do_ip_ratelimit_list(RES* ssl, struct worker* worker, char* arg) a.infra = worker->env.infra_cache; a.now = *worker->env.now; a.ssl = ssl; + a.backoff = worker->env.cfg->ip_ratelimit_backoff; arg = skipwhite(arg); if(strcmp(arg, "+a") == 0) a.all = 1; diff --git a/daemon/worker.c b/daemon/worker.c index 5d2483cd2cd9..862affb24e9a 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1167,7 +1167,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, /* check if this query should be dropped based on source ip rate limiting */ if(!infra_ip_ratelimit_inc(worker->env.infra_cache, repinfo, - *worker->env.now, c->buffer)) { + *worker->env.now, + worker->env.cfg->ip_ratelimit_backoff, c->buffer)) { /* See if we are passed through with slip factor */ if(worker->env.cfg->ip_ratelimit_factor != 0 && ub_random_max(worker->env.rnd, @@ -1967,9 +1968,10 @@ worker_delete(struct worker* worker) struct outbound_entry* worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, - int want_dnssec, int nocaps, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, - int ssl_upstream, char* tls_auth_name, struct module_qstate* q) + int want_dnssec, int nocaps, int check_ratelimit, + struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, + size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name, + struct module_qstate* q, int* was_ratelimited) { struct worker* worker = q->env->worker; struct outbound_entry* e = (struct outbound_entry*)regional_alloc( @@ -1978,9 +1980,10 @@ worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, return NULL; e->qstate = q; e->qsent = outnet_serviced_query(worker->back, qinfo, flags, dnssec, - want_dnssec, nocaps, tcp_upstream, + want_dnssec, nocaps, check_ratelimit, tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, q, - worker_handle_service_reply, e, worker->back->udp_buff, q->env); + worker_handle_service_reply, e, worker->back->udp_buff, q->env, + was_ratelimited); if(!e->qsent) { return NULL; } @@ -2024,10 +2027,11 @@ struct outbound_entry* libworker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), + int ATTR_UNUSED(check_ratelimit), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), - struct module_qstate* ATTR_UNUSED(q)) + struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited)) { log_assert(0); return 0; diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 14aacaef567b..a1dd9703ea95 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -188,9 +188,9 @@ mq_wakeup_cb(void* arg) /** start timer to wakeup dtio because there is content in the queue */ static void -dt_msg_queue_start_timer(struct dt_msg_queue* mq) +dt_msg_queue_start_timer(struct dt_msg_queue* mq, int wakeupnow) { - struct timeval tv; + struct timeval tv = {0}; /* Start a timer to process messages to be logged. * If we woke up the dtio thread for every message, the wakeup * messages take up too much processing power. If the queue @@ -204,19 +204,26 @@ dt_msg_queue_start_timer(struct dt_msg_queue* mq) /* do not start the timer if a timer already exists, perhaps * in another worker. So this variable is protected by a lock in - * dtio */ + * dtio. */ + + /* If we need to wakeupnow, 0 the timer to force the callback. */ lock_basic_lock(&mq->dtio->wakeup_timer_lock); if(mq->dtio->wakeup_timer_enabled) { + if(wakeupnow) { + comm_timer_set(mq->wakeup_timer, &tv); + } lock_basic_unlock(&mq->dtio->wakeup_timer_lock); return; } mq->dtio->wakeup_timer_enabled = 1; /* we are going to start one */ - lock_basic_unlock(&mq->dtio->wakeup_timer_lock); /* start the timer, in mq, in the event base of our worker */ - tv.tv_sec = 1; - tv.tv_usec = 0; + if(!wakeupnow) { + tv.tv_sec = 1; + tv.tv_usec = 0; + } comm_timer_set(mq->wakeup_timer, &tv); + lock_basic_unlock(&mq->dtio->wakeup_timer_lock); } void @@ -283,10 +290,8 @@ dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) /* release lock */ lock_basic_unlock(&mq->lock); - if(wakeupnow) { - dtio_wakeup(mq->dtio); - } else if(wakeupstarttimer) { - dt_msg_queue_start_timer(mq); + if(wakeupnow || wakeupstarttimer) { + dt_msg_queue_start_timer(mq, wakeupnow); } } diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 990b8a866af1..63292fbca36e 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -1413,11 +1413,12 @@ void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) struct outbound_entry* worker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), - int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), + int ATTR_UNUSED(nocaps), int ATTR_UNUSED(check_ratelimit), + struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), - struct module_qstate* ATTR_UNUSED(q)) + struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited)) { log_assert(0); return 0; @@ -1446,11 +1447,12 @@ worker_alloc_cleanup(void* ATTR_UNUSED(arg)) struct outbound_entry* libworker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), - int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), + int ATTR_UNUSED(nocaps), int ATTR_UNUSED(check_ratelimit), + struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), - struct module_qstate* ATTR_UNUSED(q)) + struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited)) { log_assert(0); return 0; diff --git a/doc/Changelog b/doc/Changelog index 8aec7694f42d..8af7d3f888ad 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,138 @@ +3 February 2022: Wouter + - Fix for #611: Integer overflow in sldns_wire2str_pkt_scan. + +2 February 2022: George + - Merge PR #532 from Shchelk: Fix: buffer overflow bug. + - Merge PR #616: Update ratelimit logic. It also introduces + ratelimit-backoff and ip-ratelimit-backoff configuration options. + - Change aggressive-nsec default to yes. + - Merge PR #617: Update stub/forward-host notation to accept port and + tls-auth-name. + - Update stream_ssl.tdir test to also use the new forward-host + notation. + +2 February 2022: Wouter + - Update version number in repo to 1.15.0 for upcoming release, + since it changes the aggressive-nsec default and the ratelimit change. + - Fix header comment for doxygen for authextstrtoaddr. + - please clang analyzer for loop in test code. + - Fix docker splint test to use more portable uname. + - Update contrib/aaaa-filter-iterator.patch with diff for current + software version. + +1 February 2022: George + - Merge PR #603 from fobser: Use OpenSSL 1.1 API to access DSA and RSA + internals. + +31 January 2022: George + - Fix review comment for use-after-free when failing to send UDP out. + +31 January 2022: Wouter + - iana portlist update. + +29 January 2022: George + - Fix tls-* and ssl-* documented alternate syntax to also be available + through remote-control and unbound-checkconf. + - Better cleanup on failed DoT/DoH listening socket creation. + +26 January 2022: George + - Fix #599: [FR] RFC 9156 (obsoletes RFC 7816), by noting the new RFC + document. + +26 January 2022: Wouter + - Test for NSID in SERVFAIL response due to DNSSEC bogus. + +25 January 2022: George + - Fix #588: Unbound 1.13.2 crashes due to p->pc is NULL in + serviced_udp_callback. + - Merge PR #612: TCP race condition. + +25 January 2022: Wouter + - Fix #610: Undefine-shift in sldns_str2wire_hip_buf. + +19 January 2022: George + - For dnstap, do not wakeupnow right there. Instead zero the timer to + force the wakeup callback asap. + +14 January 2022: George + - Merge PR #605: + - Fix EDNS to upstream where the same option could be attached + more than once. + - Add a region to serviced_query for allocations. + +14 January 2022: Wouter + - Add rpz: for-downstream: yesno option, where the RPZ zone is + authoritatively answered for, so the RPZ zone contents can be + checked with DNS queries directed at the RPZ zone. + - For #602: Allow the module-config "subnetcache validator cachedb + iterator". + +11 January 2022: George + - Fix prematurely terminated TCP queries when a reply has the same ID. + +7 January 2022: Wouter + - Merge #600 from pemensik: Change file mode before changing file + owner. + +5 January 2022: Wouter + - Fix for #596: fix that rpz return message is returned and not just + the rcode from the iterator return path. This fixes signal unset RA + after a CNAME. + - Fix unit tests for rpz now that the AA flag returns successfully from + the iterator loop. + - Fix for #596: add unit test for nsdname trigger and signal unset RA. + - Fix for #596: add unit test for nsip trigger and signal unset RA. + - Fix #598: Fix unbound-checkconf fatal error: module conf + 'respip dns64 validator iterator' is not known to work. + - Fix for #596: Fix rpz-signal-nxdomain-ra to work for clientip + triggered operation. + +4 January 2022: Wouter + - Fix #596: unset the RA bit when a query is blocked by an unbound + RPZ nxdomain reply. The option rpz-signal-nxdomain-ra allows to + signal that a domain is externally blocked to clients when it + is blocked with NXDOMAIN by unsetting RA. + - Fix to add test for rpz-signal-nxdomain-ra. + - Fix #596: only unset RA when NXDOMAIN is signalled. + - Fix that RPZ does not set RD flag on replies, it should be copied + from the query. + +22 December 2021: George + - contrib/aaaa-filter-iterator.patch file renewed diff content to + apply cleanly to the current coderepo for the current code version. + +20 December 2021: George + - Fix #591: Unbound-anchor manpage links to non-existent license file. + +13 December 2021: George + - Add missing configure flags for optional features in the + documentation. + - Fix Unbound capitalization in the documentation. + +13 December 2021: Wouter + - Fix to pick up other class local zone information before unlock. + +10 December 2021: George + - Allow local-data for classes other than IN to inherit a configured + local-zone's type if possible, instead of defaulting to type + transparent as per the implicit rule. + +10 December 2021: Wouter + - Add code similar to fix for ldns for tab between strings, for + consistency, the test case was not broken. + +6 December 2021: Wouter + - Merge PR #581 from fobser: Fix -Wmissing-prototypes and -Wshadow + warnings in rpz. + - Fix validator debug output about DS support, print correct algorithm. + +3 December 2021: Wouter + - Fix compile warning for if_nametoindex on windows 64bit. + 1 December 2021: Wouter - configure is set to 1.14.0, and release branch. + This was released as version 1.14.0 on 9 Dec 2021, with the doxygen + fix below included. The main branch continues as 1.14.1. - Fix doc/unbound.doxygen to remove obsolete tag warning. 1 December 2021: George diff --git a/doc/README b/doc/README index 3b8d0cce3170..9d9794d5cfa5 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.14.0 +README for Unbound 1.15.0 Copyright 2007 NLnet Labs http://unbound.net diff --git a/doc/example.conf.in b/doc/example.conf.in index d9f4995e41ef..ab9445fc69f1 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.14.0. +# See unbound.conf(5) man page, version 1.15.0. # # this is a comment. @@ -82,13 +82,13 @@ server: # num-queries-per-thread, or, use as many as the OS will allow you. # outgoing-range: 4096 - # permit unbound to use this port number or port range for + # permit Unbound to use this port number or port range for # making outgoing queries, using an outgoing interface. # outgoing-port-permit: 32768 - # deny unbound the use this of port number or port range for + # deny Unbound the use this of port number or port range for # making outgoing queries, using an outgoing interface. - # Use this to make sure unbound does not grab a UDP port that some + # Use this to make sure Unbound does not grab a UDP port that some # other server on this computer needs. The default is to avoid # IANA-assigned port numbers. # If multiple outgoing-port-permit and outgoing-port-avoid options @@ -254,7 +254,7 @@ server: # use-systemd: no # Detach from the terminal, run in background, "yes" or "no". - # Set the value to "no" when unbound runs as systemd service. + # Set the value to "no" when Unbound runs as systemd service. # do-daemonize: yes # control which clients are allowed to make (recursive) queries @@ -307,7 +307,7 @@ server: # The pid file can be absolute and outside of the chroot, it is # written just prior to performing the chroot and dropping permissions. # - # Additionally, unbound may need to access /dev/urandom (for entropy). + # Additionally, Unbound may need to access /dev/urandom (for entropy). # How to do this is specific to your OS. # # If you give "" no chroot is performed. The path must not end in a /. @@ -442,7 +442,7 @@ server: # Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN # and other denials, using information from previous NXDOMAINs answers. - # aggressive-nsec: no + # aggressive-nsec: yes # Use 0x20-encoded random bits in the query to foil spoof attempts. # This feature is an experimental implementation of draft dns-0x20. @@ -517,7 +517,7 @@ server: # Use several entries, one per domain name, to track multiple zones. # # If you want to perform DNSSEC validation, run unbound-anchor before - # you start unbound (i.e. in the system boot scripts). + # you start Unbound (i.e. in the system boot scripts). # And then enable the auto-trust-anchor-file config item. # Please note usage of unbound-anchor root anchor is at your own risk # and under the terms of our LICENSE (see that file in the source). @@ -585,7 +585,7 @@ server: # val-permissive-mode: no # Ignore the CD flag in incoming queries and refuse them bogus data. - # Enable it if the only clients of unbound are legacy servers (w2008) + # Enable it if the only clients of Unbound are legacy servers (w2008) # that set CD but cannot validate themselves. # ignore-cd-flag: no @@ -615,7 +615,7 @@ server: # Return the original TTL as received from the upstream name server rather # than the decrementing TTL as stored in the cache. Enabling this feature - # does not impact cache expiry, it only changes the TTL unbound embeds in + # does not impact cache expiry, it only changes the TTL Unbound embeds in # responses to queries. Note that enabling this feature implicitly disables # enforcement of the configured minimum and maximum TTL. # serve-original-ttl: no @@ -709,9 +709,9 @@ server: # Add example.com into ipset # local-zone: "example.com" ipset - # If unbound is running service for the local host then it is useful + # If Unbound is running service for the local host then it is useful # to perform lan-wide lookups to the upstream, and unblock the - # long list of local-zones above. If this unbound is a dns server + # long list of local-zones above. If this Unbound is a dns server # for a network of computers, disabled is better and stops information # leakage of local lan information. # unblock-lan-zones: no @@ -860,6 +860,10 @@ server: # 0 blocks when ratelimited, otherwise let 1/xth traffic through # ratelimit-factor: 10 + # Aggressive rate limit when the limit is reached and until demand has + # decreased in a 2 second rate window. + # ratelimit-backoff: no + # override the ratelimit for a specific domain name. # give this setting multiple times to have multiple overrides. # ratelimit-for-domain: example.com 1000 @@ -880,6 +884,10 @@ server: # 0 blocks when ip is ratelimited, otherwise let 1/xth traffic through # ip-ratelimit-factor: 10 + # Aggressive rate limit when the limit is reached and until demand has + # decreased in a 2 second rate window. + # ip-ratelimit-backoff: no + # Limit the number of connections simultaneous from a netblock # tcp-connection-limit: 192.0.2.0/24 12 @@ -889,7 +897,7 @@ server: # the number of servers that will be used in the fast server selection. # fast-server-num: 3 - # Specific options for ipsecmod. unbound needs to be configured with + # Specific options for ipsecmod. Unbound needs to be configured with # --enable-ipsecmod for these to take effect. # # Enable or disable ipsecmod (it still needs to be defined in @@ -901,7 +909,7 @@ server: # listed in module-config (above). # ipsecmod-hook: "./my_executable" # - # When enabled unbound will reply with SERVFAIL if the return value of + # When enabled Unbound will reply with SERVFAIL if the return value of # the ipsecmod-hook is not 0. # ipsecmod-strict: no # @@ -966,10 +974,10 @@ remote-control: # For local sockets this option is ignored, and TLS is not used. # control-use-cert: "yes" - # unbound server key file. + # Unbound server key file. # server-key-file: "@UNBOUND_RUN_DIR@/unbound_server.key" - # unbound server certificate file. + # Unbound server certificate file. # server-cert-file: "@UNBOUND_RUN_DIR@/unbound_server.pem" # unbound-control key file. @@ -1072,8 +1080,9 @@ remote-control: # local-zone: "example.com" refuse # DNSCrypt +# To enable, use --enable-dnscrypt to configure before compiling. # Caveats: -# 1. the keys/certs cannot be produced by unbound. You can use dnscrypt-wrapper +# 1. the keys/certs cannot be produced by Unbound. You can use dnscrypt-wrapper # for this: https://github.com/cofyc/dnscrypt-wrapper/blob/master/README.md#usage # 2. dnscrypt channel attaches to an interface. you MUST set interfaces to # listen on `dnscrypt-port` with the follo0wing snippet: @@ -1092,7 +1101,9 @@ remote-control: # dnscrypt-provider-cert: /path/unbound-conf/keys2/1.cert # CacheDB -# Enable external backend DB as auxiliary cache. Specify the backend name +# External backend DB as auxiliary cache. +# To enable, use --enable-cachedb to configure before compiling. +# Specify the backend name # (default is "testframe", which has no use other than for debugging and # testing) and backend-specific options. The 'cachedb' module must be # included in module-config, just before the iterator module. @@ -1102,6 +1113,7 @@ remote-control: # secret-seed: "default" # # # For "redis" backend: +# # (to enable, use --with-libhiredis to configure before compiling) # # redis server's IP address or host name # redis-server-host: 127.0.0.1 # # redis server's TCP port @@ -1113,7 +1125,9 @@ remote-control: # IPSet # Add specify domain into set via ipset. -# Note: To enable ipset unbound needs to run as root user. +# To enable: +# o use --enable-ipset to configure before compiling; +# o Unbound then needs to run as root user. # ipset: # # set name for ip v4 addresses # name-v4: "list-v4" @@ -1121,9 +1135,10 @@ remote-control: # name-v6: "list-v6" # -# Dnstap logging support, if compiled in. To enable, set the dnstap-enable -# to yes and also some of dnstap-log-..-messages to yes. And select an -# upstream log destination, by socket path, TCP or TLS destination. +# Dnstap logging support, if compiled in by using --enable-dnstap to configure. +# To enable, set the dnstap-enable to yes and also some of +# dnstap-log-..-messages to yes. And select an upstream log destination, by +# socket path, TCP or TLS destination. # dnstap: # dnstap-enable: no # # if set to yes frame streams will be used in bidirectional mode @@ -1136,7 +1151,7 @@ remote-control: # dnstap-tls: yes # # name for authenticating the upstream server. or "" disabled. # dnstap-tls-server-name: "" -# # if "", it uses the cert bundle from the main unbound config. +# # if "", it uses the cert bundle from the main Unbound config. # dnstap-tls-cert-bundle: "" # # key file for client authentication, or "" disabled. # dnstap-tls-client-key-file: "" @@ -1172,4 +1187,6 @@ remote-control: # rpz-cname-override: www.example.org # rpz-log: yes # rpz-log-name: "example policy" +# rpz-signal-nxdomain-ra: no +# for-downstream: no # tags: "example" diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index 6c5217aa04c4..7df4f59d7831 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "libunbound" "3" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -44,7 +44,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.14.0 functions. +\- Unbound DNS validating resolver 1.15.0 functions. .SH "SYNOPSIS" .B #include .LP diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index ddab3d27f120..268640d8155c 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "unbound-anchor" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" @@ -41,7 +41,7 @@ update certificate files. .P It tests if the root anchor file works, and if not, and an update is possible, attempts to update the root anchor using the root update certificate. -It performs a https fetch of root-anchors.xml and checks the results (RFC7958), +It performs a https fetch of root-anchors.xml and checks the results (RFC7958), if all checks are successful, it updates the root anchor file. Otherwise the root anchor file is unchanged. It performs RFC5011 tracking if the DNSSEC information available via the DNS makes that possible. @@ -159,7 +159,7 @@ Or something more suitable for your operational environment. The root keys and update certificate included in this tool are provided for convenience and under the terms of our license (see the LICENSE file in the source distribution or -http://unbound.nlnetlabs.nl/svn/trunk/LICENSE) and might be stale or +https://github.com/NLnetLabs/unbound/blob/master/LICENSE) and might be stale or not suitable to your purpose. .P By running "unbound\-anchor \-l" the keys and certificate that are @@ -185,5 +185,5 @@ Source for the root key information. .I https://data.iana.org/root\-anchors/root\-anchors.p7s Signature on the root key information. .SH "SEE ALSO" -\fIunbound.conf\fR(5), +\fIunbound.conf\fR(5), \fIunbound\fR(8). diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in index 55ebbc070196..ac8782dcde40 100644 --- a/doc/unbound-checkconf.8.in +++ b/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "unbound-checkconf" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" unbound\-checkconf -\- Check unbound configuration file for errors. +\- Check Unbound configuration file for errors. .SH "SYNOPSIS" .B unbound\-checkconf .RB [ \-h ] @@ -21,8 +21,8 @@ unbound\-checkconf .B Unbound\-checkconf checks the configuration file for the \fIunbound\fR(8) -DNS resolver for syntax and other errors. -The config file syntax is described in +DNS resolver for syntax and other errors. +The config file syntax is described in \fIunbound.conf\fR(5). .P The available options are: @@ -34,19 +34,19 @@ Show the version and commandline option help. Print full pathname, with chroot applied to it. Use with the \-o option. .TP .B \-o\fI option -If given, after checking the config file the value of this option is +If given, after checking the config file the value of this option is printed to stdout. For "" (disabled) options an empty line is printed. .TP .I cfgfile -The config file to read with settings for unbound. It is checked. +The config file to read with settings for Unbound. It is checked. If omitted, the config file at the default location is checked. .SH "EXIT CODE" -The unbound\-checkconf program exits with status code 1 on error, +The unbound\-checkconf program exits with status code 1 on error, 0 for a correct config file. .SH "FILES" .TP .I @ub_conf_file@ -unbound configuration file. +Unbound configuration file. .SH "SEE ALSO" -\fIunbound.conf\fR(5), +\fIunbound.conf\fR(5), \fIunbound\fR(8). diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index ab5413c9a0ba..9d0c10e942bd 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "unbound-control" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" unbound-control.8 -- unbound remote control manual .\" @@ -14,15 +14,15 @@ .SH "SYNOPSIS" .B unbound\-control .RB [ \-hq ] -.RB [ \-c +.RB [ \-c .IR cfgfile ] -.RB [ \-s +.RB [ \-s .IR server ] .IR command .SH "DESCRIPTION" .B Unbound\-control performs remote administration on the \fIunbound\fR(8) DNS server. -It reads the configuration file, contacts the unbound server over SSL +It reads the configuration file, contacts the Unbound server over SSL sends the command and displays the result. .P The available options are: @@ -44,8 +44,8 @@ quiet, if the option is given it does not print anything if it works ok. There are several commands that the server understands. .TP .B start -Start the server. Simply execs \fIunbound\fR(8). The unbound executable -is searched for in the \fBPATH\fR set in the environment. It is started +Start the server. Simply execs \fIunbound\fR(8). The Unbound executable +is searched for in the \fBPATH\fR set in the environment. It is started with the config file specified using \fI\-c\fR or the default config file. .TP .B stop @@ -65,8 +65,8 @@ daemon release the file it is logging to. If you are using syslog it will attempt to close and open the syslog (which may not work if chrooted). .TP .B stats -Print statistics. Resets the internal counters to zero, this can be -controlled using the \fBstatistics\-cumulative\fR config statement. +Print statistics. Resets the internal counters to zero, this can be +controlled using the \fBstatistics\-cumulative\fR config statement. Statistics are printed with one [name]: [value] per line. .TP .B stats_noreset @@ -74,7 +74,7 @@ Peek at statistics. Prints them like the \fBstats\fR command does, but does not reset the internal counters to zero. .TP .B status -Display server status. Exit code 3 if not running (the connection to the +Display server status. Exit code 3 if not running (the connection to the port is refused), 1 on error, 0 if running. .TP .B local_zone \fIname\fR \fItype @@ -88,14 +88,14 @@ it. If the zone does not exist, the command succeeds. .B local_data \fIRR data... Add new local data, the given resource record. Like \fBlocal\-data\fR config statement, except for when no covering zone exists. In that case -this remote control command creates a transparent zone with the same +this remote control command creates a transparent zone with the same name as this record. .TP .B local_data_remove \fIname Remove all RR data from local name. If the name already has no items, nothing happens. Often results in NXDOMAIN for the name (in a static zone), -but if the name has become an empty nonterminal (there is still data in -domain names below the removed name), NOERROR nodata answers are the +but if the name has become an empty nonterminal (there is still data in +domain names below the removed name), NOERROR nodata answers are the result for that name. .TP .B local_zones @@ -125,22 +125,22 @@ in old or wrong data returned to clients. Loading data into the cache in this way is supported in order to aid with debugging. .TP .B lookup \fIname -Print to stdout the name servers that would be used to look up the +Print to stdout the name servers that would be used to look up the name specified. .TP .B flush \fIname Remove the name from the cache. Removes the types A, AAAA, NS, SOA, CNAME, DNAME, MX, PTR, SRV and NAPTR. -Because that is fast to do. Other record types can be removed using -.B flush_type -or +Because that is fast to do. Other record types can be removed using +.B flush_type +or .B flush_zone\fR. .TP .B flush_type \fIname\fR \fItype Remove the name, type information from the cache. .TP .B flush_zone \fIname -Remove all information at or below the name from the cache. +Remove all information at or below the name from the cache. The rrsets and key entries are removed so that new lookups will be performed. This needs to walk and inspect the entire cache, and is a slow operation. The entries are set to expired in the implementation of this command (so, @@ -187,7 +187,7 @@ therefore not flushed. The option must end with a ':' and whitespace must be between the option and the value. Some values may not have an effect if set this way, the new values are not written to the config file, not all options are supported. This is different from the set_option call -in libunbound, where all values work because unbound has not been initialized. +in libunbound, where all values work because Unbound has not been initialized. .IP The values that work are: statistics\-interval, statistics\-cumulative, do\-not\-query\-localhost, harden\-short\-bufsize, harden\-large\-queries, @@ -227,36 +227,36 @@ List the local data RRs in use. The resource records are printed. .TP .B insecure_add \fIzone Add a \fBdomain\-insecure\fR for the given zone, like the statement in unbound.conf. -Adds to the running unbound without affecting the cache contents (which may +Adds to the running Unbound without affecting the cache contents (which may still be bogus, use \fBflush_zone\fR to remove it), does not affect the config file. .TP .B insecure_remove \fIzone Removes domain\-insecure for the given zone. .TP .B forward_add \fR[\fI+i\fR] \fIzone addr ... -Add a new forward zone to running unbound. With +i option also adds a +Add a new forward zone to running Unbound. With +i option also adds a \fIdomain\-insecure\fR for the zone (so it can resolve insecurely if you have a DNSSEC root trust anchor configured for other names). The addr can be IP4, IP6 or nameserver names, like \fIforward-zone\fR config in unbound.conf. .TP .B forward_remove \fR[\fI+i\fR] \fIzone -Remove a forward zone from running unbound. The +i also removes a +Remove a forward zone from running Unbound. The +i also removes a \fIdomain\-insecure\fR for the zone. .TP .B stub_add \fR[\fI+ip\fR] \fIzone addr ... -Add a new stub zone to running unbound. With +i option also adds a +Add a new stub zone to running Unbound. With +i option also adds a \fIdomain\-insecure\fR for the zone. With +p the stub zone is set to prime, without it it is set to notprime. The addr can be IP4, IP6 or nameserver names, like the \fIstub-zone\fR config in unbound.conf. .TP .B stub_remove \fR[\fI+i\fR] \fIzone -Remove a stub zone from running unbound. The +i also removes a +Remove a stub zone from running Unbound. The +i also removes a \fIdomain\-insecure\fR for the zone. .TP .B forward \fR[\fIoff\fR | \fIaddr ...\fR ] Setup forwarding mode. Configures if the server should ask other upstream -nameservers, should go to the internet root nameservers itself, or show +nameservers, should go to the internet root nameservers itself, or show the current config. You could pass the nameservers after a DHCP update. .IP Without arguments the current list of addresses used to forward all queries @@ -296,7 +296,7 @@ status, indicating if the zone is expired and current serial number. Reload the auth zone from zonefile. The zonefile is read in overwriting the current contents of the zone in memory. This changes the auth zone contents itself, not the cache contents. Such cache contents exists if -you set unbound to validate with for-upstream yes and that can be cleared +you set Unbound to validate with for-upstream yes and that can be cleared with \fBflush_zone\fR \fIzone\fR. .TP .B auth_zone_transfer \fIzone\fR @@ -336,7 +336,7 @@ Add a list of \fIlocal_data\fR for given view from stdin. Like local_datas. .SH "EXIT CODE" The unbound\-control program exits with status code 1 on error, 0 on success. .SH "SET UP" -The setup requires a self\-signed certificate and private keys for both +The setup requires a self\-signed certificate and private keys for both the server and client. The script \fIunbound\-control\-setup\fR generates these in the default run directory, or with \-d in another directory. If you change the access control permissions on the key files you can decide @@ -350,7 +350,7 @@ If you have not configured a username in unbound.conf, the keys need read permission for the user credentials under which the daemon is started. The script preserves private keys present in the directory. -After running the script as root, turn on \fBcontrol\-enable\fR in +After running the script as root, turn on \fBcontrol\-enable\fR in \fIunbound.conf\fR. .SH "STATISTIC COUNTERS" The \fIstats\fR command shows a number of statistic counters. @@ -417,8 +417,8 @@ Average time it took to answer queries that needed recursive processing. Note th .TP .I threadX.recursion.time.median The median of the time it took to answer queries that needed recursive -processing. The median means that 50% of the user queries were answered in -less than this time. Because of big outliers (usually queries to non +processing. The median means that 50% of the user queries were answered in +less than this time. Because of big outliers (usually queries to non responsive servers), the average can be bigger than the median. This median has been calculated by interpolation from a histogram. .TP @@ -544,32 +544,32 @@ The total number of queries over all threads with query opcode QUERY. Also printed for other opcodes, UPDATE, ... .TP .I num.query.tcp -Number of queries that were made using TCP towards the unbound server. +Number of queries that were made using TCP towards the Unbound server. .TP .I num.query.tcpout -Number of queries that the unbound server made using TCP outgoing towards +Number of queries that the Unbound server made using TCP outgoing towards other servers. .TP .I num.query.tls -Number of queries that were made using TLS towards the unbound server. +Number of queries that were made using TLS towards the Unbound server. These are also counted in num.query.tcp, because TLS uses TCP. .TP .I num.query.tls.resume Number of TLS session resumptions, these are queries over TLS towards -the unbound server where the client negotiated a TLS session resumption key. +the Unbound server where the client negotiated a TLS session resumption key. .TP .I num.query.https -Number of queries that were made using HTTPS towards the unbound server. +Number of queries that were made using HTTPS towards the Unbound server. These are also counted in num.query.tcp and num.query.tls, because HTTPS uses TLS and TCP. .TP .I num.query.ipv6 -Number of queries that were made using IPv6 towards the unbound server. +Number of queries that were made using IPv6 towards the Unbound server. .TP .I num.query.flags.RD The number of queries that had the RD flag set in the header. Also printed for flags QR, AA, TC, RA, Z, AD, CD. -Note that queries with flags QR, AA or TC may have been rejected +Note that queries with flags QR, AA or TC may have been rejected because of that. .TP .I num.query.edns.present @@ -603,7 +603,7 @@ These queries are also included in the num.answer.rcode.NOERROR number. Common for AAAA lookups when an A record exists, and no AAAA. .TP .I num.answer.secure -Number of answers that were secure. The answer validated correctly. +Number of answers that were secure. The answer validated correctly. The AD bit might have been set in some of these answers, where the client signalled (with DO or AD bit in the query) that they were ready to accept the AD bit in the answer. @@ -644,7 +644,7 @@ per delegation point, and their validation status. .I dnscrypt_shared_secret.cache.count The number of items in the shared secret cache. These are precomputed shared secrets for a given client public key/server secret key pair. Shared secrets -are CPU intensive and this cache allows unbound to avoid recomputing the +are CPU intensive and this cache allows Unbound to avoid recomputing the shared secret when multiple dnscrypt queries are sent from the same client. .TP .I dnscrypt_nonce.cache.count @@ -689,11 +689,11 @@ disabled, and cname\-override. .SH "FILES" .TP .I @ub_conf_file@ -unbound configuration file. +Unbound configuration file. .TP .I @UNBOUND_RUN_DIR@ directory with private keys (unbound_server.key and unbound_control.key) and self\-signed certificates (unbound_server.pem and unbound_control.pem). .SH "SEE ALSO" -\fIunbound.conf\fR(5), +\fIunbound.conf\fR(5), \fIunbound\fR(8). diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in index b7d4d2350074..94c8ca3dd569 100644 --- a/doc/unbound-host.1.in +++ b/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "unbound\-host" "1" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" @@ -15,7 +15,7 @@ .RB [ \-C .IR configfile ] .RB [ \-vdhr46D ] -.RB [ \-c +.RB [ \-c .IR class ] .RB [ \-t .IR type ] @@ -28,12 +28,12 @@ .I hostname .SH "DESCRIPTION" .B Unbound\-host -uses the unbound validating resolver to query for the hostname and display -results. With the \fB\-v\fR option it displays validation +uses the Unbound validating resolver to query for the hostname and display +results. With the \fB\-v\fR option it displays validation status: secure, insecure, bogus (security failure). .P By default it reads no configuration file whatsoever. It attempts to reach -the internet root servers. With \fB\-C\fR an unbound config file and with +the internet root servers. With \fB\-C\fR an Unbound config file and with \fB\-r\fR resolv.conf can be read. .P The available options are: @@ -73,7 +73,7 @@ For example \-y "example.com DS 31560 5 1 1CFED84787E6E19CCF9372C1187325972FE546 .TP .B \-D Enables DNSSEC validation. Reads the root anchor from the default configured -root anchor at the default location, \fI@UNBOUND_ROOTKEY_FILE@\fR. +root anchor at the default location, \fI@UNBOUND_ROOTKEY_FILE@\fR. .TP .B \-f \fIkeyfile Reads keys from a file. Every line has a DS or DNSKEY record, in the format @@ -110,9 +110,9 @@ $ unbound\-host \-v \-y "example.com DS 31560 5 1 1CFED84787E6E19CCF9372C1187325 .P $ unbound\-host \-v \-y "example.com DS 31560 5 1 1CFED84787E6E19CCF9372C1187325972FE546CD" 192.0.2.153 .SH "EXIT CODE" -The unbound\-host program exits with status code 1 on error, +The unbound\-host program exits with status code 1 on error, 0 on no error. The data may not be available on exit code 0, exit code 1 means the lookup encountered a fatal error. .SH "SEE ALSO" -\fIunbound.conf\fR(5), +\fIunbound.conf\fR(5), \fIunbound\fR(8). diff --git a/doc/unbound.8.in b/doc/unbound.8.in index 11b02aebcb2e..723f23238b8e 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "unbound" "8" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.14.0. +\- Unbound DNS validating resolver 1.15.0. .SH "SYNOPSIS" .B unbound .RB [ \-h ] @@ -57,7 +57,7 @@ The available options are: Show the version number and commandline option help, and exit. .TP .B \-c\fI cfgfile -Set the config file with settings for unbound to read instead of reading the +Set the config file with settings for Unbound to read instead of reading the file at the default location, @ub_conf_file@. The syntax is described in \fIunbound.conf\fR(5). .TP @@ -70,7 +70,7 @@ or to syslog, but the log messages are printed to stderr all the time. .TP .B \-p Don't use a pidfile. This argument should only be used by supervision -systems which can ensure that only one instance of unbound will run +systems which can ensure that only one instance of Unbound will run concurrently. .TP .B \-v diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 4c144db22ab5..e1cc5c020756 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Dec 9, 2021" "NLnet Labs" "unbound 1.14.0" +.TH "unbound.conf" "5" "Feb 10, 2022" "NLnet Labs" "unbound 1.15.0" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -104,7 +104,7 @@ requestlist statistics are printed for every interval (but can be 0). This is because the median calculation requires data to be present. .TP .B statistics\-cumulative: \fI -If enabled, statistics are cumulative since starting unbound, without clearing +If enabled, statistics are cumulative since starting Unbound, without clearing the statistics counters after logging the statistics. Default is no. .TP .B extended\-statistics: \fI @@ -136,7 +136,7 @@ Same as interface: (for ease of compatibility with nsd.conf). Listen on all addresses on all (current and future) interfaces, detect the source interface on UDP queries and copy them to replies. This is a lot like ip\-transparent, but this option services all interfaces whilst with -ip\-transparent you can select which (future) interfaces unbound provides +ip\-transparent you can select which (future) interfaces Unbound provides service on. This feature is experimental, and needs support in your OS for particular socket options. Default value is no. .TP @@ -154,7 +154,7 @@ sent via a random outgoing interface to counter spoofing. If an IPv6 netblock is specified instead of an individual IPv6 address, outgoing UDP queries will use a randomised source address taken from the netblock to counter spoofing. Requires the IPv6 netblock to be routed to the -host running unbound, and requires OS support for unprivileged non-local binds +host running Unbound, and requires OS support for unprivileged non-local binds (currently only supported on Linux). Several netblocks may be specified with multiple .B outgoing\-interface: @@ -174,7 +174,7 @@ numbers need extra resources from the operating system. For performance a very large value is best, use libevent to make this possible. .TP .B outgoing\-port\-permit: \fI -Permit unbound to open this port or range of ports for use to send queries. +Permit Unbound to open this port or range of ports for use to send queries. A larger number of permitted outgoing ports increases resilience against spoofing attempts. Make sure these ports are not needed by other daemons. By default only ports above 1024 that have not been assigned by IANA are used. @@ -187,8 +187,8 @@ processing starts with the non IANA allocated ports above 1024 in the set of allowed ports. .TP .B outgoing\-port\-avoid: \fI -Do not permit unbound to open this port or range of ports for use to send -queries. Use this to make sure unbound does not grab a port that another +Do not permit Unbound to open this port or range of ports for use to send +queries. Use this to make sure Unbound does not grab a port that another daemon needs. The port is avoided on all outgoing interfaces, both IP4 and IP6. By default only ports above 1024 that have not been assigned by IANA are used. Give a port number or a range of the form "low\-high", without spaces. @@ -289,7 +289,7 @@ If not 0, then set the SO_RCVBUF socket option to get more buffer space on UDP port 53 incoming queries. So that short spikes on busy servers do not drop packets (see counter in netstat \-su). Default is 0 (use system value). Otherwise, the number of bytes to ask for, try -"4m" on a busy server. The OS caps it at a maximum, on linux unbound +"4m" on a busy server. The OS caps it at a maximum, on linux Unbound needs root permission to bypass the limit, or the admin can use sysctl net.core.rmem_max. On BSD change kern.ipc.maxsockbuf in /etc/sysctl.conf. On OpenBSD change header and recompile kernel. On Solaris ndd \-set @@ -302,7 +302,7 @@ in answer traffic, otherwise 'send: resource temporarily unavailable' can get logged, the buffer overrun is also visible by netstat \-su. Default is 0 (use system value). Specify the number of bytes to ask for, try "4m" on a very busy server. The OS caps it at a maximum, on -linux unbound needs root permission to bypass the limit, or the admin +linux Unbound needs root permission to bypass the limit, or the admin can use sysctl net.core.wmem_max. On BSD, Solaris changes are similar to so\-rcvbuf. .TP @@ -319,18 +319,18 @@ At extreme load it could be better to turn it off to distribute the queries evenly, reported for Linux systems (4.4.x). .TP .B ip\-transparent: \fI -If yes, then use IP_TRANSPARENT socket option on sockets where unbound +If yes, then use IP_TRANSPARENT socket option on sockets where Unbound is listening for incoming traffic. Default no. Allows you to bind to non\-local interfaces. For example for non\-existent IP addresses that are going to exist later on, with host failover configuration. This is a lot like interface\-automatic, but that one services all interfaces -and with this option you can select which (future) interfaces unbound -provides service on. This option needs unbound to be started with root +and with this option you can select which (future) interfaces Unbound +provides service on. This option needs Unbound to be started with root permissions on some systems. The option uses IP_BINDANY on FreeBSD systems and SO_BINDANY on OpenBSD systems. .TP .B ip\-freebind: \fI -If yes, then use IP_FREEBIND socket option on sockets where unbound +If yes, then use IP_FREEBIND socket option on sockets where Unbound is listening to incoming traffic. Default no. Allows you to bind to IP addresses that are nonlocal or do not exist, like when the network interface or IP address is down. Exists only on Linux, where the similar @@ -560,7 +560,7 @@ service. Can list multiple, each on a new statement. .TP .B tls-session-ticket-keys: \fI If not "", lists files with 80 bytes of random contents that are used to -perform TLS session resumption for clients using the unbound server. +perform TLS session resumption for clients using the Unbound server. These files contain the secret key for the TLS session tickets. First key use to encrypt and decrypt TLS session tickets. Other keys use to decrypt only. With this you can roll over to new keys, @@ -642,8 +642,8 @@ Enable or disable systemd socket activation. Default is no. .TP .B do\-daemonize: \fI -Enable or disable whether the unbound server forks into the background as -a daemon. Set the value to \fIno\fR when unbound runs as systemd service. +Enable or disable whether the Unbound server forks into the background as +a daemon. Set the value to \fIno\fR when Unbound runs as systemd service. Default is yes. .TP .B tcp\-connection\-limit: \fI @@ -670,7 +670,7 @@ what almost all clients need). Nonrecursive queries are refused. .IP The \fIallow\fR action does allow nonrecursive queries to access the local\-data that is configured. The reason is that this does not involve -the unbound server recursive lookup algorithm, and static data is served +the Unbound server recursive lookup algorithm, and static data is served in the reply. This supports normal operations where nonrecursive queries are made for the authoritative data. For nonrecursive queries any replies from the dynamic cache are refused. @@ -742,7 +742,7 @@ to chroot and dropping permissions. This allows the pidfile to be Unbound is not able to remove the pidfile after termination when it is located outside of the chroot directory. .IP -Additionally, unbound may need to access /dev/urandom (for entropy) +Additionally, Unbound may need to access /dev/urandom (for entropy) from inside the chroot. .IP If given a chroot is done to the given directory. By default chroot is @@ -776,7 +776,7 @@ The logfile is reopened (for append) when the config file is reread, on SIGHUP. .TP .B use\-syslog: \fI -Sets unbound to send log messages to the syslogd, using +Sets Unbound to send log messages to the syslogd, using \fIsyslog\fR(3). The log facility LOG_DAEMON is used, with identity "unbound". The logfile setting is overridden when use\-syslog is turned on. @@ -786,7 +786,7 @@ The default is to log to syslog. If "" is given (default), then the name of the executable, usually "unbound" is used to report to the log. Enter a string to override it with that, which is useful on systems that run more than one instance of -unbound, with different configurations, so that the logs can be easily +Unbound, with different configurations, so that the logs can be easily distinguished against. .TP .B log\-time\-ascii: \fI @@ -874,12 +874,12 @@ with ascii_ prefix and then an ascii string. If enabled trustanchor.unbound queries are refused. .TP .B target\-fetch\-policy: \fI<"list of numbers"> -Set the target fetch policy used by unbound to determine if it should fetch +Set the target fetch policy used by Unbound to determine if it should fetch nameserver target addresses opportunistically. The policy is described per dependency depth. .IP The number of values determines the maximum dependency depth -that unbound will pursue in answering a query. +that Unbound will pursue in answering a query. A value of \-1 means to fetch all targets opportunistically for that dependency depth. A value of 0 means to fetch on demand only. A positive value fetches that many targets opportunistically. @@ -973,7 +973,7 @@ This option only has effect when qname-minimisation is enabled. Default is no. .B aggressive\-nsec: \fI Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN and other denials, using information from previous NXDOMAINs answers. -Default is no. It helps to reduce the query rate towards targets that get +Default is yes. It helps to reduce the query rate towards targets that get a very high nonexistent name lookup rate. .TP .B private\-address: \fI @@ -1030,7 +1030,7 @@ a little more CPU. Also if the cache is set to 0, it is no use. Default is no. .TP .B deny\-any: \fI If yes, deny queries of type ANY with an empty response. Default is no. -If disabled, unbound responds with a short list of resource records if some +If disabled, Unbound responds with a short list of resource records if some can be found in the cache and makes the upstream type ANY query if there are none. .TP @@ -1090,7 +1090,7 @@ File with trust anchor for one zone, which is tracked with RFC5011 probes. The probes are run several times per month, thus the machine must be online frequently. The initial file can be one with contents as described in \fBtrust\-anchor\-file\fR. The file is written to when the anchor is updated, -so the unbound user must have write permission. Write permission to the file, +so the Unbound user must have write permission. Write permission to the file, but also to the directory it is in (to create a temporary file, which is necessary to deal with filesystem full events), it must also be inside the chroot (if that is used). @@ -1176,7 +1176,7 @@ the verbosity setting. Default is 0, off. At 1, for every user query that fails a line is printed to the logs. This way you can monitor what happens with validation. Use a diagnosis tool, such as dig or drill, to find out why validation is failing for these queries. At 2, not only -the query that failed is printed but also the reason why unbound thought +the query that failed is printed but also the reason why Unbound thought it was wrong and which server sent the faulty data. .TP .B val\-permissive\-mode: \fI @@ -1188,15 +1188,15 @@ is set in replies. Also logging is performed as for full validation. The default value is "no". .TP .B ignore\-cd\-flag: \fI -Instruct unbound to ignore the CD flag from clients and refuse to +Instruct Unbound to ignore the CD flag from clients and refuse to return bogus answers to them. Thus, the CD (Checking Disabled) flag does not disable checking any more. This is useful if legacy (w2008) servers that set the CD flag but cannot validate DNSSEC themselves are -the clients, and then unbound provides them with DNSSEC protection. +the clients, and then Unbound provides them with DNSSEC protection. The default value is "no". .TP .B serve\-expired: \fI -If enabled, unbound attempts to serve old responses from cache with a +If enabled, Unbound attempts to serve old responses from cache with a TTL of \fBserve\-expired\-reply\-ttl\fR in the response without waiting for the actual resolution to finish. The actual resolution answer ends up in the cache later on. Default is "no". @@ -1227,14 +1227,14 @@ RFC 8767 is 1800. Setting this to 0 will disable this behavior. Default is 0. .TP .B serve\-original\-ttl: \fI -If enabled, unbound will always return the original TTL as received from +If enabled, Unbound will always return the original TTL as received from the upstream name server rather than the decrementing TTL as -stored in the cache. This feature may be useful if unbound serves as a -front-end to a hidden authoritative name server. Enabling this feature does -not impact cache expiry, it only changes the TTL unbound embeds in responses to +stored in the cache. This feature may be useful if Unbound serves as a +front-end to a hidden authoritative name server. Enabling this feature does +not impact cache expiry, it only changes the TTL Unbound embeds in responses to queries. Note that enabling this feature implicitly disables enforcement of -the configured minimum and maximum TTL, as it is assumed users who enable this -feature do not want unbound to change the TTL obtained from an upstream server. +the configured minimum and maximum TTL, as it is assumed users who enable this +feature do not want Unbound to change the TTL obtained from an upstream server. Thus, the values set using \fBcache\-min\-ttl\fR and \fBcache\-max\-ttl\fR are ignored. Default is "no". @@ -1295,11 +1295,11 @@ or gigabytes (1024*1024 bytes in a megabyte). .TP .B unblock\-lan\-zones: \fI Default is disabled. If enabled, then for private address space, -the reverse lookups are no longer filtered. This allows unbound when +the reverse lookups are no longer filtered. This allows Unbound when running as dns service on a host where it provides service for that host, to put out all of the queries for the 'lan' upstream. When enabled, only localhost, 127.0.0.1 reverse and ::1 reverse zones are configured -with default local zones. Disable the option when unbound is running +with default local zones. Disable the option when Unbound is running as a (DHCP-) DNS network resolver for a group of machines, where such lookups should be filtered (RFC compliance), this also stops potential data leakage about the local network to the upstream DNS servers. @@ -1403,7 +1403,7 @@ Breaks out of that view and moves towards the global local zones for answer to the query. If the view first is no, it'll resolve normally. If view first is enabled, it'll break perform that step and check the global answers. For when the view has view specific overrides but some zone has to be -answered from global local zone contents. +answered from global local zone contents. .TP 10 \h'5'\fInodefault\fR Used to turn off default contents for AS112 zones. The other types @@ -1647,8 +1647,9 @@ query names, but not spoofed reflection floods. Cached responses are not ratelimited by this setting. The zone of the query is determined by examining the nameservers for it, the zone name is used to keep track of the rate. For example, 1000 may be a suitable value to stop the server from being -overloaded with random names, and keeps unbound from sending traffic to the -nameservers for those zones. +overloaded with random names, and keeps Unbound from sending traffic to the +nameservers for those zones. Configured forwarders are excluded from +ratelimiting. .TP 5 .B ratelimit\-size: \fI Give the size of the data structure in which the current ongoing rates are @@ -1670,6 +1671,15 @@ This can make ordinary queries complete (if repeatedly queried for), and enter the cache, whilst also mitigating the traffic flow by the factor given. .TP 5 +.B ratelimit\-backoff: \fI +If enabled, the ratelimit is treated as a hard failure instead of the default +maximum allowed constant rate. When the limit is reached, traffic is +ratelimited and demand continues to be kept track of for a 2 second rate +window. No traffic is allowed, except for ratelimit\-factor, until demand +decreases below the configured ratelimit for a 2 second rate window. Useful to +set ratelimit to a suspicious rate to aggressively limit unusually high +traffic. Default is off. +.TP 5 .B ratelimit\-for\-domain: \fI Override the global ratelimit for an exact match domain name with the listed number. You can give this for any number of names. For example, for @@ -1686,7 +1696,7 @@ to use different settings for a top\-level\-domain and subdomains. A value of 0 will disable ratelimiting for domain names that end in this name. .TP 5 .B ip\-ratelimit: \fI -Enable global ratelimiting of queries accepted per ip address. +Enable global ratelimiting of queries accepted per IP address. If 0, the default, it is disabled. This option is experimental at this time. The ratelimit is in queries per second that are allowed. More queries are completely dropped and will not receive a reply, SERVFAIL or otherwise. @@ -1713,8 +1723,17 @@ This can make ordinary queries complete (if repeatedly queried for), and enter the cache, whilst also mitigating the traffic flow by the factor given. .TP 5 +.B ip\-ratelimit\-backoff: \fI +If enabled, the ratelimit is treated as a hard failure instead of the default +maximum allowed constant rate. When the limit is reached, traffic is +ratelimited and demand continues to be kept track of for a 2 second rate +window. No traffic is allowed, except for ip\-ratelimit\-factor, until demand +decreases below the configured ratelimit for a 2 second rate window. Useful to +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 +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. .TP 5 @@ -1747,7 +1766,7 @@ In the .B remote\-control: clause are the declarations for the remote control facility. If this is enabled, the \fIunbound\-control\fR(8) utility can be used to send -commands to the running unbound server. The server uses these clauses +commands to the running Unbound server. The server uses these clauses to setup TLSv1 security for the connection. The \fIunbound\-control\fR(8) utility also reads the \fBremote\-control\fR section for options. To setup the correct self\-signed certificates use the @@ -1767,7 +1786,7 @@ the server for the change to take effect. .IP If you set it to an absolute path, a local socket is used. The local socket does not use the certificates and keys, so those files need not be present. -To restrict access, unbound sets permissions on the file to the user and +To restrict access, Unbound sets permissions on the file to the user and group that is configured, the access bits are set to allow the group members to access the control socket file. Put users that need to access the socket in the that group. To restrict access further, create a directory to put @@ -1787,12 +1806,12 @@ and the value of this option is ignored. .B server\-key\-file: \fI Path to the server private key, by default unbound_server.key. This file is generated by the \fIunbound\-control\-setup\fR utility. -This file is used by the unbound server, but not by \fIunbound\-control\fR. +This file is used by the Unbound server, but not by \fIunbound\-control\fR. .TP 5 .B server\-cert\-file: \fI Path to the server self signed certificate, by default unbound_server.pem. This file is generated by the \fIunbound\-control\-setup\fR utility. -This file is used by the unbound server, and also by \fIunbound\-control\fR. +This file is used by the Unbound server, and also by \fIunbound\-control\fR. .TP 5 .B control\-key\-file: \fI Path to the control client private key, by default unbound_control.key. @@ -1810,24 +1829,24 @@ There may be multiple .B stub\-zone: clauses. Each with a name: and zero or more hostnames or IP addresses. For the stub zone this list of nameservers is used. Class IN is assumed. -The servers should be authority servers, not recursors; unbound performs +The servers should be authority servers, not recursors; Unbound performs the recursive processing itself for stub zones. .P The stub zone can be used to configure authoritative data to be used by the resolver that cannot be accessed using the public internet servers. This is useful for company\-local data or private zones. Setup an authoritative server on a different host (or different port). Enter a config -entry for unbound with +entry for Unbound with .B stub\-addr: . -The unbound resolver can then access the data, without referring to the +The Unbound resolver can then access the data, without referring to the public internet for it. .P This setup allows DNSSEC signed zones to be served by that authoritative server, in which case a trusted key entry with the public key -can be put in config, so that unbound can validate the data and set the AD +can be put in config, so that Unbound can validate the data and set the AD bit on replies for the private zone (authoritative servers do not set the -AD bit). This setup makes unbound capable of answering queries for the +AD bit). This setup makes Unbound capable of answering queries for the private zone, and can even set the AD bit ('authentic'), but the AA ('authoritative') bit is not set on these replies. .P @@ -1835,20 +1854,26 @@ Consider adding \fBserver:\fR statements for \fBdomain\-insecure:\fR and for \fBlocal\-zone:\fI name nodefault\fR for the zone if it is a locally served zone. The insecure clause stops DNSSEC from invalidating the zone. The local zone nodefault (or \fItransparent\fR) clause makes the -(reverse\-) zone bypass unbound's filtering of RFC1918 zones. +(reverse\-) zone bypass Unbound's filtering of RFC1918 zones. .TP .B name: \fI Name of the stub zone. This is the full domain name of the zone. .TP .B stub\-host: \fI Name of stub zone nameserver. Is itself resolved before it is used. +To use a nondefault port for DNS communication append '@' with the port number. +If tls is enabled, then you can append a '#' and a name, then it'll check the +tls authentication certificates with that name. If you combine the '@' +and '#', the '@' comes first. If only '#' is used the default port is the +configured tls\-port. .TP .B stub\-addr: \fI IP address of stub zone nameserver. Can be IP 4 or IP 6. To use a nondefault port for DNS communication append '@' with the port number. -If tls is enabled, then you can append a '#' and a name, then it'll check -the tls authentication certificates with that name. If you combine -the '@' and '#', the '@' comes first. +If tls is enabled, then you can append a '#' and a name, then it'll check the +tls authentication certificates with that name. If you combine the '@' +and '#', the '@' comes first. If only '#' is used the default port is the +configured tls\-port. .TP .B stub\-prime: \fI This option is by default no. If enabled it performs NS set priming, @@ -1884,10 +1909,10 @@ clauses. Each with a \fBname:\fR and zero or more hostnames or IP addresses. For the forward zone this list of nameservers is used to forward the queries to. The servers listed as \fBforward\-host:\fR and \fBforward\-addr:\fR have to handle further recursion for the query. Thus, -those servers are not authority servers, but are (just like unbound is) -recursive servers too; unbound does not perform recursion itself for the +those servers are not authority servers, but are (just like Unbound is) +recursive servers too; Unbound does not perform recursion itself for the forward zone, it lets the remote server do it. Class IN is assumed. -CNAMEs are chased by unbound itself, asking the remote server for every +CNAMEs are chased by Unbound itself, asking the remote server for every name in the indirection chain, to protect the local cache from illegal indirect referenced items. A forward\-zone entry with name "." and a forward\-addr target will @@ -1899,13 +1924,19 @@ Name of the forward zone. This is the full domain name of the zone. .TP .B forward\-host: \fI Name of server to forward to. Is itself resolved before it is used. +To use a nondefault port for DNS communication append '@' with the port number. +If tls is enabled, then you can append a '#' and a name, then it'll check the +tls authentication certificates with that name. If you combine the '@' +and '#', the '@' comes first. If only '#' is used the default port is the +configured tls\-port. .TP .B forward\-addr: \fI IP address of server to forward to. Can be IP 4 or IP 6. To use a nondefault port for DNS communication append '@' with the port number. -If tls is enabled, then you can append a '#' and a name, then it'll check -the tls authentication certificates with that name. If you combine -the '@' and '#', the '@' comes first. +If tls is enabled, then you can append a '#' and a name, then it'll check the +tls authentication certificates with that name. If you combine the '@' +and '#', the '@' comes first. If only '#' is used the default port is the +configured tls\-port. .IP At high verbosity it logs the TLS certificate, with TLS enabled. If you leave out the '#' and auth name from the forward\-addr, any @@ -1913,7 +1944,7 @@ name is accepted. The cert must also match a CA from the tls\-cert\-bundle. .TP .B forward\-first: \fI If a forwarded query is met with a SERVFAIL error, and this option is -enabled, unbound will fall back to normal recursive resolution for this +enabled, Unbound will fall back to normal recursive resolution for this query as if no query forwarding had been specified. The default is "no". .TP .B forward\-tls\-upstream: \fI @@ -1939,7 +1970,7 @@ have a \fBname:\fR. There can be multiple ones, by listing multiple auth\-zone The authority zone with the name closest to the name looked up is used. Authority zones are processed after \fBlocal\-zones\fR and before cache (\fBfor\-downstream:\fR \fIyes\fR), and when used in this manner -make unbound respond like an authority server. Authority zones are also +make Unbound respond like an authority server. Authority zones are also processed after cache, just before going to the network to fetch information for recursion (\fBfor\-upstream:\fR \fIyes\fR), and when used in this manner provide a local copy of an authority server that speeds up @@ -2000,25 +2031,25 @@ file is downloaded when notified. The primaries from primary: statements are allowed notify by default. .TP .B fallback\-enabled: \fI -Default no. If enabled, unbound falls back to querying the internet as +Default no. If enabled, Unbound falls back to querying the internet as a resolver for this zone when lookups fail. For example for DNSSEC validation failures. .TP .B for\-downstream: \fI -Default yes. If enabled, unbound serves authority responses to -downstream clients for this zone. This option makes unbound behave, for +Default yes. If enabled, Unbound serves authority responses to +downstream clients for this zone. This option makes Unbound behave, for the queries with names in this zone, like one of the authority servers for -that zone. Turn it off if you want unbound to provide recursion for the +that zone. Turn it off if you want Unbound to provide recursion for the zone but have a local copy of zone data. If for\-downstream is no and -for\-upstream is yes, then unbound will DNSSEC validate the contents of the +for\-upstream is yes, then Unbound will DNSSEC validate the contents of the zone before serving the zone contents to clients and store validation results in the cache. .TP .B for\-upstream: \fI -Default yes. If enabled, unbound fetches data from this data collection +Default yes. If enabled, Unbound fetches data from this data collection for answering recursion queries. Instead of sending queries over the internet to the authority servers for this zone, it'll fetch the data directly from -the zone data. Turn it on when you want unbound to provide recursion for +the zone data. Turn it on when you want Unbound to provide recursion for downstream clients, and use the zone data as a local copy to speed up lookups. .TP .B zonemd\-check: \fI @@ -2042,14 +2073,14 @@ a ZONEMD is always a failure, also for nonDNSSEC signed zones. .TP .B zonefile: \fI The filename where the zone is stored. If not given then no zonefile is used. -If the file does not exist or is empty, unbound will attempt to fetch zone +If the file does not exist or is empty, Unbound will attempt to fetch zone data (eg. from the primary servers). .SS "View Options" .LP There may be multiple .B view: clauses. Each with a \fBname:\fR and zero or more \fBlocal\-zone\fR and -\fBlocal\-data\fR elements. Views can also contain view\-first, +\fBlocal\-data\fR elements. Views can also contain view\-first, response\-ip, response\-ip\-data and local\-data\-ptr elements. View can be mapped to requests by specifying the view name in an \fBaccess\-control\-view\fR element. Options from matching @@ -2142,9 +2173,9 @@ underneath the name given. The .B dnscrypt: clause gives the settings of the dnscrypt channel. While those options are -available, they are only meaningful if unbound was compiled with +available, they are only meaningful if Unbound was compiled with \fB\-\-enable\-dnscrypt\fR. -Currently certificate and secret/public keys cannot be generated by unbound. +Currently certificate and secret/public keys cannot be generated by Unbound. You can use dnscrypt-wrapper to generate those: https://github.com/cofyc/\ dnscrypt-wrapper/blob/master/README.md#usage .TP @@ -2263,7 +2294,7 @@ of 0 is always accepted. Default is 0. .TP .B min\-client\-subnet\-ipv4: \fI\fR Specifies the minimum prefix length of the IPv4 source mask we are willing to -accept in queries. Shorter source masks result in REFUSED answers. Source mask +accept in queries. Shorter source masks result in REFUSED answers. Source mask of 0 is always accepted. Default is 0. .TP .B max\-ecs\-tree\-size\-ipv4: \fI\fR @@ -2276,12 +2307,13 @@ This number applies for each qname/qclass/qtype tuple. Defaults to 100. .SS "Opportunistic IPsec Support Module Options" .LP The IPsec module must be configured in the \fBmodule\-config:\fR "ipsecmod -validator iterator" directive and be compiled into the daemon to be -enabled. These settings go in the \fBserver:\fR section. +validator iterator" directive and be compiled into Unbound by using +\fB\-\-enable\-ipsecmod\fR to be enabled. +These settings go in the \fBserver:\fR section. .LP -When unbound receives an A/AAAA query that is not in the cache and finds a +When Unbound receives an A/AAAA query that is not in the cache and finds a valid answer, it will withhold returning the answer and instead will generate -an IPSECKEY subquery for the same domain name. If an answer was found, unbound +an IPSECKEY subquery for the same domain name. If an answer was found, Unbound will call an external hook passing the following arguments: .TP 10 \h'5'\fIQNAME\fR @@ -2310,19 +2342,19 @@ relevant for opportunistic IPsec. .B ipsecmod-enabled: \fI\fR Specifies whether the IPsec module is enabled or not. The IPsec module still needs to be defined in the \fBmodule\-config:\fR directive. This option -facilitates turning on/off the module without restarting/reloading unbound. +facilitates turning on/off the module without restarting/reloading Unbound. Defaults to yes. .TP .B ipsecmod\-hook: \fI\fR -Specifies the external hook that unbound will call with \fIsystem\fR(3). The +Specifies the external hook that Unbound will call with \fIsystem\fR(3). The file can be specified as an absolute/relative path. The file needs the proper -permissions to be able to be executed by the same user that runs unbound. It +permissions to be able to be executed by the same user that runs Unbound. It must be present when the IPsec module is defined in the \fBmodule\-config:\fR directive. .TP .B ipsecmod-strict: \fI\fR -If enabled unbound requires the external hook to return a success value of 0. -Failing to do so unbound will reply with SERVFAIL. The A/AAAA answer will also +If enabled Unbound requires the external hook to return a success value of 0. +Failing to do so Unbound will reply with SERVFAIL. The A/AAAA answer will also not be cached. Defaults to no. .TP .B ipsecmod\-max-ttl: \fI\fR @@ -2330,7 +2362,7 @@ Time to live maximum for A/AAAA cached records after calling the external hook. Defaults to 3600. .TP .B ipsecmod-ignore-bogus: \fI\fR -Specifies the behaviour of unbound when the IPSECKEY answer is bogus. If set +Specifies the behaviour of Unbound when the IPSECKEY answer is bogus. If set to yes, the hook will be called and the A/AAAA answer will be returned to the client. If set to no, the hook will not be called and the answer to the A/AAAA query will be SERVFAIL. Mainly used for testing. Defaults to no. @@ -2357,7 +2389,7 @@ If Unbound cannot even find an answer in the backend, it resolves the query as usual, and stores the answer in the backend. .P This module interacts with the \fBserve\-expired\-*\fR options and will reply -with expired data if unbound is configured for that. Currently the use +with expired data if Unbound is configured for that. Currently the use of \fBserve\-expired\-client\-timeout:\fR and \fBserve\-expired\-reply\-ttl:\fR is not consistent for data originating from the external cache as these will result in a reply with 0 TTL without trying to @@ -2436,16 +2468,17 @@ re-establish a new connection later. This option defaults to 100 milliseconds. .TP .B redis-expire-records: \fI -If Redis record expiration is enabled. If yes, unbound sets timeout for Redis +If Redis record expiration is enabled. If yes, Unbound sets timeout for Redis records so that Redis can evict keys that have expired automatically. If -unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0, +Unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0, this option is internally reverted to "no". Redis SETEX support is required for this option (Redis >= 2.0.0). This option defaults to no. .SS DNSTAP Logging Options -DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section. +DNSTAP support, when compiled in by using \fB\-\-enable\-dnstap\fR, is enabled +in the \fBdnstap:\fR section. This starts an extra thread (when compiled with threading) that writes -the log information to the destination. If unbound is compiled without +the log information to the destination. If Unbound is compiled without threading it does not spawn a thread, but connects per-process to the destination. .TP @@ -2503,19 +2536,19 @@ Default is "". .TP .B dnstap-log-resolver-query-messages: \fI Enable to log resolver query messages. Default is no. -These are messages from unbound to upstream servers. +These are messages from Unbound to upstream servers. .TP .B dnstap-log-resolver-response-messages: \fI Enable to log resolver response messages. Default is no. -These are replies from upstream servers to unbound. +These are replies from upstream servers to Unbound. .TP .B dnstap-log-client-query-messages: \fI Enable to log client query messages. Default is no. -These are client queries to unbound. +These are client queries to Unbound. .TP .B dnstap-log-client-response-messages: \fI Enable to log client response messages. Default is no. -These are responses from unbound to clients. +These are responses from Unbound to clients. .TP .B dnstap-log-forwarder-query-messages: \fI Enable to log forwarder query messages. Default is no. @@ -2614,7 +2647,7 @@ allowed notify by default. .TP .B zonefile: \fI The filename where the zone is stored. If not given then no zonefile is used. -If the file does not exist or is empty, unbound will attempt to fetch zone +If the file does not exist or is empty, Unbound will attempt to fetch zone data (eg. from the primary servers). .TP .B rpz\-action\-override: \fI @@ -2631,6 +2664,17 @@ Log all applied RPZ actions for this RPZ zone. Default is no. .B rpz\-log\-name: \fI Specify a string to be part of the log line, for easy referencing. .TP +.B rpz\-signal\-nxdomain\-ra: \fI +Signal when a query is blocked by the RPZ with NXDOMAIN with an unset RA flag. +This allows certain clients, like dnsmasq, to infer that the domain is +externally blocked. Default is no. +.TP +.B for\-downstream: \fI +If enabled the zone is authoritatively answered for and queries for the RPZ +zone information are answered to downstream clients. This is useful for +monitoring scripts, that can then access the SOA information to check if +the rpz information is up to date. Default is no. +.TP .B tags: \fI Limit the policies from this RPZ clause to clients with a matching tag. Tags need to be defined in \fBdefine\-tag\fR and can be assigned to client addresses @@ -2671,7 +2715,7 @@ server: .SH "FILES" .TP .I @UNBOUND_RUN_DIR@ -default unbound working directory. +default Unbound working directory. .TP .I @UNBOUND_CHROOT_DIR@ default @@ -2679,13 +2723,13 @@ default location. .TP .I @ub_conf_file@ -unbound configuration file. +Unbound configuration file. .TP .I @UNBOUND_PIDFILE@ -default unbound pidfile with process ID of the running daemon. +default Unbound pidfile with process ID of the running daemon. .TP .I unbound.log -unbound log file. default is to log to +Unbound log file. default is to log to \fIsyslog\fR(3). .SH "SEE ALSO" \fIunbound\fR(8), diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c index bdac42b0ddb3..80148e810890 100644 --- a/iterator/iter_delegpt.c +++ b/iterator/iter_delegpt.c @@ -75,7 +75,8 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) copy->ssl_upstream = dp->ssl_upstream; copy->tcp_upstream = dp->tcp_upstream; for(ns = dp->nslist; ns; ns = ns->next) { - if(!delegpt_add_ns(copy, region, ns->name, ns->lame)) + if(!delegpt_add_ns(copy, region, ns->name, ns->lame, + ns->tls_auth_name, ns->port)) return NULL; copy->nslist->resolved = ns->resolved; copy->nslist->got4 = ns->got4; @@ -84,8 +85,8 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) copy->nslist->done_pside6 = ns->done_pside6; } for(a = dp->target_list; a; a = a->next_target) { - if(!delegpt_add_addr(copy, region, &a->addr, a->addrlen, - a->bogus, a->lame, a->tls_auth_name, NULL)) + if(!delegpt_add_addr(copy, region, &a->addr, a->addrlen, + a->bogus, a->lame, a->tls_auth_name, -1, NULL)) return NULL; } return copy; @@ -102,7 +103,7 @@ delegpt_set_name(struct delegpt* dp, struct regional* region, uint8_t* name) int delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name, - uint8_t lame) + uint8_t lame, char* tls_auth_name, int port) { struct delegpt_ns* ns; size_t len; @@ -126,6 +127,14 @@ delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name, ns->lame = lame; ns->done_pside4 = 0; ns->done_pside6 = 0; + ns->port = port; + if(tls_auth_name) { + ns->tls_auth_name = regional_strdup(region, tls_auth_name); + if(!ns->tls_auth_name) + return 0; + } else { + ns->tls_auth_name = NULL; + } return ns->name != 0; } @@ -159,9 +168,9 @@ delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, return NULL; } -int -delegpt_add_target(struct delegpt* dp, struct regional* region, - uint8_t* name, size_t namelen, struct sockaddr_storage* addr, +int +delegpt_add_target(struct delegpt* dp, struct regional* region, + uint8_t* name, size_t namelen, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions) { struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen); @@ -177,17 +186,22 @@ delegpt_add_target(struct delegpt* dp, struct regional* region, if(ns->got4 && ns->got6) ns->resolved = 1; } - return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL, - additions); + log_assert(ns->port>0); + return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, + ns->tls_auth_name, ns->port, additions); } -int -delegpt_add_addr(struct delegpt* dp, struct regional* region, - struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, - uint8_t lame, char* tls_auth_name, int* additions) +int +delegpt_add_addr(struct delegpt* dp, struct regional* region, + struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, + uint8_t lame, char* tls_auth_name, int port, int* additions) { struct delegpt_addr* a; log_assert(!dp->dp_type_mlc); + if(port != -1) { + log_assert(port>0); + sockaddr_store_port(addr, addrlen, port); + } /* check for duplicates */ if((a = delegpt_find_addr(dp, addr, addrlen))) { if(bogus) @@ -412,7 +426,8 @@ delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region, (size_t)sldns_read_uint16(nsdata->rr_data[i])) continue; /* bad format */ /* add rdata of NS (= wirefmt dname), skip rdatalen bytes */ - if(!delegpt_add_ns(dp, region, nsdata->rr_data[i]+2, lame)) + if(!delegpt_add_ns(dp, region, nsdata->rr_data[i]+2, lame, + NULL, UNBOUND_DNS_PORT)) return 0; } return 1; @@ -429,7 +444,6 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, log_assert(!dp->dp_type_mlc); memset(&sa, 0, len); sa.sin_family = AF_INET; - sa.sin_port = (in_port_t)htons(UNBOUND_DNS_PORT); for(i=0; icount; i++) { if(d->rr_len[i] != 2 + INET_SIZE) continue; @@ -453,7 +467,6 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, log_assert(!dp->dp_type_mlc); memset(&sa, 0, len); sa.sin6_family = AF_INET6; - sa.sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT); for(i=0; icount; i++) { if(d->rr_len[i] != 2 + INET6_SIZE) /* rdatalen + len of IP6 */ continue; @@ -555,6 +568,7 @@ void delegpt_free_mlc(struct delegpt* dp) while(n) { nn = n->next; free(n->name); + free(n->tls_auth_name); free(n); n = nn; } @@ -577,7 +591,8 @@ int delegpt_set_name_mlc(struct delegpt* dp, uint8_t* name) return (dp->name != NULL); } -int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame) +int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame, + char* tls_auth_name, int port) { struct delegpt_ns* ns; size_t len; @@ -604,14 +619,30 @@ int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame) ns->lame = (uint8_t)lame; ns->done_pside4 = 0; ns->done_pside6 = 0; + ns->port = port; + if(tls_auth_name) { + ns->tls_auth_name = strdup(tls_auth_name); + if(!ns->tls_auth_name) { + free(ns->name); + free(ns); + return 0; + } + } else { + ns->tls_auth_name = NULL; + } return 1; } int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name) + socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name, + int port) { struct delegpt_addr* a; log_assert(dp->dp_type_mlc); + if(port != -1) { + log_assert(port>0); + sockaddr_store_port(addr, addrlen, port); + } /* check for duplicates */ if((a = delegpt_find_addr(dp, addr, addrlen))) { if(bogus) @@ -664,7 +695,9 @@ int delegpt_add_target_mlc(struct delegpt* dp, uint8_t* name, size_t namelen, if(ns->got4 && ns->got6) ns->resolved = 1; } - return delegpt_add_addr_mlc(dp, addr, addrlen, bogus, lame, NULL); + log_assert(ns->port>0); + return delegpt_add_addr_mlc(dp, addr, addrlen, bogus, lame, + ns->tls_auth_name, ns->port); } size_t delegpt_get_mem(struct delegpt* dp) diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h index 9c8cfb281bae..17db15a23e26 100644 --- a/iterator/iter_delegpt.h +++ b/iterator/iter_delegpt.h @@ -126,6 +126,11 @@ struct delegpt_ns { * Also enabled if a parent-side cache entry exists, or a parent-side * negative-cache entry exists. */ uint8_t done_pside6; + /** the TLS authentication name, (if not NULL) to use. */ + char* tls_auth_name; + /** the port to use; it should mosty be the default 53 but configured + * upstreams can provide nondefault ports. */ + int port; }; /** @@ -191,10 +196,12 @@ int delegpt_set_name(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param name: domain name in wire format. * @param lame: name is lame, disprefer it. + * @param tls_auth_name: TLS authentication name (or NULL). + * @param port: port to use for resolved addresses. * @return false on error. */ -int delegpt_add_ns(struct delegpt* dp, struct regional* regional, - uint8_t* name, uint8_t lame); +int delegpt_add_ns(struct delegpt* dp, struct regional* regional, + uint8_t* name, uint8_t lame, char* tls_auth_name, int port); /** * Add NS rrset; calls add_ns repeatedly. @@ -271,12 +278,14 @@ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). + * @param port: the port to use; if -1 the port is taken from addr. * @param additions: will be set to 1 if a new address is added * @return false on error. */ -int delegpt_add_addr(struct delegpt* dp, struct regional* regional, +int delegpt_add_addr(struct delegpt* dp, struct regional* regional, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t bogus, uint8_t lame, char* tls_auth_name, int* additions); + uint8_t bogus, uint8_t lame, char* tls_auth_name, int port, + int* additions); /** * Find NS record in name list of delegation point. @@ -404,22 +413,27 @@ int delegpt_set_name_mlc(struct delegpt* dp, uint8_t* name); * @param dp: must have been created with delegpt_create_mlc. * @param name: the name to add. * @param lame: the name is lame, disprefer. + * @param tls_auth_name: TLS authentication name (or NULL). + * @param port: port to use for resolved addresses. * @return false on error. */ -int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame); +int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame, + char* tls_auth_name, int port); /** * add an address to a malloced delegation point. - * @param dp: must have been created with delegpt_create_mlc. + * @param dp: must have been created with delegpt_create_mlc. * @param addr: the address. * @param addrlen: the length of addr. * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). + * @param port: the port to use; if -1 the port is taken from addr. * @return false on error. */ int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name); + socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name, + int port); /** * Add target address to the delegation point. diff --git a/iterator/iter_fwd.c b/iterator/iter_fwd.c index 128007a0412c..151372912476 100644 --- a/iterator/iter_fwd.c +++ b/iterator/iter_fwd.c @@ -200,21 +200,27 @@ read_fwds_name(struct config_stub* s) } /** set fwd host names */ -static int +static int read_fwds_host(struct config_stub* s, struct delegpt* dp) { struct config_strlist* p; uint8_t* dname; - size_t dname_len; + char* tls_auth_name; + int port; for(p = s->hosts; p; p = p->next) { log_assert(p->str); - dname = sldns_str2wire_dname(p->str, &dname_len); + dname = authextstrtodname(p->str, &port, &tls_auth_name); if(!dname) { log_err("cannot parse forward %s server name: '%s'", s->name, p->str); return 0; } - if(!delegpt_add_ns_mlc(dp, dname, 0)) { +#if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) + if(tls_auth_name) + log_err("no name verification functionality in " + "ssl library, ignored name for %s", p->str); +#endif + if(!delegpt_add_ns_mlc(dp, dname, 0, tls_auth_name, port)) { free(dname); log_err("out of memory"); return 0; @@ -245,7 +251,7 @@ read_fwds_addr(struct config_stub* s, struct delegpt* dp) "ssl library, ignored name for %s", p->str); #endif if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0, - tls_auth_name)) { + tls_auth_name, -1)) { log_err("out of memory"); return 0; } diff --git a/iterator/iter_hints.c b/iterator/iter_hints.c index 5819cfb1703d..9b1a200bbb17 100644 --- a/iterator/iter_hints.c +++ b/iterator/iter_hints.c @@ -99,7 +99,7 @@ ah(struct delegpt* dp, const char* sv, const char* ip) log_err("could not parse %s", sv); return 0; } - if(!delegpt_add_ns_mlc(dp, dname, 0) || + if(!delegpt_add_ns_mlc(dp, dname, 0, NULL, UNBOUND_DNS_PORT) || !extstrtoaddr(ip, &addr, &addrlen) || !delegpt_add_target_mlc(dp, dname, dname_len, &addr, addrlen, 0, 0)) { @@ -213,21 +213,27 @@ read_stubs_name(struct config_stub* s) } /** set stub host names */ -static int +static int read_stubs_host(struct config_stub* s, struct delegpt* dp) { struct config_strlist* p; - size_t dname_len; uint8_t* dname; + char* tls_auth_name; + int port; for(p = s->hosts; p; p = p->next) { log_assert(p->str); - dname = sldns_str2wire_dname(p->str, &dname_len); + dname = authextstrtodname(p->str, &port, &tls_auth_name); if(!dname) { log_err("cannot parse stub %s nameserver name: '%s'", s->name, p->str); return 0; } - if(!delegpt_add_ns_mlc(dp, dname, 0)) { +#if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) + if(tls_auth_name) + log_err("no name verification functionality in " + "ssl library, ignored name for %s", p->str); +#endif + if(!delegpt_add_ns_mlc(dp, dname, 0, tls_auth_name, port)) { free(dname); log_err("out of memory"); return 0; @@ -258,7 +264,7 @@ read_stubs_addr(struct config_stub* s, struct delegpt* dp) "ssl library, ignored name for %s", p->str); #endif if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0, - auth_name)) { + auth_name, -1)) { log_err("out of memory"); return 0; } @@ -338,7 +344,7 @@ read_root_hints(struct iter_hints* hints, char* fname) if(sldns_wirerr_get_type(rr, rr_len, dname_len) == LDNS_RR_TYPE_NS) { if(!delegpt_add_ns_mlc(dp, sldns_wirerr_get_rdata(rr, - rr_len, dname_len), 0)) { + rr_len, dname_len), 0, NULL, UNBOUND_DNS_PORT)) { log_err("out of memory reading root hints"); goto stop_read; } diff --git a/iterator/iterator.c b/iterator/iterator.c index 48238a231b13..54006940d90e 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -1533,36 +1533,6 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, if(!iq->ratelimit_ok && qstate->prefetch_leeway) iq->ratelimit_ok = 1; /* allow prefetches, this keeps otherwise valid data in the cache */ - if(!iq->ratelimit_ok && infra_ratelimit_exceeded( - qstate->env->infra_cache, iq->dp->name, - iq->dp->namelen, *qstate->env->now)) { - /* and increment the rate, so that the rate for time - * now will also exceed the rate, keeping cache fresh */ - (void)infra_ratelimit_inc(qstate->env->infra_cache, - iq->dp->name, iq->dp->namelen, - *qstate->env->now, &qstate->qinfo, - qstate->reply); - /* see if we are passed through with slip factor */ - if(qstate->env->cfg->ratelimit_factor != 0 && - ub_random_max(qstate->env->rnd, - qstate->env->cfg->ratelimit_factor) == 1) { - iq->ratelimit_ok = 1; - log_nametypeclass(VERB_ALGO, "ratelimit allowed through for " - "delegation point", iq->dp->name, - LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); - } else { - lock_basic_lock(&ie->queries_ratelimit_lock); - ie->num_queries_ratelimited++; - lock_basic_unlock(&ie->queries_ratelimit_lock); - log_nametypeclass(VERB_ALGO, "ratelimit exceeded with " - "delegation point", iq->dp->name, - LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); - qstate->was_ratelimited = 1; - errinf(qstate, "query was ratelimited"); - errinf_dname(qstate, "for zone", iq->dp->name); - return error_response(qstate, id, LDNS_RCODE_SERVFAIL); - } - } /* see if this dp not useless. * It is useless if: @@ -1988,12 +1958,13 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, iq->chase_flags &= ~BIT_RD; /* go to authorities */ for(ns = p->nslist; ns; ns=ns->next) { (void)delegpt_add_ns(iq->dp, qstate->region, - ns->name, ns->lame); + ns->name, ns->lame, ns->tls_auth_name, + ns->port); } for(a = p->target_list; a; a=a->next_target) { (void)delegpt_add_addr(iq->dp, qstate->region, &a->addr, a->addrlen, a->bogus, - a->lame, a->tls_auth_name, NULL); + a->lame, a->tls_auth_name, -1, NULL); } } iq->dp->has_parent_side_NS = 1; @@ -2211,9 +2182,11 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, int auth_fallback = 0; uint8_t* qout_orig = NULL; size_t qout_orig_len = 0; + int sq_check_ratelimit = 1; + int sq_was_ratelimited = 0; - /* NOTE: a request will encounter this state for each target it - * needs to send a query to. That is, at least one per referral, + /* NOTE: a request will encounter this state for each target it + * needs to send a query to. That is, at least one per referral, * more if some targets timeout or return throwaway answers. */ log_query_info(VERB_QUERY, "processQueryTargets:", &qstate->qinfo); @@ -2534,7 +2507,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, struct dns_msg* forged_response = rpz_callback_from_iterator_module(qstate, iq); if(forged_response != NULL) { qstate->ext_state[id] = module_finished; - qstate->return_rcode = FLAGS_GET_RCODE(forged_response->rep->flags); + qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = forged_response; iq->response = forged_response; next_state(iq, FINISHED_STATE); @@ -2646,22 +2619,9 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } - /* if not forwarding, check ratelimits per delegationpoint name */ - if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { - if(!infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, - iq->dp->namelen, *qstate->env->now, &qstate->qinfo, - qstate->reply)) { - lock_basic_lock(&ie->queries_ratelimit_lock); - ie->num_queries_ratelimited++; - lock_basic_unlock(&ie->queries_ratelimit_lock); - verbose(VERB_ALGO, "query exceeded ratelimits"); - qstate->was_ratelimited = 1; - errinf_dname(qstate, "exceeded ratelimit for zone", - iq->dp->name); - return error_response(qstate, id, LDNS_RCODE_SERVFAIL); - } - } - + /* Do not check ratelimit for forwarding queries or if we already got a + * pass. */ + sq_check_ratelimit = (!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok); /* We have a valid target. */ if(verbosity >= VERB_QUERY) { log_query_info(VERB_QUERY, "sending query:", &iq->qinfo_out); @@ -2673,25 +2633,32 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, } fptr_ok(fptr_whitelist_modenv_send_query(qstate->env->send_query)); outq = (*qstate->env->send_query)(&iq->qinfo_out, - iq->chase_flags | (iq->chase_to_rd?BIT_RD:0), + iq->chase_flags | (iq->chase_to_rd?BIT_RD:0), /* unset CD if to forwarder(RD set) and not dnssec retry * (blacklist nonempty) and no trust-anchors are configured * above the qname or on the first attempt when dnssec is on */ EDNS_DO| ((iq->chase_to_rd||(iq->chase_flags&BIT_RD)!=0)&& !qstate->blacklist&&(!iter_qname_indicates_dnssec(qstate->env, - &iq->qinfo_out)||target->attempts==1)?0:BIT_CD), + &iq->qinfo_out)||target->attempts==1)?0:BIT_CD), iq->dnssec_expected, iq->caps_fallback || is_caps_whitelisted( - ie, iq), &target->addr, target->addrlen, + ie, iq), sq_check_ratelimit, &target->addr, target->addrlen, iq->dp->name, iq->dp->namelen, (iq->dp->tcp_upstream || qstate->env->cfg->tcp_upstream), (iq->dp->ssl_upstream || qstate->env->cfg->ssl_upstream), - target->tls_auth_name, qstate); + target->tls_auth_name, qstate, &sq_was_ratelimited); if(!outq) { + if(sq_was_ratelimited) { + lock_basic_lock(&ie->queries_ratelimit_lock); + ie->num_queries_ratelimited++; + lock_basic_unlock(&ie->queries_ratelimit_lock); + verbose(VERB_ALGO, "query exceeded ratelimits"); + qstate->was_ratelimited = 1; + errinf_dname(qstate, "exceeded ratelimit for zone", + iq->dp->name); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } log_addr(VERB_QUERY, "error sending query to auth server", &target->addr, target->addrlen); - if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) - infra_ratelimit_dec(qstate->env->infra_cache, iq->dp->name, - iq->dp->namelen, *qstate->env->now); if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = SKIP_MINIMISE_STATE; return next_state(iq, QUERYTARGETS_STATE); @@ -2935,14 +2902,6 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, * delegation point, and back to the QUERYTARGETS_STATE. */ verbose(VERB_DETAIL, "query response was REFERRAL"); - if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { - /* we have a referral, no ratelimit, we can send - * our queries to the given name */ - infra_ratelimit_dec(qstate->env->infra_cache, - iq->dp->name, iq->dp->namelen, - *qstate->env->now); - } - /* if hardened, only store referral if we asked for it */ if(!qstate->no_cache_store && (!qstate->env->cfg->harden_referral_path || @@ -3103,7 +3062,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, } if(forged_response != NULL) { qstate->ext_state[id] = module_finished; - qstate->return_rcode = FLAGS_GET_RCODE(forged_response->rep->flags); + qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = forged_response; iq->response = forged_response; next_state(iq, FINISHED_STATE); @@ -3384,21 +3343,22 @@ processTargetResponse(struct module_qstate* qstate, int id, log_err("out of memory adding pside glue"); } - /* This response is relevant to the current query, so we - * add (attempt to add, anyway) this target(s) and reactivate - * the original event. - * NOTE: we could only look for the AnswerRRset if the + /* This response is relevant to the current query, so we + * add (attempt to add, anyway) this target(s) and reactivate + * the original event. + * NOTE: we could only look for the AnswerRRset if the * response type was ANSWER. */ rrset = reply_find_answer_rrset(&iq->qchase, qstate->return_msg->rep); if(rrset) { int additions = 0; /* if CNAMEs have been followed - add new NS to delegpt. */ /* BTW. RFC 1918 says NS should not have got CNAMEs. Robust. */ - if(!delegpt_find_ns(foriq->dp, rrset->rk.dname, + if(!delegpt_find_ns(foriq->dp, rrset->rk.dname, rrset->rk.dname_len)) { /* if dpns->lame then set newcname ns lame too */ - if(!delegpt_add_ns(foriq->dp, forq->region, - rrset->rk.dname, dpns->lame)) + if(!delegpt_add_ns(foriq->dp, forq->region, + rrset->rk.dname, dpns->lame, dpns->tls_auth_name, + dpns->port)) log_err("out of memory adding cnamed-ns"); } /* if dpns->lame then set the address(es) lame too */ diff --git a/iterator/iterator.h b/iterator/iterator.h index a9e58569fcf3..8b840528d9d9 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -80,7 +80,7 @@ struct rbtree_type; /** * number of labels from QNAME that are always send individually when using * QNAME minimisation, even when the number of labels of the QNAME is bigger - * tham MAX_MINIMISE_COUNT */ + * than MAX_MINIMISE_COUNT */ #define MINIMISE_ONE_LAB 4 #define MINIMISE_MULTIPLE_LABS (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB) /** at what query-sent-count to stop target fetch policy */ @@ -379,7 +379,7 @@ struct iter_qstate { /** list of pending queries to authoritative servers. */ struct outbound_list outlist; - /** QNAME minimisation state, RFC7816 */ + /** QNAME minimisation state, RFC9156 */ enum minimisation_state minimisation_state; /** State for capsfail: QNAME minimisation state for comparisons. */ diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 7f753435d068..ab28dd54f942 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -882,9 +882,10 @@ void libworker_alloc_cleanup(void* arg) struct outbound_entry* libworker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, + int check_ratelimit, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct module_qstate* q) + struct module_qstate* q, int* was_ratelimited) { struct libworker* w = (struct libworker*)q->env->worker; struct outbound_entry* e = (struct outbound_entry*)regional_alloc( @@ -893,9 +894,10 @@ struct outbound_entry* libworker_send_query(struct query_info* qinfo, return NULL; e->qstate = q; e->qsent = outnet_serviced_query(w->back, qinfo, flags, dnssec, - want_dnssec, nocaps, tcp_upstream, ssl_upstream, + want_dnssec, nocaps, check_ratelimit, tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, q, - libworker_handle_service_reply, e, w->back->udp_buff, q->env); + libworker_handle_service_reply, e, w->back->udp_buff, q->env, + was_ratelimited); if(!e->qsent) { return NULL; } @@ -976,10 +978,11 @@ void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) struct outbound_entry* worker_send_query(struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), + int ATTR_UNUSED(check_ratelimit), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), - struct module_qstate* ATTR_UNUSED(q)) + struct module_qstate* ATTR_UNUSED(q), int* ATTR_UNUSED(was_ratelimited)) { log_assert(0); return 0; diff --git a/libunbound/worker.h b/libunbound/worker.h index 974b66a30e84..0fa5bfa99430 100644 --- a/libunbound/worker.h +++ b/libunbound/worker.h @@ -58,6 +58,7 @@ struct query_info; * @param dnssec: if set, EDNS record will have DO bit set. * @param want_dnssec: signatures needed. * @param nocaps: ignore capsforid(if in config), do not perturb qname. + * @param check_ratelimit: if set, will check ratelimit before sending out. * @param addr: where to. * @param addrlen: length of addr. * @param zone: delegation point name. @@ -67,14 +68,17 @@ struct query_info; * @param tls_auth_name: if ssl_upstream, use this name with TLS * authentication. * @param q: which query state to reactivate upon return. + * @param was_ratelimited: it will signal back if the query failed to pass the + * ratelimit check. * @return: false on failure (memory or socket related). no query was * sent. */ struct outbound_entry* libworker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, + int check_ratelimit, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct module_qstate* q); + struct module_qstate* q, int* was_ratelimited); /** process incoming serviced query replies from the network */ int libworker_handle_service_reply(struct comm_point* c, void* arg, int error, @@ -110,6 +114,7 @@ void worker_sighandler(int sig, void* arg); * @param dnssec: if set, EDNS record will have DO bit set. * @param want_dnssec: signatures needed. * @param nocaps: ignore capsforid(if in config), do not perturb qname. + * @param check_ratelimit: if set, will check ratelimit before sending out. * @param addr: where to. * @param addrlen: length of addr. * @param zone: wireformat dname of the zone. @@ -119,14 +124,17 @@ void worker_sighandler(int sig, void* arg); * @param tls_auth_name: if ssl_upstream, use this name with TLS * authentication. * @param q: which query state to reactivate upon return. + * @param was_ratelimited: it will signal back if the query failed to pass the + * ratelimit check. * @return: false on failure (memory or socket related). no query was * sent. */ struct outbound_entry* worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, + int check_ratelimit, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct module_qstate* q); + struct module_qstate* q, int* was_ratelimited); /** * process control messages from the main thread. Frees the control diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 03483abdf824..1ca8686a76f3 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -712,9 +712,10 @@ struct module_env { /* --- services --- */ struct outbound_entry* (*send_query)(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, + int check_ratelimit, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, - char* tls_auth_name, struct module_qstate* q); + char* tls_auth_name, struct module_qstate* q, int* was_ratelimited); void (*detach_subs)(struct module_qstate* qstate); int (*attach_sub)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, diff --git a/services/cache/infra.c b/services/cache/infra.c index 518e69622f83..252e1e288b35 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -898,8 +898,9 @@ static void infra_ip_create_ratedata(struct infra_cache* infra, slabhash_insert(infra->client_ip_rates, h, &k->entry, d, NULL); } -/** find the second and return its rate counter, if none, remove oldest */ -static int* infra_rate_find_second(void* data, time_t t) +/** Find the second and return its rate counter. If none and should_add, remove + * oldest to accommodate. Else return none. */ +static int* infra_rate_find_second_or_none(void* data, time_t t, int should_add) { struct rate_data* d = (struct rate_data*)data; int i, oldest; @@ -907,6 +908,7 @@ static int* infra_rate_find_second(void* data, time_t t) if(d->timestamp[i] == t) return &(d->qps[i]); } + if(!should_add) return NULL; /* remove oldest timestamp, and insert it at t with 0 qps */ oldest = 0; for(i=0; iqps[oldest]); } -int infra_rate_max(void* data, time_t now) +/** find the second and return its rate counter, if none, remove oldest to + * accommodate */ +static int* infra_rate_give_second(void* data, time_t t) +{ + return infra_rate_find_second_or_none(data, t, 1); +} + +/** find the second and return its rate counter only if it exists. Caller + * should check for NULL return value */ +static int* infra_rate_get_second(void* data, time_t t) +{ + return infra_rate_find_second_or_none(data, t, 0); +} + +int infra_rate_max(void* data, time_t now, int backoff) { struct rate_data* d = (struct rate_data*)data; int i, max = 0; for(i=0; itimestamp[i] <= RATE_WINDOW) { - if(d->qps[i] > max) + if(backoff) { + if(now-d->timestamp[i] <= RATE_WINDOW && + d->qps[i] > max) { max = d->qps[i]; + } + } else { + if(now == d->timestamp[i]) { + return d->qps[i]; + } } } return max; } int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, - size_t namelen, time_t timenow, struct query_info* qinfo, + size_t namelen, time_t timenow, int backoff, struct query_info* qinfo, struct comm_reply* replylist) { int lim, max; @@ -949,13 +971,13 @@ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, /* find or insert ratedata */ entry = infra_find_ratedata(infra, name, namelen, 1); if(entry) { - int premax = infra_rate_max(entry->data, timenow); - int* cur = infra_rate_find_second(entry->data, timenow); + int premax = infra_rate_max(entry->data, timenow, backoff); + int* cur = infra_rate_give_second(entry->data, timenow); (*cur)++; - max = infra_rate_max(entry->data, timenow); + max = infra_rate_max(entry->data, timenow, backoff); lock_rw_unlock(&entry->lock); - if(premax < lim && max >= lim) { + if(premax <= lim && max > lim) { char buf[257], qnm[257], ts[12], cs[12], ip[128]; dname_str(name, buf); dname_str(qinfo->qname, qnm); @@ -970,12 +992,12 @@ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s", buf, lim, qnm, cs, ts); } } - return (max < lim); + return (max <= lim); } /* create */ infra_create_ratedata(infra, name, namelen, timenow); - return (1 < lim); + return (1 <= lim); } void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, @@ -987,14 +1009,19 @@ void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, return; /* not enabled */ entry = infra_find_ratedata(infra, name, namelen, 1); if(!entry) return; /* not cached */ - cur = infra_rate_find_second(entry->data, timenow); + cur = infra_rate_get_second(entry->data, timenow); + if(cur == NULL) { + /* our timenow is not available anymore; nothing to decrease */ + lock_rw_unlock(&entry->lock); + return; + } if((*cur) > 0) (*cur)--; lock_rw_unlock(&entry->lock); } int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, - size_t namelen, time_t timenow) + size_t namelen, time_t timenow, int backoff) { struct lruhash_entry* entry; int lim, max; @@ -1010,7 +1037,7 @@ int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, entry = infra_find_ratedata(infra, name, namelen, 0); if(!entry) return 0; /* not cached */ - max = infra_rate_max(entry->data, timenow); + max = infra_rate_max(entry->data, timenow, backoff); lock_rw_unlock(&entry->lock); return (max >= lim); @@ -1027,7 +1054,8 @@ infra_get_mem(struct infra_cache* infra) } int infra_ip_ratelimit_inc(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow, struct sldns_buffer* buffer) + struct comm_reply* repinfo, time_t timenow, int backoff, + struct sldns_buffer* buffer) { int max; struct lruhash_entry* entry; @@ -1039,10 +1067,10 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, /* find or insert ratedata */ entry = infra_find_ip_ratedata(infra, repinfo, 1); if(entry) { - int premax = infra_rate_max(entry->data, timenow); - int* cur = infra_rate_find_second(entry->data, timenow); + int premax = infra_rate_max(entry->data, timenow, backoff); + int* cur = infra_rate_give_second(entry->data, timenow); (*cur)++; - max = infra_rate_max(entry->data, timenow); + max = infra_rate_max(entry->data, timenow, backoff); lock_rw_unlock(&entry->lock); if(premax < infra_ip_ratelimit && max >= infra_ip_ratelimit) { diff --git a/services/cache/infra.h b/services/cache/infra.h index 14f97c4c64d3..6a2371aca477 100644 --- a/services/cache/infra.h +++ b/services/cache/infra.h @@ -368,6 +368,7 @@ long long infra_get_host_rto(struct infra_cache* infra, * @param name: zone name * @param namelen: zone name length * @param timenow: what time it is now. + * @param backoff: if backoff is enabled. * @param qinfo: for logging, query name. * @param replylist: for logging, querier's address (if any). * @return 1 if it could be incremented. 0 if the increment overshot the @@ -375,7 +376,7 @@ long long infra_get_host_rto(struct infra_cache* infra, * Failures like alloc failures are not returned (probably as 1). */ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, - size_t namelen, time_t timenow, struct query_info* qinfo, + size_t namelen, time_t timenow, int backoff, struct query_info* qinfo, struct comm_reply* replylist); /** @@ -398,13 +399,15 @@ void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, * @param name: zone name * @param namelen: zone name length * @param timenow: what time it is now. + * @param backoff: if backoff is enabled. * @return true if exceeded. */ int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, - size_t namelen, time_t timenow); + size_t namelen, time_t timenow, int backoff); -/** find the maximum rate stored, not too old. 0 if no information. */ -int infra_rate_max(void* data, time_t now); +/** find the maximum rate stored. 0 if no information. + * When backoff is enabled look for the maximum in the whole RATE_WINDOW. */ +int infra_rate_max(void* data, time_t now, int backoff); /** find the ratelimit in qps for a domain. 0 if no limit for domain. */ int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, @@ -415,11 +418,12 @@ int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, * @param infra: infra cache * @param repinfo: information about client * @param timenow: what time it is now. + * @param backoff: if backoff is enabled. * @param buffer: with query for logging. * @return 1 if it could be incremented. 0 if the increment overshot the * ratelimit and the query should be dropped. */ int infra_ip_ratelimit_inc(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow, + struct comm_reply* repinfo, time_t timenow, int backoff, struct sldns_buffer* buffer); /** diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 6a33fbcdaf7e..983b96f09eec 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1370,39 +1370,38 @@ listen_create(struct comm_base* base, struct listen_port* ports, struct comm_point* cp = NULL; if(ports->ftype == listen_type_udp || ports->ftype == listen_type_udp_dnscrypt) - cp = comm_point_create_udp(base, ports->fd, + cp = comm_point_create_udp(base, ports->fd, front->udp_buff, cb, cb_arg, ports->socket); else if(ports->ftype == listen_type_tcp || ports->ftype == listen_type_tcp_dnscrypt) - cp = comm_point_create_tcp(base, ports->fd, + cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, harden_large_queries, 0, NULL, tcp_conn_limit, bufsize, front->udp_buff, ports->ftype, cb, cb_arg, ports->socket); else if(ports->ftype == listen_type_ssl || ports->ftype == listen_type_http) { - cp = comm_point_create_tcp(base, ports->fd, + cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, harden_large_queries, http_max_streams, http_endpoint, tcp_conn_limit, bufsize, front->udp_buff, ports->ftype, cb, cb_arg, ports->socket); - if(http_notls && ports->ftype == listen_type_http) - cp->ssl = NULL; - else - cp->ssl = sslctx; if(ports->ftype == listen_type_http) { if(!sslctx && !http_notls) { - log_warn("HTTPS port configured, but no TLS " - "tls-service-key or tls-service-pem " - "set"); + log_warn("HTTPS port configured, but " + "no TLS tls-service-key or " + "tls-service-pem set"); } #ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB - if(!http_notls) - log_warn("Unbound is not compiled with an " - "OpenSSL version supporting ALPN " - " (OpenSSL >= 1.0.2). This is required " - "to use DNS-over-HTTPS"); + if(!http_notls) { + log_warn("Unbound is not compiled " + "with an OpenSSL version " + "supporting ALPN " + "(OpenSSL >= 1.0.2). This " + "is required to use " + "DNS-over-HTTPS"); + } #endif #ifndef HAVE_NGHTTP2_NGHTTP2_H log_warn("Unbound is not compiled with " @@ -1412,13 +1411,17 @@ listen_create(struct comm_base* base, struct listen_port* ports, } } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) - cp = comm_point_create_udp_ancil(base, ports->fd, + cp = comm_point_create_udp_ancil(base, ports->fd, front->udp_buff, cb, cb_arg, ports->socket); if(!cp) { - log_err("can't create commpoint"); + log_err("can't create commpoint"); listen_delete(front); return NULL; } + if(http_notls && ports->ftype == listen_type_http) + cp->ssl = NULL; + else + cp->ssl = sslctx; cp->dtenv = dtenv; cp->do_not_close = 1; #ifdef USE_DNSCRYPT diff --git a/services/localzone.c b/services/localzone.c index 77d0107f9f6f..3e3a71aea3c5 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -56,6 +56,44 @@ * with 16 bytes for an A record, a 64K packet has about 4000 max */ #define LOCALZONE_RRSET_COUNT_MAX 4096 +/** print all RRsets in local zone */ +static void +local_zone_out(struct local_zone* z) +{ + struct local_data* d; + struct local_rrset* p; + RBTREE_FOR(d, struct local_data*, &z->data) { + for(p = d->rrsets; p; p = p->next) { + log_nametypeclass(NO_VERBOSE, "rrset", d->name, + ntohs(p->rrset->rk.type), + ntohs(p->rrset->rk.rrset_class)); + } + } +} + +static void +local_zone_print(struct local_zone* z) +{ + char buf[64]; + lock_rw_rdlock(&z->lock); + snprintf(buf, sizeof(buf), "%s zone", + local_zone_type2str(z->type)); + log_nametypeclass(NO_VERBOSE, buf, z->name, 0, z->dclass); + local_zone_out(z); + lock_rw_unlock(&z->lock); +} + +void local_zones_print(struct local_zones* zones) +{ + struct local_zone* z; + lock_rw_rdlock(&zones->lock); + log_info("number of auth zones %u", (unsigned)zones->ztree.count); + RBTREE_FOR(z, struct local_zone*, &zones->ztree) { + local_zone_print(z); + } + lock_rw_unlock(&zones->lock); +} + struct local_zones* local_zones_create(void) { @@ -1010,6 +1048,38 @@ lz_setup_implicit(struct local_zones* zones, struct config_file* cfg) lock_rw_rdlock(&zones->lock); if(!local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type)) { + /* Check if there is a zone that this could go + * under but for different class; created zones are + * always for LDNS_RR_CLASS_IN. Create the zone with + * a different class but the same configured + * local_zone_type. */ + struct local_zone* z = local_zones_lookup(zones, + rr_name, len, labs, LDNS_RR_CLASS_IN, rr_type); + if(z) { + uint8_t* name = memdup(z->name, z->namelen); + size_t znamelen = z->namelen; + int znamelabs = z->namelabs; + enum localzone_type ztype = z->type; + lock_rw_unlock(&zones->lock); + if(!name) { + log_err("out of memory"); + free(rr_name); + return 0; + } + if(!( +#ifndef THREADS_DISABLED + z = +#endif + lz_enter_zone_dname(zones, name, + znamelen, znamelabs, + ztype, rr_class))) { + free(rr_name); + return 0; + } + lock_rw_unlock(&z->lock); + free(rr_name); + continue; + } if(!have_name) { dclass = rr_class; nm = rr_name; @@ -1220,38 +1290,6 @@ local_zones_find_le(struct local_zones* zones, return (struct local_zone*)node; } -/** print all RRsets in local zone */ -static void -local_zone_out(struct local_zone* z) -{ - struct local_data* d; - struct local_rrset* p; - RBTREE_FOR(d, struct local_data*, &z->data) { - for(p = d->rrsets; p; p = p->next) { - log_nametypeclass(NO_VERBOSE, "rrset", d->name, - ntohs(p->rrset->rk.type), - ntohs(p->rrset->rk.rrset_class)); - } - } -} - -void local_zones_print(struct local_zones* zones) -{ - struct local_zone* z; - lock_rw_rdlock(&zones->lock); - log_info("number of auth zones %u", (unsigned)zones->ztree.count); - RBTREE_FOR(z, struct local_zone*, &zones->ztree) { - char buf[64]; - lock_rw_rdlock(&z->lock); - snprintf(buf, sizeof(buf), "%s zone", - local_zone_type2str(z->type)); - log_nametypeclass(NO_VERBOSE, buf, z->name, 0, z->dclass); - local_zone_out(z); - lock_rw_unlock(&z->lock); - } - lock_rw_unlock(&zones->lock); -} - /** encode answer consisting of 1 rrset */ static int local_encode(struct query_info* qinfo, struct module_env* env, diff --git a/services/outside_network.c b/services/outside_network.c index f4a5d0707845..a7e5fa3ad583 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -94,6 +94,16 @@ static void waiting_list_remove(struct outside_network* outnet, static uint16_t tcp_select_id(struct outside_network* outnet, struct reuse_tcp* reuse); +/** Perform serviced query UDP sending operation */ +static int serviced_udp_send(struct serviced_query* sq, sldns_buffer* buff); + +/** Send serviced query over TCP return false on initial failure */ +static int serviced_tcp_send(struct serviced_query* sq, sldns_buffer* buff); + +/** call the callbacks for a serviced query */ +static void serviced_callbacks(struct serviced_query* sq, int error, + struct comm_point* c, struct comm_reply* rep); + int pending_cmp(const void* key1, const void* key2) { @@ -836,6 +846,7 @@ outnet_add_tcp_waiting_first(struct outside_network* outnet, if(w->on_tcp_waiting_list) return; w->next_waiting = outnet->tcp_wait_first; + log_assert(w->next_waiting != w); if(!outnet->tcp_wait_last) outnet->tcp_wait_last = w; outnet->tcp_wait_first = w; @@ -1136,6 +1147,22 @@ static void reuse_cb_readwait_for_failure(rbtree_type* tree_by_id, int err) } } +/** mark the entry for being in the cb_and_decommission stage */ +static void mark_for_cb_and_decommission(rbnode_type* node, + void* ATTR_UNUSED(arg)) +{ + struct waiting_tcp* w = (struct waiting_tcp*)node->key; + /* Mark the waiting_tcp to signal later code (serviced_delete) that + * this item is part of the backed up tree_by_id and will be deleted + * later. */ + w->in_cb_and_decommission = 1; + /* Mark the serviced_query for deletion so that later code through + * callbacks (iter_clear .. outnet_serviced_query_stop) won't + * prematurely delete it. */ + if(w->cb) + ((struct serviced_query*)w->cb_arg)->to_be_deleted = 1; +} + /** perform callbacks for failure and also decommission pending tcp. * the callbacks remove references in sq->pending to the waiting_tcp * members of the tree_by_id in the pending tcp. The pending_tcp is @@ -1151,6 +1178,9 @@ static void reuse_cb_and_decommission(struct outside_network* outnet, pend->reuse.write_wait_first = NULL; pend->reuse.write_wait_last = NULL; decommission_pending_tcp(outnet, pend); + if(store.root != NULL && store.root != RBTREE_NULL) { + traverse_postorder(&store, &mark_for_cb_and_decommission, NULL); + } reuse_cb_readwait_for_failure(&store, error); reuse_del_readwait(&store); } @@ -1248,6 +1278,12 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error, c->buffer)); /* find the query the reply is for */ w = reuse_tcp_by_id_find(&pend->reuse, id); + /* Make sure that the reply we got is at least for a + * sent query with the same ID; the waiting_tcp that + * gets a reply is assumed to not be waiting to be + * sent. */ + if(w && (w->on_tcp_waiting_list || w->write_wait_queued)) + w = NULL; } } if(error == NETEVENT_NOERROR && !w) { @@ -1265,6 +1301,8 @@ outnet_tcp_cb(struct comm_point* c, void* arg, int error, } } if(w) { + log_assert(!w->on_tcp_waiting_list); + log_assert(!w->write_wait_queued); reuse_tree_by_id_delete(&pend->reuse, w); verbose(VERB_CLIENT, "outnet tcp callback query err %d buflen %d", error, (int)sldns_buffer_limit(c->buffer)); @@ -1324,7 +1362,7 @@ outnet_send_wait_udp(struct outside_network* outnet) { struct pending* pend; /* process waiting queries */ - while(outnet->udp_wait_first && outnet->unused_fds + while(outnet->udp_wait_first && outnet->unused_fds && !outnet->want_to_quit) { pend = outnet->udp_wait_first; outnet->udp_wait_first = pend->next_waiting; @@ -1333,8 +1371,10 @@ outnet_send_wait_udp(struct outside_network* outnet) sldns_buffer_write(outnet->udp_buff, pend->pkt, pend->pkt_len); sldns_buffer_flip(outnet->udp_buff); free(pend->pkt); /* freeing now makes get_mem correct */ - pend->pkt = NULL; + pend->pkt = NULL; pend->pkt_len = 0; + log_assert(!pend->sq->busy); + pend->sq->busy = 1; if(!randomize_and_send_udp(pend, outnet->udp_buff, pend->timeout)) { /* callback error on pending */ @@ -1344,6 +1384,8 @@ outnet_send_wait_udp(struct outside_network* outnet) NETEVENT_CLOSED, NULL); } pending_delete(outnet, pend); + } else { + pend->sq->busy = 0; } } } @@ -1454,7 +1496,6 @@ calc_num46(char** ifs, int num_ifs, int do_ip4, int do_ip6, (*num_ip4)++; } } - } void @@ -1708,16 +1749,9 @@ static void serviced_node_del(rbnode_type* node, void* ATTR_UNUSED(arg)) { struct serviced_query* sq = (struct serviced_query*)node; - struct service_callback* p = sq->cblist, *np; - free(sq->qbuf); - free(sq->zone); - free(sq->tls_auth_name); - edns_opt_list_free(sq->opt_list); - while(p) { - np = p->next; - free(p); - p = np; - } + alloc_reg_release(sq->alloc, sq->region); + if(sq->timer) + comm_timer_delete(sq->timer); free(sq); } @@ -2174,10 +2208,13 @@ pending_udp_query(struct serviced_query* sq, struct sldns_buffer* packet, sq->outnet->udp_wait_last = pend; return pend; } + log_assert(!sq->busy); + sq->busy = 1; if(!randomize_and_send_udp(pend, packet, timeout)) { pending_delete(sq->outnet, pend); return NULL; } + sq->busy = 0; return pend; } @@ -2247,7 +2284,7 @@ reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet) } /* equally pick a random unused element from the tree that is - * not in use. Pick a the n-th index of an ununused number, + * not in use. Pick a the n-th index of an unused number, * then loop over the empty spaces in the tree and find it */ log_assert(reuse->tree_by_id.count < 0xffff); select = ub_random_max(outnet->rnd, 0xffff - reuse->tree_by_id.count); @@ -2360,6 +2397,7 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, #ifdef USE_DNSTAP w->sq = NULL; #endif + w->in_cb_and_decommission = 0; if(pend) { /* we have a buffer available right now */ if(reuse) { @@ -2456,30 +2494,62 @@ lookup_serviced(struct outside_network* outnet, sldns_buffer* buff, int dnssec, return (struct serviced_query*)rbtree_search(outnet->serviced, &key); } +void +serviced_timer_cb(void* arg) +{ + struct serviced_query* sq = (struct serviced_query*)arg; + struct outside_network* outnet = sq->outnet; + verbose(VERB_ALGO, "serviced send timer"); + /* By the time this cb is called, if we don't have any registered + * callbacks for this serviced_query anymore; do not send. */ + if(!sq->cblist) + goto delete; + /* perform first network action */ + if(outnet->do_udp && !(sq->tcp_upstream || sq->ssl_upstream)) { + if(!serviced_udp_send(sq, outnet->udp_buff)) + goto delete; + } else { + if(!serviced_tcp_send(sq, outnet->udp_buff)) + goto delete; + } + /* Maybe by this time we don't have callbacks attached anymore. Don't + * proactively try to delete; let it run and maybe another callback + * will get attached by the time we get an answer. */ + return; +delete: + serviced_callbacks(sq, NETEVENT_CLOSED, NULL, NULL); +} + /** Create new serviced entry */ static struct serviced_query* serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int qtype, struct edns_option* opt_list, - size_t pad_queries_block_size) + size_t pad_queries_block_size, struct alloc_cache* alloc, + struct regional* region) { struct serviced_query* sq = (struct serviced_query*)malloc(sizeof(*sq)); + struct timeval t; #ifdef UNBOUND_DEBUG rbnode_type* ins; #endif if(!sq) return NULL; sq->node.key = sq; - sq->qbuf = memdup(sldns_buffer_begin(buff), sldns_buffer_limit(buff)); + sq->alloc = alloc; + sq->region = region; + sq->qbuf = regional_alloc_init(region, sldns_buffer_begin(buff), + sldns_buffer_limit(buff)); if(!sq->qbuf) { + alloc_reg_release(alloc, region); free(sq); return NULL; } sq->qbuflen = sldns_buffer_limit(buff); - sq->zone = memdup(zone, zonelen); + sq->zone = regional_alloc_init(region, zone, zonelen); if(!sq->zone) { - free(sq->qbuf); + alloc_reg_release(alloc, region); free(sq); return NULL; } @@ -2491,10 +2561,9 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, sq->tcp_upstream = tcp_upstream; sq->ssl_upstream = ssl_upstream; if(tls_auth_name) { - sq->tls_auth_name = strdup(tls_auth_name); + sq->tls_auth_name = regional_strdup(region, tls_auth_name); if(!sq->tls_auth_name) { - free(sq->zone); - free(sq->qbuf); + alloc_reg_release(alloc, region); free(sq); return NULL; } @@ -2503,17 +2572,16 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, } memcpy(&sq->addr, addr, addrlen); sq->addrlen = addrlen; - sq->opt_list = NULL; - if(opt_list) { - sq->opt_list = edns_opt_copy_alloc(opt_list); - if(!sq->opt_list) { - free(sq->tls_auth_name); - free(sq->zone); - free(sq->qbuf); - free(sq); - return NULL; - } + sq->opt_list = opt_list; + sq->busy = 0; + sq->timer = comm_timer_create(outnet->base, serviced_timer_cb, sq); + if(!sq->timer) { + alloc_reg_release(alloc, region); + free(sq); + return NULL; } + memset(&t, 0, sizeof(t)); + comm_timer_set(sq->timer, &t); sq->outnet = outnet; sq->cblist = NULL; sq->pending = NULL; @@ -2522,7 +2590,7 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, sq->to_be_deleted = 0; sq->padding_block_size = pad_queries_block_size; #ifdef UNBOUND_DEBUG - ins = + ins = #else (void) #endif @@ -2620,29 +2688,38 @@ serviced_delete(struct serviced_query* sq) struct waiting_tcp* w = (struct waiting_tcp*) sq->pending; verbose(VERB_CLIENT, "serviced_delete: TCP"); + log_assert(!(w->write_wait_queued && w->on_tcp_waiting_list)); /* if on stream-write-waiting list then * remove from waiting list and waiting_tcp_delete */ if(w->write_wait_queued) { struct pending_tcp* pend = (struct pending_tcp*)w->next_waiting; verbose(VERB_CLIENT, "serviced_delete: writewait"); - reuse_tree_by_id_delete(&pend->reuse, w); + if(!w->in_cb_and_decommission) + reuse_tree_by_id_delete(&pend->reuse, w); reuse_write_wait_remove(&pend->reuse, w); - waiting_tcp_delete(w); + if(!w->in_cb_and_decommission) + waiting_tcp_delete(w); } else if(!w->on_tcp_waiting_list) { struct pending_tcp* pend = (struct pending_tcp*)w->next_waiting; verbose(VERB_CLIENT, "serviced_delete: tcpreusekeep"); + /* w needs to stay on tree_by_id to not assign + * the same ID; remove the callback since its + * serviced_query will be gone. */ + w->cb = NULL; if(!reuse_tcp_remove_serviced_keep(w, sq)) { - reuse_cb_and_decommission(sq->outnet, - pend, NETEVENT_CLOSED); + if(!w->in_cb_and_decommission) + reuse_cb_and_decommission(sq->outnet, + pend, NETEVENT_CLOSED); use_free_buffer(sq->outnet); } sq->pending = NULL; } else { verbose(VERB_CLIENT, "serviced_delete: tcpwait"); waiting_list_remove(sq->outnet, w); - waiting_tcp_delete(w); + if(!w->in_cb_and_decommission) + waiting_tcp_delete(w); } } } @@ -2892,7 +2969,8 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c, * use secondary buffer to store the query. * This is a data copy, but faster than packet to server */ backlen = sldns_buffer_limit(c->buffer); - backup_p = memdup(sldns_buffer_begin(c->buffer), backlen); + backup_p = regional_alloc_init(sq->region, + sldns_buffer_begin(c->buffer), backlen); if(!backup_p) { log_err("malloc failure in serviced query callbacks"); error = NETEVENT_CLOSED; @@ -2910,10 +2988,8 @@ serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c, } fptr_ok(fptr_whitelist_serviced_query(p->cb)); (void)(*p->cb)(c, p->cb_arg, error, rep); - free(p); } if(backup_p) { - free(backup_p); sq->outnet->svcd_overhead = 0; } verbose(VERB_ALGO, "svcd callbacks end"); @@ -2931,7 +3007,7 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, struct waiting_tcp* w = (struct waiting_tcp*)sq->pending; struct pending_tcp* pend_tcp = NULL; struct port_if* pi = NULL; - if(!w->on_tcp_waiting_list && w->next_waiting) { + if(w && !w->on_tcp_waiting_list && w->next_waiting) { pend_tcp = (struct pending_tcp*)w->next_waiting; pi = pend_tcp->pi; } @@ -3027,8 +3103,11 @@ serviced_tcp_initiate(struct serviced_query* sq, sldns_buffer* buff) sq->status==serviced_query_TCP_EDNS?"EDNS":""); serviced_encode(sq, buff, sq->status == serviced_query_TCP_EDNS); sq->last_sent_time = *sq->outnet->now_tv; + log_assert(!sq->busy); + sq->busy = 1; sq->pending = pending_tcp_query(sq, buff, sq->outnet->tcp_auth_query_timeout, serviced_tcp_callback, sq); + sq->busy = 0; if(!sq->pending) { /* delete from tree so that a retry by above layer does not * clash with this entry */ @@ -3060,8 +3139,11 @@ serviced_tcp_send(struct serviced_query* sq, sldns_buffer* buff) } else { timeout = sq->outnet->tcp_auth_query_timeout; } + log_assert(!sq->busy); + sq->busy = 1; sq->pending = pending_tcp_query(sq, buff, timeout, serviced_tcp_callback, sq); + sq->busy = 0; return sq->pending != NULL; } @@ -3112,7 +3194,6 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, struct timeval now = *sq->outnet->now_tv; #ifdef USE_DNSTAP struct pending* p = (struct pending*)sq->pending; - struct port_if* pi = p->pc->pif; #endif sq->pending = NULL; /* removed after callback */ @@ -3154,14 +3235,16 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, /* * sending src (local service)/dst (upstream) addresses over DNSTAP */ - if(error == NETEVENT_NOERROR && outnet->dtenv && - (outnet->dtenv->log_resolver_response_messages || - outnet->dtenv->log_forwarder_response_messages)) { + if(error == NETEVENT_NOERROR && outnet->dtenv && p->pc && + (outnet->dtenv->log_resolver_response_messages || + outnet->dtenv->log_forwarder_response_messages)) { log_addr(VERB_ALGO, "response from upstream", &sq->addr, sq->addrlen); - log_addr(VERB_ALGO, "to local addr", &pi->addr, pi->addrlen); - dt_msg_send_outside_response(outnet->dtenv, &sq->addr, &pi->addr, c->type, - sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, - &sq->last_sent_time, sq->outnet->now_tv, c->buffer); + log_addr(VERB_ALGO, "to local addr", &p->pc->pif->addr, + p->pc->pif->addrlen); + dt_msg_send_outside_response(outnet->dtenv, &sq->addr, + &p->pc->pif->addr, c->type, sq->zone, sq->zonelen, + sq->qbuf, sq->qbuflen, &sq->last_sent_time, + sq->outnet->now_tv, c->buffer); } #endif if( (sq->status == serviced_query_UDP_EDNS @@ -3251,64 +3334,117 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error, struct serviced_query* outnet_serviced_query(struct outside_network* outnet, struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, - int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, - size_t zonelen, struct module_qstate* qstate, - comm_point_callback_type* callback, void* callback_arg, sldns_buffer* buff, - struct module_env* env) + int nocaps, int check_ratelimit, int tcp_upstream, int ssl_upstream, + char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, + uint8_t* zone, size_t zonelen, struct module_qstate* qstate, + comm_point_callback_type* callback, void* callback_arg, + sldns_buffer* buff, struct module_env* env, int* was_ratelimited) { struct serviced_query* sq; struct service_callback* cb; struct edns_string_addr* client_string_addr; + struct regional* region; + struct edns_option* backed_up_opt_list = qstate->edns_opts_back_out; + struct edns_option* per_upstream_opt_list = NULL; + time_t timenow = 0; - if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, - qstate, qstate->region)) + /* If we have an already populated EDNS option list make a copy since + * we may now add upstream specific EDNS options. */ + /* Use a region that could be attached to a serviced_query, if it needs + * to be created. If an existing one is found then this region will be + * destroyed here. */ + region = alloc_reg_obtain(env->alloc); + if(!region) return NULL; + if(qstate->edns_opts_back_out) { + per_upstream_opt_list = edns_opt_copy_region( + qstate->edns_opts_back_out, region); + if(!per_upstream_opt_list) { + alloc_reg_release(env->alloc, region); return NULL; + } + qstate->edns_opts_back_out = per_upstream_opt_list; + } + + if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, + zonelen, qstate, region)) { + alloc_reg_release(env->alloc, region); + return NULL; + } + /* Restore the option list; we can explicitly use the copied one from + * now on. */ + per_upstream_opt_list = qstate->edns_opts_back_out; + qstate->edns_opts_back_out = backed_up_opt_list; if((client_string_addr = edns_string_addr_lookup( &env->edns_strings->client_strings, addr, addrlen))) { - edns_opt_list_append(&qstate->edns_opts_back_out, + edns_opt_list_append(&per_upstream_opt_list, env->edns_strings->client_string_opcode, client_string_addr->string_len, - client_string_addr->string, qstate->region); + client_string_addr->string, region); } serviced_gen_query(buff, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, flags); sq = lookup_serviced(outnet, buff, dnssec, addr, addrlen, - qstate->edns_opts_back_out); - /* duplicate entries are included in the callback list, because - * there is a counterpart registration by our caller that needs to - * be doubly-removed (with callbacks perhaps). */ - if(!(cb = (struct service_callback*)malloc(sizeof(*cb)))) - return NULL; + per_upstream_opt_list); if(!sq) { + /* Check ratelimit only for new serviced_query */ + if(check_ratelimit) { + timenow = *env->now; + if(!infra_ratelimit_inc(env->infra_cache, zone, + zonelen, timenow, env->cfg->ratelimit_backoff, + &qstate->qinfo, qstate->reply)) { + /* Can we pass through with slip factor? */ + if(env->cfg->ratelimit_factor == 0 || + ub_random_max(env->rnd, + env->cfg->ratelimit_factor) != 1) { + *was_ratelimited = 1; + alloc_reg_release(env->alloc, region); + return NULL; + } + log_nametypeclass(VERB_ALGO, + "ratelimit allowed through for " + "delegation point", zone, + LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); + } + } /* make new serviced query entry */ sq = serviced_create(outnet, buff, dnssec, want_dnssec, nocaps, tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, (int)qinfo->qtype, - qstate->edns_opts_back_out, + per_upstream_opt_list, ( ssl_upstream && env->cfg->pad_queries - ? env->cfg->pad_queries_block_size : 0 )); + ? env->cfg->pad_queries_block_size : 0 ), + env->alloc, region); if(!sq) { - free(cb); + if(check_ratelimit) { + infra_ratelimit_dec(env->infra_cache, + zone, zonelen, timenow); + } + alloc_reg_release(env->alloc, region); return NULL; } - /* perform first network action */ - if(outnet->do_udp && !(tcp_upstream || ssl_upstream)) { - if(!serviced_udp_send(sq, buff)) { - (void)rbtree_delete(outnet->serviced, sq); - serviced_node_del(&sq->node, NULL); - free(cb); - return NULL; - } - } else { - if(!serviced_tcp_send(sq, buff)) { - (void)rbtree_delete(outnet->serviced, sq); - serviced_node_del(&sq->node, NULL); - free(cb); - return NULL; + if(!(cb = (struct service_callback*)regional_alloc( + sq->region, sizeof(*cb)))) { + if(check_ratelimit) { + infra_ratelimit_dec(env->infra_cache, + zone, zonelen, timenow); } + (void)rbtree_delete(outnet->serviced, sq); + serviced_node_del(&sq->node, NULL); + return NULL; + } + /* No network action at this point; it will be invoked with the + * serviced_query timer instead to run outside of the mesh. */ + } else { + /* We don't need this region anymore. */ + alloc_reg_release(env->alloc, region); + /* duplicate entries are included in the callback list, because + * there is a counterpart registration by our caller that needs + * to be doubly-removed (with callbacks perhaps). */ + if(!(cb = (struct service_callback*)regional_alloc( + sq->region, sizeof(*cb)))) { + return NULL; } } /* add callback to list of callbacks */ @@ -3328,7 +3464,6 @@ callback_list_remove(struct serviced_query* sq, void* cb_arg) if((*pp)->cb_arg == cb_arg) { struct service_callback* del = *pp; *pp = del->next; - free(del); return; } pp = &(*pp)->next; @@ -3337,13 +3472,13 @@ callback_list_remove(struct serviced_query* sq, void* cb_arg) void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg) { - if(!sq) + if(!sq) return; callback_list_remove(sq, cb_arg); /* if callbacks() routine scheduled deletion, let it do that */ - if(!sq->cblist && !sq->to_be_deleted) { + if(!sq->cblist && !sq->busy && !sq->to_be_deleted) { (void)rbtree_delete(sq->outnet->serviced, sq); - serviced_delete(sq); + serviced_delete(sq); } } diff --git a/services/outside_network.h b/services/outside_network.h index d0d532e6425f..4c5b96f83424 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -43,7 +43,9 @@ #ifndef OUTSIDE_NETWORK_H #define OUTSIDE_NETWORK_H +#include "util/alloc.h" #include "util/rbtree.h" +#include "util/regional.h" #include "util/netevent.h" #include "dnstap/dnstap_config.h" struct pending; @@ -412,6 +414,8 @@ struct waiting_tcp { char* tls_auth_name; /** the packet was involved in an error, to stop looping errors */ int error_count; + /** if true, the item is at the cb_and_decommission stage */ + int in_cb_and_decommission; #ifdef USE_DNSTAP /** serviced query pointer for dnstap to get logging info, if nonNULL*/ struct serviced_query* sq; @@ -512,6 +516,15 @@ struct serviced_query { void* pending; /** block size with which to pad encrypted queries (default: 128) */ size_t padding_block_size; + /** region for this serviced query. Will be cleared when this + * serviced_query will be deleted */ + struct regional* region; + /** allocation service for the region */ + struct alloc_cache* alloc; + /** flash timer to start the net I/O as a separate event */ + struct comm_timer* timer; + /** true if serviced_query is currently doing net I/O and may block */ + int busy; }; /** @@ -619,6 +632,7 @@ void pending_delete(struct outside_network* outnet, struct pending* p); * @param want_dnssec: signatures are needed, without EDNS the answer is * likely to be useless. * @param nocaps: ignore use_caps_for_id and use unperturbed qname. + * @param check_ratelimit: if set, will check ratelimit before sending out. * @param tcp_upstream: use TCP for upstream queries. * @param ssl_upstream: use SSL for upstream queries. * @param tls_auth_name: when ssl_upstream is true, use this name to check @@ -635,16 +649,18 @@ void pending_delete(struct outside_network* outnet, struct pending* p); * @param callback_arg: user argument to callback function. * @param buff: scratch buffer to create query contents in. Empty on exit. * @param env: the module environment. + * @param was_ratelimited: it will signal back if the query failed to pass the + * ratelimit check. * @return 0 on error, or pointer to serviced query that is used to answer * this serviced query may be shared with other callbacks as well. */ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, - int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, - size_t zonelen, struct module_qstate* qstate, + int nocaps, int check_ratelimit, int tcp_upstream, int ssl_upstream, + char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, + uint8_t* zone, size_t zonelen, struct module_qstate* qstate, comm_point_callback_type* callback, void* callback_arg, - struct sldns_buffer* buff, struct module_env* env); + struct sldns_buffer* buff, struct module_env* env, int* was_ratelimited); /** * Remove service query callback. @@ -785,6 +801,9 @@ void pending_udp_timer_delay_cb(void *arg); /** callback for outgoing TCP timer event */ void outnet_tcptimer(void* arg); +/** callback to send serviced queries */ +void serviced_timer_cb(void *arg); + /** callback for serviced query UDP answers */ int serviced_udp_callback(struct comm_point* c, void* arg, int error, struct comm_reply* rep); diff --git a/services/rpz.c b/services/rpz.c index d408f9383d24..322e9d1393c4 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -542,6 +542,7 @@ rpz_create(struct config_auth* p) } } r->log = p->rpz_log; + r->signal_nxdomain_ra = p->rpz_signal_nxdomain_ra; if(p->rpz_log_name) { if(!(r->log_name = strdup(p->rpz_log_name))) { log_err("malloc failure on RPZ log_name strdup"); @@ -836,7 +837,7 @@ rpz_report_rrset_error(const char* msg, uint8_t* rr, size_t rr_len) { } /* from localzone.c; difference is we don't have a dname */ -struct local_rrset* +static struct local_rrset* rpz_clientip_new_rrset(struct regional* region, struct clientip_synthesized_rr* raddr, uint16_t rrtype, uint16_t rrclass) { @@ -1384,9 +1385,9 @@ log_rpz_apply(char* trigger, uint8_t* dname, struct addr_tree_node* addrnode, if(dname) { dname_str(dname, dnamestr); } else if(addrnode) { - char a[128]; - addr_to_str(&addrnode->addr, addrnode->addrlen, a, sizeof(a)); - snprintf(dnamestr, sizeof(dnamestr), "%s/%d", a, addrnode->net); + char addrbuf[128]; + addr_to_str(&addrnode->addr, addrnode->addrlen, addrbuf, sizeof(addrbuf)); + snprintf(dnamestr, sizeof(dnamestr), "%s/%d", addrbuf, addrnode->net); } else { dnamestr[0]=0; } @@ -1697,7 +1698,7 @@ rpz_synthesize_nodata(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms, if(msg == NULL) { return msg; } msg->qinfo = *qinfo; msg->rep = construct_reply_info_base(ms->region, - LDNS_RCODE_NOERROR | BIT_RD | BIT_QR | BIT_AA | BIT_RA, + LDNS_RCODE_NOERROR | BIT_QR | BIT_AA | BIT_RA, 1, /* qd */ 0, /* ttl */ 0, /* prettl */ @@ -1715,14 +1716,18 @@ rpz_synthesize_nodata(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms, } static inline struct dns_msg* -rpz_synthesize_nxdomain(struct rpz* ATTR_UNUSED(r), struct module_qstate* ms, +rpz_synthesize_nxdomain(struct rpz* r, struct module_qstate* ms, struct query_info* qinfo, struct auth_zone* az) { struct dns_msg* msg = rpz_dns_msg_new(ms->region); + uint16_t flags; if(msg == NULL) { return msg; } msg->qinfo = *qinfo; + flags = LDNS_RCODE_NXDOMAIN | BIT_QR | BIT_AA | BIT_RA; + if(r->signal_nxdomain_ra) + flags &= ~BIT_RA; msg->rep = construct_reply_info_base(ms->region, - LDNS_RCODE_NXDOMAIN | BIT_RD | BIT_QR | BIT_AA | BIT_RA, + flags, 1, /* qd */ 0, /* ttl */ 0, /* prettl */ @@ -1752,7 +1757,7 @@ rpz_synthesize_localdata_from_rrset(struct rpz* ATTR_UNUSED(r), struct module_qs if(msg == NULL) { return NULL; } new_reply_info = construct_reply_info_base(ms->region, - LDNS_RCODE_NOERROR | BIT_RD | BIT_QR | BIT_AA | BIT_RA, + LDNS_RCODE_NOERROR | BIT_QR | BIT_AA | BIT_RA, 1, /* qd */ 0, /* ttl */ 0, /* prettl */ @@ -1922,6 +1927,9 @@ rpz_synthesize_qname_localdata(struct module_env* env, struct rpz* r, ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, 0 /* no local data used */, lzt); + if(r->signal_nxdomain_ra && LDNS_RCODE_WIRE(sldns_buffer_begin(buf)) + == LDNS_RCODE_NXDOMAIN) + LDNS_RA_CLR(sldns_buffer_begin(buf)); if(r->log) { log_rpz_apply("qname", z->name, NULL, localzone_type_to_rpz_action(lzt), qinfo, repinfo, NULL, r->log_name); @@ -1930,7 +1938,7 @@ rpz_synthesize_qname_localdata(struct module_env* env, struct rpz* r, return ret; } -struct clientip_synthesized_rr* +static struct clientip_synthesized_rr* rpz_delegation_point_ipbased_trigger_lookup(struct rpz* rpz, struct iter_qstate* is) { struct delegpt_addr* cursor; @@ -1947,7 +1955,7 @@ rpz_delegation_point_ipbased_trigger_lookup(struct rpz* rpz, struct iter_qstate* return NULL; } -struct dns_msg* +static struct dns_msg* rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r, struct clientip_synthesized_rr* raddr, struct auth_zone* az) { @@ -2006,7 +2014,7 @@ rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r, return ret; } -struct dns_msg* +static struct dns_msg* rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r, struct local_zone* z, struct matched_delegation_point const* match, struct auth_zone* az) @@ -2295,6 +2303,10 @@ rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env, local_zones_zone_answer(*z_out /*likely NULL, no zone*/, env, qinfo, edns, repinfo, buf, temp, 0 /* no local data used */, rpz_action_to_localzone_type(client_action)); + if(*r_out && (*r_out)->signal_nxdomain_ra && + LDNS_RCODE_WIRE(sldns_buffer_begin(buf)) + == LDNS_RCODE_NXDOMAIN) + LDNS_RA_CLR(sldns_buffer_begin(buf)); } ret = 1; goto done; diff --git a/services/rpz.h b/services/rpz.h index 691475743606..c29d30dff506 100644 --- a/services/rpz.h +++ b/services/rpz.h @@ -123,6 +123,8 @@ struct rpz { struct ub_packed_rrset_key* cname_override; int log; char* log_name; + /** signal NXDOMAIN blocked with unset RA flag */ + int signal_nxdomain_ra; struct regional* region; int disabled; }; diff --git a/sldns/keyraw.c b/sldns/keyraw.c index b1e60d8b52a8..befe1f722424 100644 --- a/sldns/keyraw.c +++ b/sldns/keyraw.c @@ -250,7 +250,8 @@ sldns_key_buf2dsa_raw(unsigned char* key, size_t len) if(!(dsa = DSA_new())) { return NULL; } -#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL) +#if OPENSSL_VERSION_NUMBER < 0x10100000 || \ + (defined(HAVE_LIBRESSL) && LIBRESSL_VERSION_NUMBER < 0x02070000f) #ifndef S_SPLINT_S dsa->p = P; dsa->q = Q; @@ -428,7 +429,8 @@ sldns_key_buf2rsa_raw(unsigned char* key, size_t len) BN_free(modulus); return NULL; } -#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL) +#if OPENSSL_VERSION_NUMBER < 0x10100000 || \ + (defined(HAVE_LIBRESSL) && LIBRESSL_VERSION_NUMBER < 0x02070000f) #ifndef S_SPLINT_S rsa->n = modulus; rsa->e = exponent; diff --git a/sldns/str2wire.c b/sldns/str2wire.c index ddaccd1b292d..d2cefae1c09e 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -25,8 +25,10 @@ #include #endif +/** bits for the offset */ +#define RET_OFFSET_MASK (((unsigned)(~LDNS_WIREPARSE_MASK))>>LDNS_WIREPARSE_SHIFT) /** return an error */ -#define RET_ERR(e, off) ((int)((e)|((off)< 0 && !*quoted && - *(sldns_buffer_current(strbuf)) == ' ') { + (*(sldns_buffer_current(strbuf)) == ' ' || + *(sldns_buffer_current(strbuf)) == '\t')) { sldns_buffer_skip(strbuf, 1); } @@ -601,7 +604,10 @@ sldns_affix_token(sldns_buffer* strbuf, char* token, size_t* token_len, size_t addstrlen = 0; /* add space */ - if(addlen < 1) return 0; + /* when addlen < 2, the token buffer is full considering the NULL byte + * from strlen and will lead to buffer overflow with the second + * assignement below. */ + if(addlen < 2) return 0; token[*token_strlen] = ' '; token[++(*token_strlen)] = 0; diff --git a/sldns/str2wire.h b/sldns/str2wire.h index 0c316498956e..baee4236fe55 100644 --- a/sldns/str2wire.h +++ b/sldns/str2wire.h @@ -187,7 +187,7 @@ uint8_t* sldns_wirerr_get_rdatawl(uint8_t* rr, size_t len, size_t dname_len); #define LDNS_WIREPARSE_MASK 0x0fff #define LDNS_WIREPARSE_SHIFT 12 #define LDNS_WIREPARSE_ERROR(e) ((e)&LDNS_WIREPARSE_MASK) -#define LDNS_WIREPARSE_OFFSET(e) (((e)&~LDNS_WIREPARSE_MASK)>>LDNS_WIREPARSE_SHIFT) +#define LDNS_WIREPARSE_OFFSET(e) ((((unsigned)(e))&~LDNS_WIREPARSE_MASK)>>LDNS_WIREPARSE_SHIFT) /* use lookuptable to get error string, sldns_wireparse_errors */ #define LDNS_WIREPARSE_ERR_OK 0 #define LDNS_WIREPARSE_ERR_GENERAL 342 diff --git a/sldns/wire2str.c b/sldns/wire2str.c index 6a177ec0b06c..b70efe299d4b 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -817,6 +817,7 @@ int sldns_wire2str_dname_scan(uint8_t** d, size_t* dlen, char** s, size_t* slen, unsigned i, counter=0; unsigned maxcompr = MAX_COMPRESS_PTRS; /* loop detection, max compr ptrs */ int in_buf = 1; + size_t dname_len = 0; if(comprloop) { if(*comprloop != 0) maxcompr = 30; /* for like ipv6 reverse name, per label */ @@ -872,6 +873,16 @@ int sldns_wire2str_dname_scan(uint8_t** d, size_t* dlen, char** s, size_t* slen, labellen = (uint8_t)*dlen; else if(!in_buf && pos+(size_t)labellen > pkt+pktlen) labellen = (uint8_t)(pkt + pktlen - pos); + dname_len += ((size_t)labellen)+1; + if(dname_len > LDNS_MAX_DOMAINLEN) { + /* dname_len counts the uncompressed length we have + * seen so far, and the domain name has become too + * long, prevent the loop from printing overly long + * content. */ + w += sldns_str_print(s, slen, + "ErrorDomainNameTooLong"); + return w; + } for(i=0; i<(unsigned)labellen; i++) { w += dname_char_print(s, slen, *pos++); } diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 34c7d11bca0a..fe18c3c83f93 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -691,6 +691,8 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "dns64 iterator") != 0 && strcmp(cfg->module_conf, "respip iterator") != 0 && strcmp(cfg->module_conf, "respip validator iterator") != 0 + && strcmp(cfg->module_conf, "respip dns64 validator iterator") != 0 + && strcmp(cfg->module_conf, "respip dns64 iterator") != 0 #ifdef WITH_PYTHONMODULE && strcmp(cfg->module_conf, "python iterator") != 0 && strcmp(cfg->module_conf, "python respip iterator") != 0 @@ -785,6 +787,10 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "validator python cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator python cachedb iterator") != 0 #endif +#if defined(CLIENT_SUBNET) && defined(USE_CACHEDB) + && strcmp(cfg->module_conf, "respip subnetcache validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator cachedb iterator") != 0 +#endif #ifdef CLIENT_SUBNET && strcmp(cfg->module_conf, "subnetcache iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache iterator") != 0 diff --git a/smallapp/worker_cb.c b/smallapp/worker_cb.c index 78e773938c88..c68981735cb7 100644 --- a/smallapp/worker_cb.c +++ b/smallapp/worker_cb.c @@ -97,10 +97,12 @@ void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) struct outbound_entry* worker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), - int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), + int ATTR_UNUSED(nocaps), int ATTR_UNUSED(check_ratelimit), + struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), - char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) + char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q), + int* ATTR_UNUSED(was_ratelimited)) { log_assert(0); return 0; @@ -129,10 +131,12 @@ worker_alloc_cleanup(void* ATTR_UNUSED(arg)) struct outbound_entry* libworker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), - int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), + int ATTR_UNUSED(nocaps), int ATTR_UNUSED(check_ratelimit), + struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), - char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) + char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q), + int* ATTR_UNUSED(was_ratelimited)) { log_assert(0); return 0; diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 6a8245d4a6ab..be06a4721c21 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1187,12 +1187,13 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, struct serviced_query* outnet_serviced_query(struct outside_network* outnet, struct query_info* qinfo, uint16_t flags, int dnssec, int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), + int ATTR_UNUSED(check_ratelimit), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, comm_point_callback_type* callback, void* callback_arg, sldns_buffer* ATTR_UNUSED(buff), - struct module_env* env) + struct module_env* env, int* ATTR_UNUSED(was_ratelimited)) { struct replay_runtime* runtime = (struct replay_runtime*)outnet->base; struct fake_pending* pend = (struct fake_pending*)calloc(1, @@ -1222,11 +1223,37 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, if(1) { struct edns_data edns; struct edns_string_addr* client_string_addr; + struct edns_option* backed_up_opt_list = + qstate->edns_opts_back_out; + struct edns_option* per_upstream_opt_list = NULL; + /* If we have an already populated EDNS option list make a copy + * since we may now add upstream specific EDNS options. */ + if(qstate->edns_opts_back_out) { + per_upstream_opt_list = edns_opt_copy_region( + qstate->edns_opts_back_out, qstate->region); + if(!per_upstream_opt_list) { + free(pend); + fatal_exit("out of memory"); + } + qstate->edns_opts_back_out = per_upstream_opt_list; + } if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, qstate, qstate->region)) { free(pend); return NULL; } + /* Restore the option list; we can explicitly use the copied + * one from now on. */ + per_upstream_opt_list = qstate->edns_opts_back_out; + qstate->edns_opts_back_out = backed_up_opt_list; + if((client_string_addr = edns_string_addr_lookup( + &env->edns_strings->client_strings, + addr, addrlen))) { + edns_opt_list_append(&per_upstream_opt_list, + env->edns_strings->client_string_opcode, + client_string_addr->string_len, + client_string_addr->string, qstate->region); + } /* add edns */ edns.edns_present = 1; edns.ext_rcode = 0; @@ -1236,16 +1263,8 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, if(dnssec) edns.bits = EDNS_DO; edns.padding_block_size = 0; - if((client_string_addr = edns_string_addr_lookup( - &env->edns_strings->client_strings, - addr, addrlen))) { - edns_opt_list_append(&qstate->edns_opts_back_out, - env->edns_strings->client_string_opcode, - client_string_addr->string_len, - client_string_addr->string, qstate->region); - } edns.opt_list_in = NULL; - edns.opt_list_out = qstate->edns_opts_back_out; + edns.opt_list_out = per_upstream_opt_list; edns.opt_list_inplace_cb_out = NULL; attach_edns_record(pend->buffer, &edns); } @@ -1424,6 +1443,11 @@ void pending_udp_timer_cb(void *ATTR_UNUSED(arg)) log_assert(0); } +void serviced_timer_cb(void *ATTR_UNUSED(arg)) +{ + log_assert(0); +} + void pending_udp_timer_delay_cb(void *ATTR_UNUSED(arg)) { log_assert(0); diff --git a/testcode/petal.c b/testcode/petal.c index 6ea3c34cdaa5..63d3d452ee34 100644 --- a/testcode/petal.c +++ b/testcode/petal.c @@ -582,10 +582,9 @@ do_service(char* addr, int port, char* key, char* cert) { SSL_CTX* sslctx = setup_ctx(key, cert); int fd = setup_fd(addr, port); - int go = 1; if(fd == -1) print_exit("could not setup sockets"); if(verb) {printf("petal start\n"); fflush(stdout);} - while(go) { + while(1) { struct sockaddr_storage from; socklen_t flen = (socklen_t)sizeof(from); int s; diff --git a/testdata/edns_attached_once_per_upstream.rpl b/testdata/edns_attached_once_per_upstream.rpl new file mode 100644 index 000000000000..19f1ba75df49 --- /dev/null +++ b/testdata/edns_attached_once_per_upstream.rpl @@ -0,0 +1,90 @@ +; config options +server: + edns-client-string: 10.0.0.0/24 "abc d" + outbound-msg-retry: 1 + +stub-zone: + name: "edns-string-abc." + stub-addr: 10.0.0.3 + stub-first: yes + +forward-zone: + name: "." + forward-addr: 10.0.0.1 + +CONFIG_END + +SCENARIO_BEGIN Test that upstream specific EDNS is attached once; uses string tag option + +RANGE_BEGIN 0 1000 + ADDRESS 10.0.0.3 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR SERVFAIL +SECTION QUESTION +edns-string-abc. IN A +ENTRY_END +RANGE_END + +RANGE_BEGIN 0 1000 + ADDRESS 10.0.0.1 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +edns-string-abc. IN A +SECTION ANSWER +edns-string-abc. IN A 10.20.30.40 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +edns-string-abc. IN A +ENTRY_END + +; This will receive SERVFAIL and the next address will be queried +STEP 20 CHECK_OUT_QUERY ADDRESS 10.0.0.3 +ENTRY_BEGIN +MATCH qname qtype opcode ednsdata +SECTION QUESTION +edns-string-abc. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + fd e9 ; Opcode 65001 + 00 05 ; Length 5 + 61 62 63 20 64 ; "abc d" + HEX_EDNSDATA_END +ENTRY_END + +; This will receive the answer; makes sure that EDNS is attached once +STEP 22 CHECK_OUT_QUERY ADDRESS 10.0.0.1 +ENTRY_BEGIN +MATCH qname qtype opcode ednsdata +SECTION QUESTION +edns-string-abc. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + fd e9 ; Opcode 65001 + 00 05 ; Length 5 + 61 62 63 20 64 ; "abc d" + HEX_EDNSDATA_END +ENTRY_END + + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +edns-string-abc. IN A +SECTION ANSWER +edns-string-abc. IN A 10.20.30.40 +ENTRY_END + +SCENARIO_END diff --git a/testdata/localdata.rpl b/testdata/localdata.rpl index 047fbeebadd4..e54de2b61662 100644 --- a/testdata/localdata.rpl +++ b/testdata/localdata.rpl @@ -45,9 +45,32 @@ server: local-data: "b.c.implicit. A 20.30.45.50" local-data: "c.c.implicit. A 20.30.44.50" + ; create implicit data in the ANY domain + ; this should inherit the local_zone_type of the already configured + ; zone 'refuse.top.' and not be transparent + local-data: "refuse.top. ANY TXT implicit_non_transparent" + +stub-zone: + name: "refuse.top" + stub-addr: 1.2.3.4 + CONFIG_END SCENARIO_BEGIN Test local data queries +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 +; This entry should never be queried +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.refuse.top. IN A +SECTION ANSWER +www.refuse.top. IN A 5.5.5.5 +ENTRY_END +RANGE_END + ; id.server. STEP 1 QUERY ENTRY_BEGIN @@ -390,4 +413,35 @@ SECTION ANSWER foo.null.top. IN AAAA ::0 ENTRY_END +; refuse zone for implicit local-data with CLASS != IN +STEP 64 QUERY +ENTRY_BEGIN +SECTION QUESTION +refuse.top. ANY TXT +ENTRY_END +STEP 65 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RA AA NOERROR +SECTION QUESTION +refuse.top. ANY TXT +SECTION ANSWER +refuse.top. ANY TXT implicit_non_transparent +ENTRY_END + +; refuse zone for implicit local-data with CLASS != IN +STEP 66 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.refuse.top. ANY A +ENTRY_END +STEP 67 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RA RD AA REFUSED +SECTION QUESTION +www.refuse.top. ANY A +ENTRY_END + SCENARIO_END diff --git a/testdata/nsid_bogus.rpl b/testdata/nsid_bogus.rpl new file mode 100644 index 000000000000..1414163f8a6a --- /dev/null +++ b/testdata/nsid_bogus.rpl @@ -0,0 +1,174 @@ +; config options +; The island of trust is at example.com +server: + trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" + val-override-date: "20070916134226" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + fake-sha1: yes + trust-anchor-signaling: no + minimal-responses: no + nsid: "ascii_hopsa kidee" + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test for NSID in SERVFAIL response due to DNSSEC bogus + +; 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 qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.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 +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 qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.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 +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. +example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} +ENTRY_END + +; response to DNSKEY priming query +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN DNSKEY +SECTION ANSWER +example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} +example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} +ENTRY_END + +; nodata for ns.example.com AAAA +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN AAAA +SECTION ANSWER +SECTION ADDITIONAL +ENTRY_END + + +; response to query of interest +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 +;good signature +;www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} +;missing +www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2855 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +www.example.com. IN A +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 00 ; Length 0 + HEX_EDNSDATA_END +ENTRY_END + +; recursion happens here. +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA DO SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +SECTION ADDITIONAL + HEX_EDNSDATA_BEGIN + 00 03 ; Opcode NSID (3) + 00 0b ; Length 11 + 68 6F 70 73 61 20 ; "hopsa " + 6B 69 64 65 65 ; "kidee" + HEX_EDNSDATA_END +ENTRY_END + +SCENARIO_END diff --git a/testdata/pylib.tdir/pylib.lookup.conf b/testdata/pylib.tdir/pylib.lookup.conf index 3f4a8d26dfb1..f467d5bc6591 100644 --- a/testdata/pylib.tdir/pylib.lookup.conf +++ b/testdata/pylib.tdir/pylib.lookup.conf @@ -11,4 +11,4 @@ server: stub-zone: name: "example.com." stub-addr: "127.0.0.1@@TOPORT@" - + stub-no-cache: yes diff --git a/testdata/pylib.tdir/pylib.lookup.py b/testdata/pylib.tdir/pylib.lookup.py index 114bb49a0902..b9f6e8397164 100755 --- a/testdata/pylib.tdir/pylib.lookup.py +++ b/testdata/pylib.tdir/pylib.lookup.py @@ -9,9 +9,11 @@ import unbound qname = "www.example.com" +qname2 = "www2.example.com" qtype = unbound.RR_TYPE_A qclass = unbound.RR_CLASS_IN + def create_context(config_file="ub.lookup.conf", asyncflag=False): """ Create an unbound context to use for testing. @@ -69,32 +71,6 @@ def test_async_resolve(ctx): print("Failed async resolve with: {}".format(retval)) -def test_ratelimit_fg_on(ctx): - """ - Test resolving a ratelimited domain with a foreground worker. - - """ - ctx.set_option("ratelimit:", "1") - ctx.set_option("ratelimit-factor:", "0") - status, result = ctx.resolve(qname, qtype, qclass) - if status == 0 and result.was_ratelimited: - print("Ratelimit-fg-on: pass") - else: - print("Failed ratelimit-fg-on with: {}".format(status)) - - -def test_ratelimit_fg_off(ctx): - """ - Test resolving a non-ratelimited domain with a foreground worker. - - """ - status, result = ctx.resolve(qname, qtype, qclass) - if status == 0 and result.havedata: - print("Ratelimit-fg-off: {}".format(result.data.address_list)) - else: - print("Failed ratelimit-fg-off with: {}".format(status)) - - def test_ratelimit_bg_on(ctx): """ Test resolving a ratelimited domain with a background worker. @@ -102,40 +78,32 @@ def test_ratelimit_bg_on(ctx): """ ctx.set_option("ratelimit:", "1") ctx.set_option("ratelimit-factor:", "0") - cb_data = dict(done=False) - retval, async_id = ctx.resolve_async(qname, cb_data, callback, qtype, qclass) - while retval == 0 and not cb_data['done']: - time.sleep(0.1) - retval = ctx.process() + total_runs = 6 + success_threshold = 4 # 2/3*total_runs + successes = 0 + for i in range(total_runs): + cb_data = dict(done=False) + cb_data2 = dict(done=False) + retval, async_id = ctx.resolve_async(qname, cb_data, callback, qtype, qclass) + retval, async_id = ctx.resolve_async(qname2, cb_data2, callback, qtype, qclass) - if cb_data.get('was_ratelimited'): + while retval == 0 and not (cb_data['done'] and cb_data['done']): + time.sleep(0.1) + retval = ctx.process() + + if bool(cb_data.get('was_ratelimited')) ^ bool(cb_data2.get('was_ratelimited')): + successes += 1 + if successes >= success_threshold: + break + time.sleep(1) + if successes >= success_threshold: print("Ratelimit-bg-on: pass") else: - print("Failed ratelimit-bg-on with: {}".format(status)) - - -def test_ratelimit_bg_off(ctx): - """ - Test resolving a non-ratelimited domain with a background worker. - - """ - cb_data = dict(done=False) - retval, async_id = ctx.resolve_async(qname, cb_data, callback, qtype, qclass) - while retval == 0 and not cb_data['done']: - time.sleep(0.1) - retval = ctx.process() - - if cb_data.get('data'): - print("Ratelimit-bg-off: {}".format(cb_data['data'].address_list)) - else: - print("Failed ratelimit-bg-off with: {}".format(status)) + print("Failed ratelimit-bg-on") test_resolve(create_context()) test_async_resolve(create_context(asyncflag=True)) -test_ratelimit_fg_on(create_context()) -test_ratelimit_fg_off(create_context()) test_ratelimit_bg_on(create_context(asyncflag=True)) -test_ratelimit_bg_off(create_context(asyncflag=True)) sys.exit(0) diff --git a/testdata/pylib.tdir/pylib.test b/testdata/pylib.tdir/pylib.test index 893aaf64f252..59f996459c17 100644 --- a/testdata/pylib.tdir/pylib.test +++ b/testdata/pylib.tdir/pylib.test @@ -42,30 +42,12 @@ else echo "Not OK (async resolve)" exit 1 fi -if grep "Ratelimit-fg-on: pass" outfile; then - : -else - echo "Not OK (ratelimit-fg-on)" - exit 1 -fi -if grep "Ratelimit-fg-off: \[.\?10.20.30.40.\?\]" outfile; then - : -else - echo "Not OK (ratelimit-fg-off)" - exit 1 -fi if grep "Ratelimit-bg-on: pass" outfile; then : else echo "Not OK (ratelimit-bg-on)" exit 1 fi -if grep "Ratelimit-bg-off: \[.\?10.20.30.40.\?\]" outfile; then - : -else - echo "Not OK (ratelimit-bg-off)" - exit 1 -fi echo "OK" diff --git a/testdata/pylib.tdir/pylib.testns b/testdata/pylib.tdir/pylib.testns index f2a700cc7daf..af54ed570603 100644 --- a/testdata/pylib.tdir/pylib.testns +++ b/testdata/pylib.tdir/pylib.testns @@ -12,3 +12,12 @@ SECTION ANSWER www IN A 10.20.30.40 ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.40 +ENTRY_END diff --git a/testdata/ratelimit.tdir/ratelimit.conf b/testdata/ratelimit.tdir/ratelimit.conf new file mode 100644 index 000000000000..5d2456c39311 --- /dev/null +++ b/testdata/ratelimit.tdir/ratelimit.conf @@ -0,0 +1,29 @@ +server: + verbosity: 5 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + ratelimit: 1 + ratelimit-factor: 0 + +stub-zone: + name: "example.com." + stub-addr: "127.0.0.1@@TOPORT@" + stub-no-cache: yes + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" diff --git a/testdata/ratelimit.tdir/ratelimit.dsc b/testdata/ratelimit.tdir/ratelimit.dsc new file mode 100644 index 000000000000..abd5307c79ef --- /dev/null +++ b/testdata/ratelimit.tdir/ratelimit.dsc @@ -0,0 +1,16 @@ +BaseName: ratelimit +Version: 1.0 +Description: Test ratelimit. +CreationDate: Sun Jan 30 00:40:00 CET 2022 +Maintainer: Yorgos Thessalonikefs +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: ratelimit.pre +Post: ratelimit.post +Test: ratelimit.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/ratelimit.tdir/ratelimit.post b/testdata/ratelimit.tdir/ratelimit.post new file mode 100644 index 000000000000..6738ed55ad07 --- /dev/null +++ b/testdata/ratelimit.tdir/ratelimit.post @@ -0,0 +1,14 @@ +# #-- ratelimit.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 +. ../common.sh +kill_pid $STUB_PID +kill_pid $UNBOUND_PID +if test -f unbound.log; then + echo ">>> unbound log" + cat unbound.log +fi diff --git a/testdata/ratelimit.tdir/ratelimit.pre b/testdata/ratelimit.tdir/ratelimit.pre new file mode 100644 index 000000000000..2404cfc00b93 --- /dev/null +++ b/testdata/ratelimit.tdir/ratelimit.pre @@ -0,0 +1,33 @@ +# #-- ratelimit.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 +STUB_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "STUB_PORT=$STUB_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start ldns-testns +get_ldns_testns +$LDNS_TESTNS -v -p $STUB_PORT ratelimit.testns >stub.log 2>&1 & +STUB_PID=$! +echo "STUB_PID=$STUB_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$STUB_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < ratelimit.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 + +wait_ldns_testns_up stub.log +wait_unbound_up unbound.log + +cat .tpkg.var.test diff --git a/testdata/ratelimit.tdir/ratelimit.test b/testdata/ratelimit.tdir/ratelimit.test new file mode 100644 index 000000000000..cc14717405c6 --- /dev/null +++ b/testdata/ratelimit.tdir/ratelimit.test @@ -0,0 +1,183 @@ +# #-- ratelimit.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="../.." +. ../common.sh + +get_make +(cd $PRE; $MAKE streamtcp) + +# These tests rely on second time precision. To combat false negatives the +# tests run multiple times and we allow 1/3 of the runs to fail. +total_runs=6 +success_threshold=4 # 2/3*total_runs + +successes=0 +echo "> Three parallel queries" +# For this test we send three parallel queries and we expect only one of them +# to be allowed through each second. +for i in $(seq 1 $total_runs); do + $PRE/streamtcp -na -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN www2.example.com. A IN www3.example.com. A IN >outfile 2>&1 + if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Not OK" + exit 1 + fi + cat outfile + if test `grep "rcode: SERVFAIL" outfile | wc -l` -eq 2; then + ((successes++)) + fi + # We don't have to wait for all the runs to complete if we know + # we passed the threshold. + if test $successes -ge $success_threshold; then + break + fi + sleep 1 +done +if test $successes -ge $success_threshold; then + echo "Number of ratelimited queries OK for three parallel queries" +else + echo "Number of ratelimited queries not OK for three parallel queries" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Number of ratelimited queries not OK for three parallel queries" + exit 1 +fi + +echo "> Activating ratelimit-factor" +echo "$PRE/unbound-control -c ub.conf set_option ratelimit-factor: 3" +$PRE/unbound-control -c ub.conf set_option ratelimit-factor: 3 +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +slipped_through=0 +echo "> Three parallel queries with ratelimit-factor" +# For this test we send three parallel queries and we expect at least two of +# them to be allowed through at a given second; one from the ratelimit itself +# and one from the ratelimit-factor. +for i in {1..10}; do + $PRE/streamtcp -na -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN www2.example.com. A IN www3.example.com. A IN >outfile 2>&1 + if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Not OK" + exit 1 + fi + cat outfile + if test `grep "rcode: SERVFAIL" outfile | wc -l` -lt 2; then + slipped_through=1 + break + fi + sleep 2 +done +if test $slipped_through -eq 0; then + echo "ratelimit-factor did not work" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "ratelimit-factor did not work" + exit 1 +fi +echo "ratelimit-factor OK" + +echo "> Disabling ratelimit-factor" +echo "$PRE/unbound-control -c ub.conf set_option ratelimit-factor: 0" +$PRE/unbound-control -c ub.conf set_option ratelimit-factor: 0 +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> Activating ratelimit-backoff" +echo "$PRE/unbound-control -c ub.conf set_option ratelimit-backoff: yes" +$PRE/unbound-control -c ub.conf set_option ratelimit-backoff: yes +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +successes=0 +echo "> Three parallel queries with backoff" +# For this test we send three parallel queries. The ratelimit should be reached +# for that second. Then for the next second we again send three parallel +# queries and we expect none of them to be allowed through because of the +# backoff logic that keeps rolling the RATE_WINDOW based on demand. +for i in $(seq 1 $total_runs); do + $PRE/streamtcp -na -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN www2.example.com. A IN www3.example.com. A IN >outfile 2>&1 + if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Not OK" + exit 1 + fi + sleep 1 # Limit is reached; it should also be active for the next second + $PRE/streamtcp -na -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN www2.example.com. A IN www3.example.com. A IN >outfile 2>&1 + if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Not OK" + exit 1 + fi + cat outfile + if test `grep "rcode: SERVFAIL" outfile | wc -l` -eq 3; then + ((successes++)) + fi + # We don't have to wait for all the runs to complete if we know + # we passed the threshold. + if test $successes -ge $success_threshold; then + break + fi +done + +if test $successes -ge $success_threshold; then + echo "three parallel queries with backoff OK" +else + echo "Number of ratelimited queries not OK for three parallel queries with backoff" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Number of ratelimited queries not OK for three parallel queries with backoff" + exit 1 +fi + +echo "> Three parallel queries after backoff RATE_WINDOW" +sleep 3 # Make sure the RATE_WINDOW is renewed +# For this test we make three parallel queries after the RATE_WINDOW has passed +# without any new demand and we expect at least one query to pass through. This +# is to check that the backoff logic does not insist on past (outside of +# RATE_WINDOW) limits. +$PRE/streamtcp -na -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN www2.example.com. A IN www3.example.com. A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Not OK" + exit 1 +fi +cat outfile +if test `grep "rcode: NOERROR" outfile | wc -l` -gt 0; then + echo "Number of ratelimited queries OK for three parallel queries after backoff RATE_WINDOW" +else + echo "Number of ratelimited queries not OK for three parallel queries after backoff RATE_WINDOW" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Number of ratelimited queries not OK for three parallel queries after backoff RATE_WINDOW" + exit 1 +fi +exit 0 diff --git a/testdata/ratelimit.tdir/ratelimit.testns b/testdata/ratelimit.tdir/ratelimit.testns new file mode 100644 index 000000000000..673bd15a598b --- /dev/null +++ b/testdata/ratelimit.tdir/ratelimit.testns @@ -0,0 +1,13 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype +REPLY QR AA NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +wild IN A +SECTION ANSWER +wild IN A 10.20.30.40 +ENTRY_END diff --git a/testdata/ratelimit.tdir/unbound_control.key b/testdata/ratelimit.tdir/unbound_control.key new file mode 100644 index 000000000000..753a4ef6162e --- /dev/null +++ b/testdata/ratelimit.tdir/unbound_control.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA +1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ +F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR +ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm +vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb +IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL +cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr +lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov +15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf +LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ +Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 +YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 +whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c +lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax +tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ +U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 +Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc +Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 +ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ +1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN +b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz +ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C +TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF +tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y +aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 +A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU +LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U +R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy +7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj +7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw +jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 +BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar +kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR +qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 +VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 +MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa +C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= +-----END RSA PRIVATE KEY----- diff --git a/testdata/ratelimit.tdir/unbound_control.pem b/testdata/ratelimit.tdir/unbound_control.pem new file mode 100644 index 000000000000..a1edf7017f1d --- /dev/null +++ b/testdata/ratelimit.tdir/unbound_control.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte +-----END CERTIFICATE----- diff --git a/testdata/ratelimit.tdir/unbound_server.key b/testdata/ratelimit.tdir/unbound_server.key new file mode 100644 index 000000000000..370a7bbb2f22 --- /dev/null +++ b/testdata/ratelimit.tdir/unbound_server.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== +-----END RSA PRIVATE KEY----- diff --git a/testdata/ratelimit.tdir/unbound_server.pem b/testdata/ratelimit.tdir/unbound_server.pem new file mode 100644 index 000000000000..986807310f2b --- /dev/null +++ b/testdata/ratelimit.tdir/unbound_server.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== +-----END CERTIFICATE----- diff --git a/testdata/root_key_sentinel.rpl b/testdata/root_key_sentinel.rpl index 1b66c5aac77d..2310953adf0f 100644 --- a/testdata/root_key_sentinel.rpl +++ b/testdata/root_key_sentinel.rpl @@ -175,11 +175,11 @@ REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION root-key-sentinel-not-ta-20326. IN A SECTION AUTHORITY -. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 -. 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== room. 86400 IN NSEC rs. NS DS RRSIG NSEC room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== +. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 +. 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== ENTRY_END SCENARIO_END diff --git a/testdata/rpz_nsdname.rpl b/testdata/rpz_nsdname.rpl index 08ff3c2e2f5b..1c678cc13bad 100644 --- a/testdata/rpz_nsdname.rpl +++ b/testdata/rpz_nsdname.rpl @@ -348,7 +348,7 @@ ENTRY_END STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all -REPLY QR RD RA NXDOMAIN +REPLY QR AA RD RA NXDOMAIN SECTION QUESTION gotham.aa. IN A SECTION ANSWER diff --git a/testdata/rpz_nsip.rpl b/testdata/rpz_nsip.rpl index ac132cae0996..34dbd9fef816 100644 --- a/testdata/rpz_nsip.rpl +++ b/testdata/rpz_nsip.rpl @@ -348,7 +348,7 @@ ENTRY_END STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all -REPLY QR RD RA NXDOMAIN +REPLY QR AA RD RA NXDOMAIN SECTION QUESTION gotham.aa. IN A SECTION ANSWER diff --git a/testdata/rpz_signal_nxdomain_ra.rpl b/testdata/rpz_signal_nxdomain_ra.rpl new file mode 100644 index 000000000000..b89498cf9626 --- /dev/null +++ b/testdata/rpz_signal_nxdomain_ra.rpl @@ -0,0 +1,254 @@ +; config options +server: + module-config: "respip validator iterator" + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + access-control: 192.0.0.0/8 allow + +rpz: + name: "rpz.example.com." + rpz-signal-nxdomain-ra: yes + zonefile: +TEMPFILE_NAME rpz.example.com +TEMPFILE_CONTENTS rpz.example.com +$ORIGIN example.com. +rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( + 1379078166 28800 7200 604800 7200 ) + 3600 IN NS ns1.rpz.example.com. + 3600 IN NS ns2.rpz.example.com. +$ORIGIN rpz.example.com. +a.a CNAME . +b.a CNAME . +ns1.a.rpz-nsdname CNAME . +24.0.0.0.192.rpz-nsip CNAME . +24.0.3.0.192.rpz-client-ip CNAME . +TEMPFILE_END + +stub-zone: + name: "a." + stub-addr: 10.20.30.40 +CONFIG_END + +SCENARIO_BEGIN Test RPZ qname trigger and signal NXDOMAIN with unset RA. + +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.40 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a. IN NS +SECTION ANSWER +a. IN NS ns.a. +SECTION ADDITIONAL +ns.a IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +a.a. IN TXT +SECTION ANSWER +a.a. IN TXT "upstream txt rr a.a." +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +b.a. IN TXT +SECTION ANSWER +b.a. IN TXT "upstream txt rr b.a." +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN CNAME b.a +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +d.a. IN NS +SECTION ANSWER +SECTION AUTHORITY +d.a. IN NS ns1.a. +SECTION ADDITIONAL +ns1.a. IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +e.a. IN NS +SECTION ANSWER +SECTION AUTHORITY +e.a. IN NS ns2.a. +SECTION ADDITIONAL +ns2.a. IN A 192.0.0.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +f.a. IN TXT +SECTION ANSWER +f.a. IN TXT "upstream txt rr f.a." +ENTRY_END + +RANGE_END + +RANGE_BEGIN 0 100 + ADDRESS 10.20.30.50 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d.a. IN NS +SECTION ANSWER +d.a. IN NS ns1.a. +SECTION ADDITIONAL +ns1.a. IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +d.d.a. IN TXT +SECTION ANSWER +d.d.a. IN TXT "upstream answer for d.d.a" +ENTRY_END + +RANGE_END + +RANGE_BEGIN 0 100 + ADDRESS 192.0.0.5 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e.a. IN NS +SECTION ANSWER +e.a. IN NS ns2.a. +SECTION ADDITIONAL +ns2.a. IN A 192.0.0.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +e.e.a. IN TXT +SECTION ANSWER +e.e.a. IN TXT "upstream answer for e.e.a" +ENTRY_END + +RANGE_END + +; qname trigger +STEP 10 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +a.a. IN TXT +ENTRY_END + +STEP 11 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD AA NXDOMAIN +SECTION QUESTION +a.a. IN TXT +SECTION ANSWER +ENTRY_END + +; qname trigger after cname +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +c.a. IN TXT +ENTRY_END + +STEP 21 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD AA NXDOMAIN +SECTION QUESTION +c.a. IN TXT +SECTION ANSWER +c.a. IN CNAME b.a +ENTRY_END + +; nsdname trigger +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +d.d.a. IN TXT +ENTRY_END + +STEP 31 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD AA NXDOMAIN +SECTION QUESTION +d.d.a. IN TXT +SECTION ANSWER +ENTRY_END + +; nsip trigger +STEP 40 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +e.e.a. IN TXT +ENTRY_END + +STEP 41 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD AA NXDOMAIN +SECTION QUESTION +e.e.a. IN TXT +SECTION ANSWER +ENTRY_END + +; clientip trigger +STEP 50 QUERY ADDRESS 192.0.3.1 +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +f.a. IN TXT +ENTRY_END + +STEP 51 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD NXDOMAIN +SECTION QUESTION +f.a. IN TXT +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/stream_ssl.tdir/stream_ssl.clie.conf b/testdata/stream_ssl.tdir/stream_ssl.clie.conf index 4643c6d554fb..923ab1fb5171 100644 --- a/testdata/stream_ssl.tdir/stream_ssl.clie.conf +++ b/testdata/stream_ssl.tdir/stream_ssl.clie.conf @@ -16,3 +16,7 @@ server: forward-zone: name: "." forward-addr: "127.0.0.1@@SERVPORT@#unbound" + +forward-zone: + name: "test.host." + forward-host: "unbound.server@@SERVPORT@#unbound" diff --git a/testdata/stream_ssl.tdir/stream_ssl.serv.conf b/testdata/stream_ssl.tdir/stream_ssl.serv.conf index c77e39fc5d59..a5dfcf364ec3 100644 --- a/testdata/stream_ssl.tdir/stream_ssl.serv.conf +++ b/testdata/stream_ssl.tdir/stream_ssl.serv.conf @@ -10,6 +10,8 @@ server: username: "" do-not-query-localhost: yes local-data: "www.example.com. IN A 10.20.30.40" + local-data: "unbound.server. IN A 127.0.0.1" + local-data: "test.host. IN A 1.2.3.4" ssl-port: @SERVPORT@ ssl-service-key: "unbound_server.key" ssl-service-pem: "unbound_server.pem" diff --git a/testdata/stream_ssl.tdir/stream_ssl.test b/testdata/stream_ssl.tdir/stream_ssl.test index b5bc2d911b62..39972a844d21 100644 --- a/testdata/stream_ssl.tdir/stream_ssl.test +++ b/testdata/stream_ssl.tdir/stream_ssl.test @@ -73,4 +73,38 @@ else exit 1 fi +rm -f outfile + +# test client unbound (no SSL towards it, but it does SSL to the SSL service) +# test that forward-host notation also works. +echo "> dig test.host. A IN" +dig @127.0.0.1 -p $CLIE_PORT test.host. >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + echo "SSLSERVICE" + cat unboundserv.log + echo "SSLCLIENT" + cat unboundclie.log + echo "Not OK" + exit 1 +else + echo "exit status OK" +fi +echo "> cat logfiles" +cat outfile +echo "SSLSERVICE" +cat unboundserv.log +echo "SSLCLIENT" +cat unboundclie.log +echo "> check answer" +if grep "1.2.3.4" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +rm -f outfile exit 0 diff --git a/testdata/test_ldnsrr.5 b/testdata/test_ldnsrr.5 index c6e7ea2ba549..2762ca82d327 100644 --- a/testdata/test_ldnsrr.5 +++ b/testdata/test_ldnsrr.5 @@ -172,3 +172,5 @@ uri.arpa. 3600 IN ZONEMD 2018100702 1 1 ( 1291b78ddf7669b1a39d014 root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) ; from ldns issue #121, 0.10m was parsed as 0.01m. foo. 12345 IN LOC 12 45 52.333 N 105 40 33.452 W -24m 0.1m 0.1m 0.1m +; from ldns issue #147, fix #148, tab between quoted strings. +foo 12345 IN HINFO "hohum" "weirdo" diff --git a/testdata/test_ldnsrr.c5 b/testdata/test_ldnsrr.c5 index f30aa0b7357c..e86532c3433e 100644 --- a/testdata/test_ldnsrr.c5 +++ b/testdata/test_ldnsrr.c5 @@ -212,3 +212,5 @@ uri.arpa. 3600 IN ZONEMD 2018100702 1 1 1291B78DDF7669B1A39D014D87626B709B55774C root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 03666F6F00001D00010000303900100011111182BD2D4D69530BD400988D20 foo. 12345 IN LOC 12 45 52.333 N 105 40 33.452 W -24m 0.10m 0.10m 0.10m +03666F6F00000D000100003039000D05686F68756D0677656972646F +foo. 12345 IN HINFO "hohum" "weirdo" diff --git a/util/config_file.c b/util/config_file.c index 39050f553e61..969d664b4795 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -260,7 +260,7 @@ config_create(void) cfg->val_log_level = 0; cfg->val_log_squelch = 0; cfg->val_permissive_mode = 0; - cfg->aggressive_nsec = 0; + cfg->aggressive_nsec = 1; cfg->ignore_cd = 0; cfg->serve_expired = 0; cfg->serve_expired_ttl = 0; @@ -328,9 +328,11 @@ config_create(void) cfg->ratelimit_size = 4*1024*1024; cfg->ratelimit_for_domain = NULL; cfg->ratelimit_below_domain = NULL; - cfg->outbound_msg_retry = 5; cfg->ip_ratelimit_factor = 10; cfg->ratelimit_factor = 10; + cfg->ip_ratelimit_backoff = 0; + cfg->ratelimit_backoff = 0; + cfg->outbound_msg_retry = 5; cfg->qname_minimisation = 1; cfg->qname_minimisation_strict = 0; cfg->shm_enable = 0; @@ -531,11 +533,17 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("edns-tcp-keepalive:", do_tcp_keepalive) else S_NUMBER_NONZERO("edns-tcp-keepalive-timeout:", tcp_keepalive_timeout) else S_YNO("ssl-upstream:", ssl_upstream) + else S_YNO("tls-upstream:", ssl_upstream) else S_STR("ssl-service-key:", ssl_service_key) + else S_STR("tls-service-key:", ssl_service_key) else S_STR("ssl-service-pem:", ssl_service_pem) + else S_STR("tls-service-pem:", ssl_service_pem) else S_NUMBER_NONZERO("ssl-port:", ssl_port) + else S_NUMBER_NONZERO("tls-port:", ssl_port) + else S_STR("ssl-cert-bundle:", tls_cert_bundle) else S_STR("tls-cert-bundle:", tls_cert_bundle) else S_YNO("tls-win-cert:", tls_win_cert) + else S_STRLIST("additional-ssl-port:", tls_additional_port) else S_STRLIST("additional-tls-port:", tls_additional_port) else S_STRLIST("tls-additional-ports:", tls_additional_port) else S_STRLIST("tls-additional-port:", tls_additional_port) @@ -753,6 +761,8 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_POW2("ratelimit-slabs:", ratelimit_slabs) else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor) else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor) + else S_YNO("ip-ratelimit-backoff:", ip_ratelimit_backoff) + else S_YNO("ratelimit-backoff:", ratelimit_backoff) else S_NUMBER_NONZERO("outbound-msg-retry:", outbound_msg_retry) else S_SIZET_NONZERO("fast-server-num:", fast_server_num) else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil) @@ -1029,11 +1039,19 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "edns-tcp-keepalive", do_tcp_keepalive) else O_DEC(opt, "edns-tcp-keepalive-timeout", tcp_keepalive_timeout) else O_YNO(opt, "ssl-upstream", ssl_upstream) + else O_YNO(opt, "tls-upstream", ssl_upstream) else O_STR(opt, "ssl-service-key", ssl_service_key) + else O_STR(opt, "tls-service-key", ssl_service_key) else O_STR(opt, "ssl-service-pem", ssl_service_pem) + else O_STR(opt, "tls-service-pem", ssl_service_pem) else O_DEC(opt, "ssl-port", ssl_port) + else O_DEC(opt, "tls-port", ssl_port) + else O_STR(opt, "ssl-cert-bundle", tls_cert_bundle) else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) else O_YNO(opt, "tls-win-cert", tls_win_cert) + else O_LST(opt, "additional-ssl-port", tls_additional_port) + else O_LST(opt, "additional-tls-port", tls_additional_port) + else O_LST(opt, "tls-additional-ports", tls_additional_port) else O_LST(opt, "tls-additional-port", tls_additional_port) else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first) else O_STR(opt, "tls-ciphers", tls_ciphers) @@ -1197,6 +1215,8 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain) else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor) else O_DEC(opt, "ratelimit-factor", ratelimit_factor) + else O_YNO(opt, "ip-ratelimit-backoff", ip_ratelimit_backoff) + else O_YNO(opt, "ratelimit-backoff", ratelimit_backoff) else O_UNS(opt, "outbound-msg-retry", outbound_msg_retry) else O_DEC(opt, "fast-server-num", fast_server_num) else O_DEC(opt, "fast-server-permil", fast_server_permil) diff --git a/util/config_file.h b/util/config_file.h index 18910bee39fc..c7c9a0a48e6b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -565,6 +565,10 @@ struct config_file { size_t ip_ratelimit_size; /** ip_ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */ int ip_ratelimit_factor; + /** ratelimit backoff, when on, if the limit is reached it is + * considered an attack and it backs off until 'demand' decreases over + * the RATE_WINDOW. */ + int ip_ratelimit_backoff; /** ratelimit for domains. 0 is off, otherwise qps (unless overridden) */ int ratelimit; @@ -578,6 +582,11 @@ struct config_file { struct config_str2list* ratelimit_below_domain; /** ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */ int ratelimit_factor; + /** ratelimit backoff, when on, if the limit is reached it is + * considered an attack and it backs off until 'demand' decreases over + * the RATE_WINDOW. */ + int ratelimit_backoff; + /** number of retries on outgoing queries */ int outbound_msg_retry; /** minimise outgoing QNAME and hide original QTYPE if possible */ @@ -745,6 +754,8 @@ struct config_auth { /** Always reply with this CNAME target if the cname override action is * used */ char* rpz_cname; + /** signal nxdomain block with unset RA */ + int rpz_signal_nxdomain_ra; /** Check ZONEMD records for this zone */ int zonemd_check; /** Reject absence of ZONEMD records, zone must have one */ diff --git a/util/configlexer.c b/util/configlexer.c index 194fb76c3f21..dc4afc774b75 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 355 -#define YY_END_OF_BUFFER 356 +#define YY_NUM_RULES 358 +#define YY_END_OF_BUFFER 359 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,396 +363,399 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3524] = +static const flex_int16_t yy_accept[3558] = { 0, - 1, 1, 329, 329, 333, 333, 337, 337, 341, 341, - 1, 1, 345, 345, 349, 349, 356, 353, 1, 327, - 327, 354, 2, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 354, 329, 330, 330, 331, - 354, 333, 334, 334, 335, 354, 340, 337, 338, 338, - 339, 354, 341, 342, 342, 343, 354, 352, 328, 2, - 332, 352, 354, 348, 345, 346, 346, 347, 354, 349, - 350, 350, 351, 354, 353, 0, 1, 2, 2, 2, - 2, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 1, 1, 332, 332, 336, 336, 340, 340, 344, 344, + 1, 1, 348, 348, 352, 352, 359, 356, 1, 330, + 330, 357, 2, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 357, 332, 333, 333, 334, + 357, 336, 337, 337, 338, 357, 343, 340, 341, 341, + 342, 357, 344, 345, 345, 346, 357, 355, 331, 2, + 335, 355, 357, 351, 348, 349, 349, 350, 357, 352, + 353, 353, 354, 357, 356, 0, 1, 2, 2, 2, + 2, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 329, - 0, 333, 0, 340, 0, 337, 341, 0, 352, 0, - 2, 2, 352, 348, 0, 345, 349, 0, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 332, + 0, 336, 0, 343, 0, 340, 344, 0, 355, 0, + 2, 2, 355, 351, 0, 348, 352, 0, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 352, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 355, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 130, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 139, 353, 353, 353, 353, 353, 353, 353, 352, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 130, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 140, 356, 356, 356, 356, 356, 356, 356, 355, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 112, 353, - 326, 353, 353, 353, 353, 353, 353, 353, 353, 8, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 112, 356, + 329, 356, 356, 356, 356, 356, 356, 356, 356, 8, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 131, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 144, 353, 353, 352, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 131, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 145, 356, 356, 355, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 319, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 322, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 352, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 67, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 250, 353, 14, 15, 353, - 19, 18, 353, 353, 234, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 355, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 67, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 251, 356, 14, + 15, 356, 19, 18, 356, 356, 235, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 137, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 232, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 3, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 138, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 233, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 3, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 352, 353, 353, 353, 353, 353, - 353, 353, 313, 353, 353, 312, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 336, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 355, 356, 356, + 356, 356, 356, 356, 356, 316, 356, 356, 315, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 339, 356, - 353, 353, 353, 353, 66, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 70, 353, 282, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 320, 321, 353, 353, 353, 353, 353, - 353, 353, 353, 71, 353, 353, 138, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 134, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 221, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 21, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 66, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 70, 356, 285, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 323, 324, 356, 356, + 356, 356, 356, 356, 356, 356, 71, 356, 356, 139, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 134, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 222, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 21, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 164, 353, 353, 353, - 353, 353, 352, 336, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 110, 353, 353, 353, 353, - 353, 353, 353, 290, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 190, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 165, 356, 356, 356, 356, 356, 355, 339, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 110, + 356, 356, 356, 356, 356, 356, 356, 293, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 191, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 163, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 109, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 35, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 164, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 109, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 35, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 36, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 68, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 136, - 353, 353, 353, 352, 353, 353, 353, 353, 353, 129, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 69, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 254, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 191, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 36, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 68, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 137, 356, 356, 356, 355, 356, + 356, 356, 356, 356, 129, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 69, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 255, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 192, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 57, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 272, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 57, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 273, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 61, 353, - 62, 353, 353, 353, 353, 353, 113, 353, 114, 353, - 353, 353, 353, 353, 111, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 7, 353, 353, - 353, 353, 352, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 243, 353, 353, 353, 353, 167, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 61, 356, 62, 356, 356, 356, + 356, 356, 113, 356, 114, 356, 356, 356, 356, 356, + 111, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 7, 356, 356, 356, 356, 355, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 244, 356, 356, + 356, 356, 168, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 255, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 48, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 58, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 213, 353, - 212, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 256, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 48, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 58, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 214, 356, 213, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 16, 17, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 72, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 220, - 353, 353, 353, 353, 353, 353, 116, 353, 115, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 204, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 145, 353, 353, 353, 352, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 104, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 92, + 356, 356, 356, 356, 356, 356, 356, 16, 17, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 72, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 221, 356, 356, 356, + 356, 356, 356, 116, 356, 115, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 205, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 146, 356, 356, 356, 355, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 104, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 233, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 97, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 65, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 207, 208, - 353, 353, 353, 284, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 92, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 234, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 97, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 65, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 208, 209, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 6, 353, 353, - 353, 353, 353, 353, 353, 303, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 288, 353, 353, 353, 353, 353, 353, - 314, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 45, 353, 353, 353, 353, - 47, 353, 353, 353, 93, 353, 353, 353, 353, 353, - 55, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 352, 353, 200, 353, 353, 353, 140, 353, + 287, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 6, 356, 356, 356, 356, 356, + 356, 356, 306, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 291, 356, 356, 356, 356, 356, 356, 356, 317, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 45, 356, 356, 356, 356, 47, + 356, 356, 356, 93, 356, 356, 356, 356, 356, 55, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 225, - 353, 201, 353, 353, 353, 240, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 56, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 142, 122, 353, - 123, 353, 353, 353, 353, 121, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 160, 353, 353, 53, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 271, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 202, 353, 353, 353, + 356, 355, 356, 201, 356, 356, 356, 141, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 226, 356, + 202, 356, 356, 356, 241, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 56, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 143, 122, 356, 123, + 356, 356, 356, 356, 121, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 161, 356, 356, 53, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 272, 356, 356, 356, 356, - 353, 353, 205, 353, 211, 353, 353, 353, 353, 353, - 353, 239, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 108, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 135, 353, - 353, 353, 353, 353, 353, 353, 63, 353, 353, 353, - 29, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 20, 353, 353, 353, 353, 353, 353, - 30, 39, 353, 172, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 198, 353, + 356, 356, 356, 356, 356, 203, 356, 356, 356, 356, + 356, 206, 356, 212, 356, 356, 356, 356, 356, 356, + 240, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 108, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 135, 356, + 356, 356, 356, 356, 356, 356, 356, 63, 356, 356, + 356, 29, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 20, 356, 356, 356, 356, 356, + 356, 30, 39, 356, 173, 356, 356, 356, 356, 356, - 353, 352, 353, 353, 353, 353, 353, 353, 80, 82, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 292, 353, 353, 353, 353, 251, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 124, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 159, 353, 49, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 307, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 199, + 356, 356, 355, 356, 356, 356, 356, 356, 356, 80, + 82, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 295, 356, 356, 356, 356, 252, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 124, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 160, 356, 49, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 166, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 301, 353, 353, 353, 231, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 317, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 184, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 117, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 179, 353, 192, 353, 353, 353, 353, 353, 353, - 353, 352, 353, 148, 353, 353, 353, 353, 353, 103, + 310, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 167, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 304, 356, 356, 356, 232, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 320, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 185, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 117, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 180, 356, 193, 356, 356, - 353, 353, 353, 353, 223, 353, 353, 353, 353, 353, - 353, 241, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 263, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 141, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 183, 353, 353, - 353, 353, 353, 353, 83, 353, 84, 353, 353, 353, - 353, 353, 64, 310, 353, 353, 353, 353, 353, 91, - 193, 353, 214, 353, 244, 353, 353, 206, 285, 353, - 353, 353, 353, 353, 353, 76, 353, 195, 353, 353, + 356, 356, 356, 356, 356, 355, 356, 149, 356, 356, + 356, 356, 356, 103, 356, 356, 356, 356, 224, 356, + 356, 356, 356, 356, 356, 242, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 264, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 142, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 184, 356, 356, 356, 356, 356, 356, 83, 356, + 84, 356, 356, 356, 356, 356, 356, 64, 313, 356, + 356, 356, 356, 356, 91, 194, 356, 215, 356, 245, - 353, 353, 353, 353, 9, 353, 353, 353, 353, 353, - 107, 353, 353, 353, 353, 276, 353, 353, 353, 353, - 222, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 352, 353, 353, 353, 353, 182, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 168, - 353, 291, 353, 353, 353, 353, 353, 262, 353, 353, + 356, 356, 207, 288, 356, 356, 356, 356, 356, 356, + 76, 356, 196, 356, 356, 356, 356, 356, 356, 9, + 356, 356, 356, 356, 356, 107, 356, 356, 356, 356, + 356, 277, 356, 356, 356, 356, 223, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 355, 356, 356, 356, 356, 183, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 235, - 353, 353, 353, 353, 353, 283, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 165, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 311, - 353, 194, 353, 353, 353, 353, 353, 353, 353, 353, - 75, 77, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 106, 353, 353, 353, 353, 274, 353, 353, - 353, 353, 287, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 227, 37, 31, 33, 353, + 356, 356, 356, 356, 356, 356, 169, 356, 294, 356, + 356, 356, 356, 356, 263, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 236, 356, 356, 356, + 356, 356, 286, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 166, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 314, 356, 195, + 356, 356, 356, 356, 356, 356, 356, 356, 75, 77, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 106, 356, 356, 356, 356, 356, 275, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 38, 353, 32, 34, 353, 353, 353, 353, 353, - 353, 353, 353, 102, 353, 178, 353, 353, 353, 353, - 353, 353, 353, 352, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 229, 226, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 74, 353, 353, 353, 143, - 353, 125, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 161, 50, 353, 353, 353, 344, 13, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 305, + 356, 290, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 228, 37, 31, 33, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 38, 356, 32, 34, 356, 356, 356, 356, 356, + 356, 356, 356, 102, 356, 179, 356, 356, 356, 356, + 356, 356, 356, 355, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 230, 227, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 74, 356, 356, 356, 144, + 356, 125, 356, 356, 356, 356, 356, 356, 356, 356, - 353, 308, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 12, 353, 353, 22, 353, 353, - 353, 353, 353, 280, 353, 353, 353, 353, 289, 353, - 353, 353, 78, 353, 237, 353, 353, 353, 353, 353, - 228, 353, 353, 73, 353, 353, 353, 353, 353, 353, - 23, 353, 353, 46, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 177, 176, 353, 353, - 344, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 230, 224, 353, 242, 353, 353, 293, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, + 356, 356, 162, 50, 356, 356, 356, 347, 13, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 308, 356, 311, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 12, 356, 356, 22, 356, + 356, 356, 356, 356, 356, 281, 356, 356, 356, 356, + 292, 356, 356, 356, 356, 78, 356, 238, 356, 356, + 356, 356, 356, 229, 356, 356, 73, 356, 356, 356, + 356, 356, 356, 23, 356, 356, 46, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 178, + 177, 356, 356, 347, 356, 356, 356, 356, 356, 356, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 85, 353, 353, 353, 353, 275, 353, 353, 353, - 353, 210, 353, 353, 353, 353, 353, 236, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 315, 316, 174, 353, 353, 79, 353, 353, 353, 353, - 185, 353, 353, 353, 118, 120, 119, 353, 353, 353, - 25, 353, 353, 169, 353, 171, 353, 215, 353, 353, - 353, 353, 175, 353, 353, 353, 353, 245, 353, 353, - 353, 353, 353, 353, 353, 150, 353, 353, 353, 353, + 356, 356, 356, 231, 225, 356, 243, 356, 356, 296, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 85, 356, 356, 356, 356, 356, + 276, 356, 356, 356, 356, 211, 356, 356, 356, 356, + 356, 237, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 283, 356, 356, 356, 318, 319, 175, 356, 356, + 356, 79, 356, 356, 356, 356, 186, 356, 356, 356, + 118, 120, 119, 356, 356, 356, 25, 356, 356, 170, - 353, 353, 353, 353, 353, 353, 353, 353, 253, 353, - 353, 353, 353, 353, 353, 353, 324, 353, 27, 353, - 286, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 89, 216, 353, - 353, 273, 353, 309, 353, 209, 353, 353, 353, 353, - 353, 281, 59, 353, 353, 353, 353, 353, 353, 4, - 353, 353, 353, 353, 133, 149, 353, 353, 353, 189, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 248, 40, - 41, 353, 353, 353, 353, 353, 353, 353, 294, 353, + 356, 172, 356, 216, 356, 356, 356, 356, 176, 356, + 356, 356, 356, 246, 356, 356, 356, 356, 356, 356, + 356, 151, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 254, 356, 356, 356, 356, 356, + 356, 356, 327, 356, 27, 356, 289, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 89, 217, 356, 356, 356, 274, 356, + 312, 356, 210, 356, 356, 356, 356, 356, 284, 59, + 356, 356, 356, 356, 356, 356, 4, 356, 356, 356, + 356, 133, 356, 150, 356, 356, 356, 190, 356, 356, - 353, 353, 353, 353, 353, 353, 261, 353, 353, 353, - 353, 353, 353, 353, 353, 219, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 88, 353, 60, 279, 353, 249, 353, 353, 353, 353, - 353, 11, 353, 353, 353, 353, 353, 353, 353, 353, - 132, 353, 353, 353, 353, 217, 94, 353, 353, 43, - 353, 353, 353, 353, 353, 353, 353, 353, 181, 353, - 353, 353, 353, 353, 353, 353, 152, 353, 353, 353, - 353, 252, 353, 353, 353, 353, 353, 260, 353, 353, - 353, 353, 146, 353, 353, 353, 126, 128, 127, 353, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 249, 40, 41, 356, + 356, 356, 356, 356, 356, 356, 297, 356, 356, 356, + 356, 356, 356, 356, 262, 356, 356, 356, 356, 356, + 356, 356, 356, 220, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 88, 356, + 60, 356, 280, 356, 250, 356, 356, 356, 356, 356, + 11, 356, 356, 356, 356, 356, 356, 356, 356, 132, + 356, 356, 356, 356, 356, 218, 94, 356, 356, 43, + 356, 356, 356, 356, 356, 356, 356, 356, 182, 356, - 353, 353, 96, 100, 95, 162, 353, 353, 353, 353, - 86, 353, 353, 353, 353, 353, 353, 10, 353, 353, - 353, 353, 353, 277, 318, 353, 353, 353, 353, 353, - 323, 42, 353, 353, 353, 353, 353, 180, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 101, 99, 353, 54, 353, 353, 87, - 306, 353, 353, 353, 353, 24, 353, 353, 353, 353, - 353, 203, 353, 353, 353, 353, 353, 218, 353, 353, - 353, 353, 353, 353, 353, 353, 199, 353, 353, 170, + 356, 356, 356, 356, 356, 356, 153, 356, 356, 356, + 356, 253, 356, 356, 356, 356, 356, 261, 356, 356, + 356, 356, 147, 356, 356, 356, 126, 128, 127, 356, + 356, 356, 96, 100, 95, 163, 356, 356, 356, 356, + 86, 282, 356, 356, 356, 356, 356, 356, 10, 356, + 356, 356, 356, 356, 278, 321, 356, 356, 356, 356, + 356, 356, 326, 42, 356, 356, 356, 356, 356, 181, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 101, 99, 356, 54, 356, - 81, 353, 353, 353, 353, 353, 295, 353, 353, 353, - 353, 353, 353, 353, 257, 353, 353, 256, 147, 353, - 353, 98, 51, 353, 153, 154, 157, 158, 155, 156, - 90, 304, 353, 353, 278, 353, 353, 353, 26, 353, - 173, 353, 353, 353, 353, 197, 353, 247, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 187, 186, - 44, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 302, 353, 353, 353, 353, 105, 353, + 356, 87, 309, 356, 356, 356, 356, 24, 356, 356, + 356, 356, 356, 204, 356, 356, 356, 356, 356, 356, + 219, 356, 356, 356, 356, 356, 356, 356, 356, 200, + 356, 356, 171, 81, 356, 356, 356, 356, 356, 298, + 356, 356, 356, 356, 356, 356, 356, 258, 356, 356, + 257, 148, 356, 356, 98, 51, 356, 154, 155, 158, + 159, 156, 157, 90, 307, 356, 356, 279, 136, 356, + 356, 356, 26, 356, 174, 356, 356, 356, 356, 198, + 356, 248, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 246, 353, 270, 299, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 325, 353, 52, 5, 353, - 353, 238, 353, 353, 300, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 258, 28, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 259, 353, - 353, 353, 151, 353, 353, 353, 353, 353, 353, 353, - 353, 188, 353, 196, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 296, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 322, 353, 353, 266, 353, 353, 353, 353, 353, + 356, 356, 188, 187, 44, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 305, 356, 356, + 356, 356, 105, 356, 247, 356, 271, 302, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 328, + 356, 52, 5, 356, 356, 239, 356, 356, 303, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 259, 28, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 260, 356, 356, 356, 152, 356, 356, 356, + 356, 356, 356, 356, 356, 189, 356, 197, 356, 356, - 297, 353, 353, 353, 353, 353, 353, 298, 353, 353, - 353, 264, 353, 267, 268, 353, 353, 353, 353, 353, - 265, 269, 0 + 356, 356, 356, 356, 356, 356, 356, 299, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 325, 356, 356, 267, 356, + 356, 356, 356, 356, 300, 356, 356, 356, 356, 356, + 356, 301, 356, 356, 356, 265, 356, 268, 269, 356, + 356, 356, 356, 356, 266, 270, 0 } ; static const YY_CHAR yy_ec[256] = @@ -798,17 +801,17 @@ static const YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3542] = +static const flex_int16_t yy_base[3576] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 112, 118, 123, 142, 429, 383, 96,10077, - 10077,10077, 160, 185, 116, 183, 229, 132, 175, 173, + 131, 137, 112, 118, 123, 142, 429, 383, 96,10178, + 10178,10178, 160, 185, 116, 183, 229, 132, 175, 173, 232, 50, 66, 120, 263, 275, 151, 323, 134, 375, - 416, 286, 308, 283, 126, 237, 374,10077,10077,10077, - 95, 372,10077,10077,10077, 186, 361, 373,10077,10077, - 10077, 258, 309,10077,10077,10077, 104, 293,10077, 266, - 10077, 167, 351, 281, 311,10077,10077,10077, 369, 268, - 10077,10077,10077, 146, 252, 378, 177, 0, 392, 0, + 416, 286, 308, 283, 126, 237, 374,10178,10178,10178, + 95, 372,10178,10178,10178, 186, 361, 373,10178,10178, + 10178, 258, 309,10178,10178,10178, 104, 293,10178, 266, + 10178, 167, 351, 281, 311,10178,10178,10178, 369, 268, + 10178,10178,10178, 146, 252, 378, 177, 0, 392, 0, 0, 303, 270, 235, 317, 362, 344, 384, 178, 177, 226, 420, 377, 330, 379, 402, 414, 419, 410, 453, @@ -838,755 +841,761 @@ static const flex_int16_t yy_base[3542] = 1099, 1101, 1120, 1105, 1122, 1112, 1139, 1132, 1126, 1161, 1127, 1137, 1162, 1169, 1165, 1144, 1164, 1183, 1198, 1199, 1156, 1201, 1189, 1196, 1215, 1200, 1210, 1220, 1217, 1223, - 1229, 1225, 1234, 1231, 1235, 1244, 1226, 1148, 1262,10077, - 1249, 1250, 1277, 1268, 1275, 1282, 1270, 1300, 1279, 1297, - 1283, 1293, 1312, 1348, 1396, 1306, 1302, 1313, 1320, 1304, - 10077, 1333, 1327, 1445, 1343, 1329, 1364, 1367, 1350, 1355, - 1368, 1377, 1362, 1395, 1376, 1389, 1391, 1436, 1446, 1394, + 1229, 1225, 1234, 1231, 1235, 1244, 1226, 1148, 1271,10178, + 1249, 1250, 1268, 1260, 1273, 1299, 1266, 1300, 1270, 1285, + 1293, 1308, 1309, 1348, 1396, 1295, 1329, 1310, 1313, 1331, + 10178, 1335, 1333, 1445, 1352, 1344, 1368, 1376, 1343, 1379, + 1358, 1374, 1386, 1391, 1381, 1384, 1400, 1425, 1444, 1408, - 1407, 1410, 1401, 1423, 1416, 1452, 1429, 1443, 1454, 1435, - 1465, 1450, 1478, 1499, 1474, 1473, 1486, 1492, 1501, 1505, - 1500, 1518, 1511, 1496, 1509, 1527, 1523, 1526, 1538, 1583, - 1549, 1539, 1550, 1552, 1553, 1564, 1536, 1565, 1568, 1575, - 1576, 1566, 1589, 1593, 1594, 1602, 1598, 1608, 1617, 1610, - 1603, 1605, 1634, 1635, 1641, 1631, 1627, 1628, 1636, 1649, - 1651, 1653, 1659, 1663, 1655, 1667, 1680, 1670,10077, 1684, - 10077, 1668, 1691, 1675, 1694, 1679, 1704, 1690, 1693,10077, - 1715, 1695, 1714, 1687, 1624, 1716, 1677, 1719, 1730, 1737, - 1726, 1736, 1732, 1743, 1738, 1746, 1760, 1740, 1761, 1757, + 1416, 1423, 1446, 1439, 1395, 1452, 1442, 1456, 1463, 1475, + 1471, 1466, 1487, 1501, 1483, 1481, 1489, 1493, 1504, 1509, + 1513, 1518, 1514, 1508, 1528, 1530, 1532, 1533, 1558, 1603, + 1526, 1552, 1557, 1521, 1554, 1531, 1544, 1569, 1564, 1573, + 1577, 1579, 1585, 1570, 1587, 1596, 1598, 1614, 1623, 1618, + 1604, 1606, 1629, 1631, 1651, 1628, 1612, 1635, 1645, 1661, + 1663, 1662, 1658, 1672, 1669, 1644, 1675, 1655,10178, 1680, + 10178, 1684, 1686, 1685, 1689, 1688, 1712, 1699, 1702,10178, + 1700, 1704, 1703, 1710, 1642, 1725, 1715, 1730, 1726, 1747, + 1745, 1729, 1739, 1750, 1733, 1744, 1760, 1770, 1762, 1768, - 1759, 1764, 1777, 1774, 1785, 1767, 1773, 1784, 1824,10077, - 1776, 1781, 1799, 1818, 1801, 1810, 1819, 1827, 1851, 1806, - 1834, 1853, 1846, 1858, 1849, 1852, 1871, 1861, 1866, 1880, - 1867, 1888, 1882, 1890, 1885, 1903, 1887, 1883, 1913, 1911, - 1907, 1908, 1915,10077, 1916, 1924, 1932, 1927, 1929, 1922, - 1938, 1944, 1945, 1943, 1935, 1954, 1971, 1950, 1968, 1622, - 1951, 1963, 1984, 1970, 1966, 1972, 1965, 1978, 1988, 2003, - 1990, 2021, 2001, 2004, 2008, 2025, 2023, 2024, 2030, 2032, - 2013, 2017, 2033, 2037, 2026, 2035, 2044, 2049, 2050, 2039, - 2051, 2070, 2048, 2063, 2061, 2075, 2069, 2085, 2072, 2071, + 1756, 1771, 1775, 1789, 1769, 1796, 1777, 1780, 1795, 1835, + 10178, 1790, 1791, 1798, 1825, 1811, 1826, 1817, 1838, 1862, + 1832, 1845, 1864, 1837, 1890, 1860, 1863, 1881, 1869, 1866, + 1896, 1874, 1902, 1885, 1893, 1889, 1908, 1906, 1912, 1910, + 1919, 1921, 1923, 1935,10178, 1936, 1939, 1947, 1839, 1932, + 1942, 1937, 1946, 1961, 1959, 1954, 1962, 1978, 1955, 1982, + 1991, 1926, 1981, 1997, 1983, 1996, 1984, 1985, 1989, 2010, + 2019, 2014, 2034, 2018, 2015, 2032, 2006, 2036, 2039, 2024, + 2048, 2023, 2037, 2050, 2042, 2033, 2046, 2064, 2051, 2045, + 2063, 2066, 2089, 2065, 2083, 2078, 2081, 2074, 2097, 2084, - 2084, 2074, 2088, 2097, 2096, 2098, 2091, 2125, 2108, 2120, - 2111, 2118, 2122, 2135, 2132, 2124,10077, 2114, 2141, 2154, - 2161, 2153, 2166, 2167, 2155, 2152, 2168, 2163, 2173, 2181, - 2183, 2177, 2188, 2185, 2193, 2202, 2204, 2147, 2212, 2214, - 1800, 2219, 2220, 2203, 2210, 2213, 2230, 2223, 2196, 2248, - 2231, 2229, 2236, 2250, 2265, 2251, 2254, 2266, 2273, 2257, - 2263, 2269, 2275, 2278, 2280, 2301, 2288, 2296, 2305, 2316, - 2317, 2299, 2307, 2302, 2323, 2312, 2315, 2322, 2334, 2335, - 2332, 2337, 2329, 2339, 2343, 2345, 2350, 2371, 2360, 2376, - 2359, 2364, 2361, 2365, 2368, 2380, 2390, 2386, 2381, 2391, + 2079, 2102, 2101, 2103, 2111, 2094, 2112, 2108, 2129, 2115, + 2135, 2125, 2134, 2146, 2148, 2152, 2130,10178, 2159, 2156, + 2168, 2170, 2176, 2179, 2180, 2172, 2173, 2177, 2189, 2200, + 2167, 2190, 2201, 2194, 2198, 2204, 2215, 2214, 2227, 2228, + 2230, 2237, 2235, 2239, 2225, 2231, 2236, 2251, 2240, 2253, + 2263, 2254, 2266, 2248, 2271, 2279, 2272, 2274, 2289, 2293, + 2265, 2288, 2286, 2290, 2301, 2298, 2300, 2320, 2324, 2314, + 2325, 2344, 2321, 2306, 2341, 2327, 2353, 2342, 2345, 2348, + 2337, 2354, 2350, 2357, 2367, 2364, 2370, 2368, 2373, 2393, + 2383, 2394, 2382, 2390, 2387, 2388, 2395, 2408, 2414, 2406, - 2396, 2393, 2417, 2405, 2424, 2423, 2416, 2410, 2434, 2421, - 2428, 2431, 2440, 2450, 2446, 2460, 2457, 2246, 2461, 2470, - 2451, 2472, 2462, 2454, 2467, 2473, 2443, 2477, 2480, 2497, - 2491, 2499, 2496, 2500, 2492, 2515, 2516, 2520, 2524, 2512, - 10077, 2503, 2536, 2526, 2530, 2533, 2537, 2532, 2538, 2547, - 2551, 2548, 2542, 2556, 2602,10077, 2553,10077,10077, 2554, - 10077,10077, 2561, 2573,10077, 2585, 2581, 2583, 2582, 2600, - 2615, 2608, 2578, 2606, 2605, 2635, 2662, 2630, 2640, 2634, - 2626, 2652, 2641, 2682, 2668, 2651, 2671, 2672, 2633, 2685, - 2710, 2677, 2693, 2691, 2711, 2718, 2712, 2720, 2721, 2722, + 2412, 2419, 2429, 2411, 2431, 2426, 2441, 2445, 2438, 2443, + 2433, 2459, 2456, 2450, 2463, 2465, 2474, 2475, 2477, 2467, + 2490, 2492, 2469, 2496, 2489, 2485, 2501, 2494, 2518, 2515, + 2524, 2525, 2517, 2523, 2519, 2521, 2522, 2536, 2556, 2539, + 2548, 2546,10178, 2541, 2545, 2544, 2563, 2562, 2551, 2559, + 2584, 2561, 2578, 2575, 2570, 2579, 2625,10178, 2583,10178, + 10178, 2591,10178,10178, 2604, 2609,10178, 2622, 2605, 2623, + 2629, 2642, 2650, 2635, 2640, 2649, 2648, 2621, 2695, 2659, + 2660, 2632, 2664, 2677, 2674, 2685, 2683, 2684, 2712, 2704, + 2693, 2724, 2733, 2728, 2720, 2722, 2731, 2741, 2738, 2747, - 2725, 2724, 2713, 2730, 2708, 2737, 2733, 2757, 2747, 2751, - 2766, 2752, 2759, 2750, 2774, 2768, 2775, 2781,10077, 2777, - 2785, 2769, 2792, 2786, 2795, 2800, 2799, 2798, 2807, 2810, - 2808, 2793, 2809, 2813, 2821, 2824, 2823, 2826, 2829, 2822, - 2838, 2847, 2857, 2835,10077, 2850, 2851, 2837, 2858, 2862, - 2864, 2865, 2866, 2874, 2873, 2883, 2908, 2878, 2887, 2849, - 2895, 2888, 2893, 2910,10077, 2914, 2917, 2897, 2920, 2906, - 2922, 2926, 2928, 2931, 2947, 2907, 2932, 2943, 2941, 2937, - 2953, 2954, 2949, 2948, 2957, 2973, 2964, 2968, 2980, 2986, - 2977, 2970, 2992, 2983, 2994, 2988, 2989, 2995, 2998, 3010, + 2748, 2752, 2754, 2745, 2740, 2762, 2751, 2763, 2765, 2760, + 2770, 2777, 2775, 2778, 2783, 2772, 2806, 2802, 2808, 2811, + 10178, 2809, 2818, 2797, 2820, 2812, 2824, 2822, 2821, 2823, + 2826, 2828, 2829, 2839, 2835, 2838, 2852, 2843, 2844, 2849, + 2846, 2854, 2864, 2874, 2880, 2858,10178, 2869, 2873, 2865, + 2888, 2885, 2895, 2892, 2896, 2881, 2902, 2890, 2918, 2900, + 2925, 2913, 2912, 2923, 2919, 2917, 2945,10178, 2934, 2942, + 2930, 2944, 2933, 2946, 2947, 2955, 2959, 2971, 2941, 2961, + 2969, 2970, 2907, 2975, 2973, 2974, 2976, 2991, 2993, 3000, + 2996, 3004, 3013, 3002, 3014, 3006, 3018, 3016, 3019, 3003, - 3025, 3012, 3029, 3013, 3016, 3037, 3038, 3030, 3023, 3035, - 3039, 3046, 3048, 3051, 3053, 3056, 3050, 3045, 3065, 3061, - 3070, 3066, 3074, 3086, 3096, 3072, 3094, 3099, 3083, 3092, - 3110, 3090,10077, 3106, 3093,10077, 3111, 3108, 3119, 3165, - 3117, 3144, 3135, 3122, 3127, 3156, 3138, 3155, 3158, 3164, - 3161, 3157, 3175, 3190, 3183, 3199, 3188, 3202, 3195, 3191, - 3197, 3210, 3217, 3215, 3146, 3233, 3172, 381, 3235, 3218, - 3224, 3230, 3275, 3241, 3227, 3238, 3246, 3260, 3250, 3263, - 3270, 3264, 3247, 3265, 3280, 3277, 3304, 3287, 3288, 3302, - 3307, 3312, 3300, 3313, 3315,10077, 3324, 3329, 3319, 3336, + 3028, 3029, 3033, 3055, 3030, 3058, 3040, 3042, 3063, 3064, + 3066, 3053, 3067, 3068, 3056, 3074, 3069, 3083, 3081, 3080, + 3090, 3091, 3085, 3088, 3095, 3104, 3117, 3121, 3111, 3115, + 3122, 3102, 3107, 3132, 3136,10178, 3134, 3125,10178, 3130, + 3145, 3146, 3192, 3177, 3152, 3154, 3141, 3150, 3180, 3172, + 3179, 3183, 3198, 3191, 3162, 3202, 3205, 3211, 3218, 3215, + 3229, 3217, 3220, 3232, 3228, 3243, 3247, 3256, 3262, 3190, + 381, 3267, 3244, 3250, 3245, 3296, 3253, 3273, 3268, 3272, + 3280, 3286, 3279, 3285, 3303, 3300, 3306, 3305, 3293, 3329, + 3314, 3318, 3323, 3320, 3333, 3335, 3350, 3337,10178, 3345, - 3334, 3342, 3343, 3331,10077, 3340, 3344, 3339, 3359, 3351, - 3345, 3368, 3361, 3365, 3363, 3372, 3376, 3380, 3387, 3377, - 3401,10077, 3382,10077, 3388, 3397, 3400, 3399, 3408, 3412, - 3404, 3428, 3429,10077,10077, 3431, 3414, 3437, 3442, 3445, - 3439, 3432, 3440,10077, 3427, 3473,10077, 3475, 3459, 3457, - 3458, 3461, 3463, 3469, 3468, 3492, 3474, 3496, 3484, 3488, - 3498,10077, 3504, 3495, 3508, 3509, 3501, 3515, 3522, 3525, - 3506,10077, 3523, 3521, 3526, 3543, 3546, 3538, 3540, 3552, - 3559, 3544, 3542, 3548, 3563, 3564, 3581, 3583, 3585, 3567, - 3579, 3586, 3587, 3588,10077, 3591, 3580, 3582, 3605, 3611, + 3352, 3340, 3353, 3356, 3373, 3365, 3368,10178, 3362, 3366, + 3372, 3378, 3367, 3382, 3385, 3384, 3392, 3393, 3395, 3399, + 3409, 3410, 3412, 3396,10178, 3405,10178, 3411, 3422, 3419, + 3428, 3427, 3426, 3435, 3452, 3453,10178,10178, 3454, 3451, + 3462, 3466, 3469, 3456, 3455, 3475,10178, 3478, 3472,10178, + 3497, 3473, 3477, 3486, 3492, 3489, 3482, 3496, 3515, 3500, + 3517, 3499, 3524, 3516,10178, 3531, 3533, 3518, 3535, 3541, + 3521, 3543, 3544, 3545, 3542,10178, 3547, 3559, 3555, 3560, + 3565, 3569, 3566, 3580, 3588, 3567, 3571, 3577, 3592, 3586, + 3596, 3605, 3606, 3598, 3604, 3611, 3613, 3619,10178, 3615, - 3597, 3594, 3608, 3604, 3601, 3623, 3624, 3625, 3628, 3619, - 3629, 3615, 3644, 3645, 3642, 3643, 3658, 3640, 3651, 3650, - 3655, 91, 3656, 3667, 3660, 3663,10077, 3672, 3666, 3687, - 3675, 3692, 3678, 128, 3682, 3689, 3699, 3703, 3701, 3712, - 3693, 3722, 3726, 3716, 3724, 3725, 3728, 3720, 3730, 3731, - 3735, 3745, 3739, 3752, 3749,10077, 3742, 3751, 3756, 3755, - 3769, 3760, 3784,10077, 3777, 3785, 3783, 3790, 3792, 3779, - 3802, 3795, 3791, 3812, 3818, 3815, 3816, 3819, 3817, 3822, - 3835,10077, 3837, 3842, 3848, 3832, 3851, 3836, 3857, 3850, - 3855, 3849, 3882, 3871, 3880, 3861, 3872, 3869, 3883, 3896, + 3610, 3607, 3626, 3624, 3608, 3630, 3632, 3625, 3631, 3645, + 3646, 3633, 3656, 3647, 3651, 3660, 3667, 3669, 3666, 3675, + 3682, 3670, 3671, 3672, 3668, 91, 3673, 3692, 3695, 3678, + 10178, 3696, 3704, 3702, 3712, 3716, 3700, 128, 3711, 3709, + 3722, 3727, 3726, 3733, 3730, 3731, 3745, 3739, 3741, 3754, + 3758, 3751, 3753, 3759, 3760, 3752, 3762, 3761, 3774,10178, + 3770, 3781, 3782, 3784, 3798, 3785, 3802,10178, 3806, 3812, + 3809, 3815, 3817, 3832, 3820, 3811, 3831, 3826, 3847, 3836, + 3842, 3851, 3850, 3857, 3848,10178, 3860, 3861, 3865, 3869, + 3875, 3881, 3863, 3871, 3888, 3882, 3902, 3891, 3893, 3892, - 3888, 3862, 3884, 3899, 3897, 3893, 3913, 3910, 3915, 3900, - 3921, 3943, 3924,10077, 3946, 3930, 3933, 3931, 3935, 3937, - 3949, 3938, 3983, 3948, 3965, 3971, 3968, 4011, 3973, 3978, - 3961, 3990, 3994, 3995, 3998, 3996, 4010, 4008, 3981, 4026, - 4045, 4013, 4014, 4049, 4043, 4035, 4051, 4044, 4046, 4054, - 4068, 4060, 4062, 4061, 4093, 4085, 4053, 4095, 4070, 4087, - 10077, 4099, 4089, 4088, 4091, 4110, 4112, 4097, 4123, 4118, - 4126, 4122, 4124, 4130, 4147, 4151, 4146, 4142, 4153, 4149, - 4155, 4159, 4157, 4140, 4167, 3916, 4162, 4160, 4186,10077, - 4192, 4191, 4178, 4189, 4200, 4181, 4203, 4205, 4202, 4190, + 3898, 3913, 3908, 3915, 3895, 3779, 3916, 3918, 3930, 3931, + 3928, 3937, 3932, 3925, 3941, 3959, 3940,10178, 3967, 3954, + 3957, 3962, 3952, 3964, 3977, 3963, 3993, 3973, 3981, 3988, + 3984, 4028, 3990, 3996, 4011, 4012, 4016, 4017, 4015, 4022, + 4030, 4044, 4004, 4049, 4056, 4038, 4048, 4019, 4060, 4053, + 4062, 4065, 4063, 4075, 4087, 4086, 4080, 4082, 4114, 4092, + 4085, 4109, 4106, 4104,10178, 4094, 4102, 4120, 4118, 4140, + 4137, 4121, 4144, 4125, 4142, 4141, 4153, 4148, 4158, 4155, + 4165, 4166, 4167, 4179, 4176, 4182, 4188, 4178, 4161, 4192, + 4198, 4185, 4202, 4205,10178, 4211, 4215, 4209, 4212, 4210, - 4193, 4210, 4209, 4215, 4222, 4218, 4220, 4217, 4238, 4237, - 4224, 4232,10077, 4249, 4241, 4255, 4247, 4258, 4264, 4266, - 4251, 4270, 4268, 4279, 4262, 4286, 4287, 4288,10077, 4291, - 4305, 4298, 4299, 4310, 4300, 4289, 4306, 4312, 4302,10077, - 4315, 4316, 4313, 4326, 4318, 4325, 4329, 4351, 4349,10077, - 4356, 4340, 4337, 4339, 4346, 4363, 4344, 4368, 4352, 4366, - 4370, 4375, 4374, 4371, 4387,10077, 4381, 4410, 4385, 4397, - 4401, 4399, 4396, 4402, 4426, 4416, 4430, 4408,10077, 4421, - 4435, 4440, 4446, 4423, 4428, 4438, 4455, 4458, 4450, 4444, - 4465, 4452,10077, 4461, 4462, 4466, 4473, 4482, 4476, 4477, + 4206, 4216, 4229, 4235, 4223, 4224, 4225, 4231, 4234, 4232, + 4257, 4243, 4269, 4261, 4256, 4272, 4250,10178, 4275, 4264, + 4277, 4271, 4281, 4289, 4295, 4291, 4298, 4306, 4305, 4293, + 4308, 4312, 4302,10178, 4322, 4328, 4321, 4331, 4333, 4334, + 4325, 4329, 4345, 4327,10178, 4346, 4332, 4352, 4342, 4348, + 4353, 4369, 4370, 4360,10178, 4386, 4371, 4363, 4372, 4382, + 4374, 4384, 4399, 4387, 4379, 4390, 4411, 4405, 4397, 4417, + 10178, 4406, 4428, 4412, 4427, 4429, 4426, 4431, 4433, 4454, + 4441, 4443, 4447,10178, 4470, 4465, 4455, 4476, 4460, 4457, + 4467, 4475, 4486, 4472, 4478, 4495, 4481,10178, 4497, 4496, - 4481, 4493, 4490, 4491, 4498, 4499, 4500, 4497, 4517, 4521, - 4524, 4513, 4509, 4525, 4518, 4520, 4541, 4533, 4537, 4559, - 4564, 4549, 4565, 4567, 4568, 4554, 4548, 4573, 4576, 4577, - 4584, 4581, 4586,10077, 4583, 4585, 4579, 4580, 4590, 4604, - 4605, 4592, 4621, 4603, 4616, 4628, 4613, 4615, 4641, 4644, - 4626, 4636, 4638, 4639, 4643, 4651, 4640, 4642, 4654, 4679, - 4670, 4660, 4650, 4687, 4669, 4684, 4696, 4673, 4674, 4685, - 4686, 4689, 4695, 4697, 4683, 4720, 4723, 4710, 4711, 4715, - 4728, 4733, 4734, 4736, 4731, 4732, 4738, 4767,10077, 4725, - 4757, 4749, 4752, 4758, 4775, 4776, 4782, 4765, 4770, 4785, + 4502, 4503, 4505, 4508, 4515, 4521, 4525, 4517, 4524, 4531, + 4535, 4539, 4530, 4541, 4548, 4551, 4547, 4542, 4558, 4570, + 4564, 4575, 4560, 4585, 4593, 4594, 4581, 4598, 4596, 4597, + 4588, 4589, 4600, 4606, 4614, 4619, 4616, 4627,10178, 4618, + 4625, 4626, 4620, 4622, 4636, 4624, 4633, 4641, 4637, 4651, + 4643, 4644, 4653, 4679, 4681, 4662, 4686, 4664, 4669, 4684, + 4668, 4671, 4674, 4685, 4697, 4699, 4696, 4692, 4702, 4706, + 4701, 4710, 4708, 4713, 4717, 4719, 4720, 4728, 4729, 4726, + 4721, 4748, 4743, 4745, 4746, 4757, 4760, 4756, 4763, 4766, + 4765, 4768, 4780,10178, 4753, 4791, 4785, 4777, 4787, 4802, - 4784, 4789, 4778, 4777, 4797, 4794, 4792, 4818,10077, 4805, - 10077, 4807, 4821, 4829, 4832, 4811,10077, 4835,10077, 4833, - 4837, 4824, 4827, 4845,10077, 4839, 4825, 4848, 4838, 4851, - 4875, 4862, 4858, 4863, 4878, 4866, 4885, 4872, 4869, 4896, - 4867, 4895, 4890, 4902, 4903, 4919, 4905, 4900, 4922, 4908, - 4930, 4912, 4906, 4929, 4932, 4918, 4939,10077, 4941, 4947, - 4949, 4955, 4938, 4951, 4956, 4953, 4961, 4959, 4978, 4980, - 4971, 4974, 4990, 4983, 4988, 4989, 5001, 4999, 5000, 5002, - 5013,10077, 5010, 5014, 5006, 5017,10077, 5027, 5011, 5033, - 5038, 5028, 5029, 5030, 5040, 5052, 5046, 5036, 5051, 5078, + 4805, 4816, 4804, 4807, 4821, 4812, 4811, 4818, 4808, 4823, + 4824, 4832, 4826, 4836,10178, 4838,10178, 4837, 4835, 4853, + 4830, 4846,10178, 4861,10178, 4867, 4869, 4855, 4859, 4860, + 10178, 4874, 4851, 4864, 4880, 4885, 4891, 4893, 4879, 4890, + 4910, 4899, 4894, 4914, 4906, 4916, 4903, 4918, 4933, 4925, + 4926, 4941, 4932, 4929, 4945, 4937, 4953, 4940, 4950, 4952, + 4966, 4956, 4973,10178, 4982, 4983, 4972, 4987, 4979, 4976, + 4974, 4997, 4977, 4998, 5006, 5003, 5000, 5009, 5011, 5019, + 5021, 5012, 5035, 5036, 5045, 5022, 5050,10178, 5038, 5031, + 5047, 5048,10178, 5046, 5033, 5060, 5069, 5053, 5058, 5056, - 5063, 5072, 5073,10077, 5059, 5080, 5062, 5079, 5083, 5093, - 5098, 5089, 5100, 5112, 5102, 5110, 5104, 5106, 5099, 5114, - 5119, 5135, 5137, 5140, 5131, 5143, 5125, 5142, 5150, 5149, - 5138, 5133, 5152, 5139, 5141, 5158, 5164, 5166, 5162, 5169, - 5186, 5175, 5183,10077, 5180, 5185, 5182, 5206, 5196, 5202, - 5200, 5211, 5205,10077, 5203, 5208, 5229, 5219, 5235, 5222, - 5227, 5215, 5230, 5242, 5244, 5233, 5261, 5249,10077, 5257, - 10077, 5254, 5271, 5280, 5282, 5275, 5267, 5286, 5283, 5278, - 5276, 5288, 5305, 5306, 5298, 5303, 5312, 5304, 5315, 5320, - 5301, 5326, 5330, 5314, 5332, 5322, 5338, 5339, 5363, 5357, + 5079, 5085, 5072, 5077, 5075, 5102, 5096, 5087, 5107,10178, + 5091, 5106, 5103, 5112, 5121, 5129, 5130, 5131, 5139, 5142, + 5146, 5144, 5132, 5133, 5135, 5141, 5147, 5157, 5169, 5170, + 5174, 5180, 5159, 5178, 5185, 5184, 5172, 5167, 5173, 5171, + 5181, 5188, 5199, 5203, 5198, 5200, 5218, 5205, 5226,10178, + 5216, 5222, 5225, 5208, 5217, 5230, 5236, 5227, 5245,10178, + 5242, 5247, 5253, 5250, 5269, 5244, 5261, 5252, 5260, 5272, + 5277, 5283, 5286, 5284,10178, 5294,10178, 5291, 5303, 5301, + 5307, 5308, 5297, 5323, 5312, 5318, 5310, 5327, 5335, 5339, + 5321, 5330, 5342, 5333, 5363, 5355, 5296, 5349, 5354, 5350, - 5348,10077,10077, 5343, 5351, 5370, 5358, 5364, 5372, 5379, - 5393, 5376, 5365, 5388, 5395, 5416,10077, 5398, 5399, 5396, - 5419, 5422, 5410, 5427, 5435, 5426, 5420, 5438, 5436,10077, - 5430, 5445, 5440, 5439, 5461, 5449,10077, 5448,10077, 5441, - 5454, 5455, 5463, 5475, 5469, 5472, 5483, 5476, 5479, 5481, - 5494, 5509, 5514, 5498, 5513, 5497, 5500, 5504, 5526, 5516, - 5519, 5506, 5521, 5512,10077, 5532, 5527, 5531, 5544, 5540, - 5546, 5556, 5543, 5542,10077, 5555, 5554, 5569, 5568, 5562, - 5575, 5567, 5573, 5578, 5584, 5587, 5591, 5594, 5596,10077, - 5590, 5583, 5620, 5604, 5611, 5613, 5622, 5623, 5627,10077, + 5367, 5356, 5371, 5368, 5392, 5381, 5377,10178,10178, 5378, + 5382, 5395, 5390, 5401, 5413, 5419, 5412, 5426, 5411, 5415, + 5417, 5454,10178, 5438, 5428, 5437, 5445, 5446, 5398, 5439, + 5467, 5473, 5464, 5461, 5476, 5468,10178, 5458, 5466, 5481, + 5470, 5489, 5487,10178, 5482,10178, 5485, 5494, 5496, 5491, + 5501, 5502, 5507, 5518, 5509, 5510, 5516, 5532, 5540, 5544, + 5528, 5546, 5536, 5534, 5531, 5548, 5547, 5549, 5542, 5554, + 5566,10178, 5562, 5545, 5574, 5577, 5568, 5580, 5581, 5587, + 5567,10178, 5589, 5593, 5595, 5591, 5604, 5599, 5605, 5594, + 5609, 5610, 5620, 5631, 5623, 5627,10178, 5621, 5622, 5646, - 5632, 5625, 5644, 5641, 5630, 5643, 5648, 5635, 5636, 5647, - 5649, 5661, 5668, 5670, 5669, 5662, 5675, 5689, 5663, 5700, - 5682, 5676, 5686, 5704, 5694,10077, 5701, 5703, 5707, 5697, - 5724, 5719, 5728, 5736, 5737, 5721, 5740, 5742, 5731, 5738, - 5745, 5754, 5753, 5750, 5758,10077, 5776, 5755, 5779, 5770, - 5762, 5780, 5778, 5771, 5785, 5792, 5781, 5774, 5789, 5799, - 5808, 5806, 5818, 5815, 5805, 5812, 5817, 5820, 5821,10077, - 5851, 5826, 5835, 5847, 5832, 5845, 5863, 5856, 5846, 5848, - 5871, 5853, 5880, 5862, 5864, 5883, 5885, 5868,10077,10077, - 5894, 5872, 5891,10077, 5892, 5893, 5907, 5889, 5903, 5896, + 5632, 5625, 5647, 5645, 5654, 5656,10178, 5655, 5659, 5669, + 5663, 5664, 5673, 5674, 5658, 5666, 5671, 5679, 5687, 5694, + 5698, 5696, 5695, 5704, 5711, 5712, 5736, 5713, 5702, 5727, + 5684, 5722,10178, 5723, 5734, 5730, 5731, 5750, 5758, 5754, + 5756, 5762, 5744, 5765, 5766, 5763, 5775, 5776, 5786, 5783, + 5771, 5785,10178, 5781, 5777, 5805, 5801, 5782, 5813, 5817, + 5798, 5814, 5820, 5811, 5800, 5824, 5825, 5834, 5831, 5810, + 5852, 5822, 5832, 5840, 5859, 5848,10178, 5878, 5856, 5857, + 5853, 5863, 5861, 5886, 5880, 5882, 5873, 5885, 5884, 5895, + 5888, 5892, 5903, 5906, 5897,10178,10178, 5918, 5900, 5911, - 5910, 5915, 5920, 5909, 5930, 5912, 5924,10077, 5948, 5921, - 5950, 5934, 5939, 5955, 5957,10077, 5941, 5968, 5964, 5965, - 5962, 5949, 5953, 5966, 5976, 5956, 5981, 5984, 5993, 5995, - 5982, 5989, 5990,10077, 5998, 5992, 6008, 6000, 5996, 6009, - 10077, 6011, 6022, 6027, 6033, 6023, 6043, 6040, 6036, 6046, - 6035, 6034, 6045, 6053, 6049, 6057, 6061, 6038, 6060, 6067, - 6063, 6073, 6089, 6091, 6093,10077, 6090, 6087, 6095, 6101, - 10077, 6102, 6111, 6112,10077, 6117, 6105, 6116, 6122, 6128, - 10077, 6123, 6106, 6124, 6126, 6120, 6146, 6130, 6151, 6140, - 6137, 6139, 6155, 6153,10077, 6157, 6149, 6166,10077, 6167, + 10178, 5919, 5905, 5939, 5924, 5936, 5921, 5934, 5943, 5945, + 5930, 5957, 5933, 5946,10178, 5944, 5960, 5948, 5968, 5967, + 5969, 5976,10178, 5963, 5973, 5979, 5975, 5984, 5971, 5985, + 5994, 5987, 6005, 5992, 5990, 6012, 6027, 6028, 6009, 6015, + 6021,10178, 6018, 6022, 6042, 6033, 6026, 6032, 6019,10178, + 6039, 6059, 6061, 6064, 6066, 6067, 6068, 6065, 6073, 6077, + 6069, 6060, 6096, 6085, 6087, 6089, 6116, 6095, 6100, 6112, + 6106, 6118, 6120, 6122,10178, 6128, 6140, 6111, 6130,10178, + 6135, 6159, 6125,10178, 6134, 6139, 6136, 6148, 6155,10178, + 6157, 6166, 6161, 6171, 6149, 6176, 6158, 6182, 6179, 6162, - 6173, 6175, 6177, 6161, 6190, 6183, 6186, 6193, 6194,10077, - 6200,10077, 6204, 6197, 6210,10077, 6202, 6213, 6201, 6212, - 6226, 6217, 6218, 6216, 6215, 6227, 6239, 6233, 6236, 6252, - 6253, 6262, 6241, 6260, 6243, 6250,10077, 6272, 6249, 6281, - 6245, 6270, 6286, 6289, 6282, 6288, 6291,10077,10077, 6302, - 10077, 6307, 6296, 6298, 6305,10077, 6309, 6292, 6331, 6318, - 6326, 6336, 6322, 6342, 6339,10077, 6343, 6345,10077, 6329, - 6344, 6349, 6341, 6353, 6337, 6358, 6356, 6366, 6367, 6369, - 6377, 6376, 6380, 6371, 6384, 6394,10077, 6390, 6402, 6408, - 6395, 6396, 6411, 6403, 6407, 6416,10077, 6423, 6430, 6424, + 6175, 6185, 6192,10178, 6193, 6191, 6189,10178, 6208, 6212, + 6214, 6215, 6203, 6229, 6219, 6221, 6222, 6218,10178, 6231, + 10178, 6230, 6232, 6242,10178, 6235, 6239, 6256, 6264, 6258, + 6260, 6263, 6269, 6273, 6255, 6270, 6259, 6257, 6285, 6288, + 6286, 6280, 6292, 6287, 6294,10178, 6310, 6291, 6314, 6297, + 6325, 6318, 6319, 6312, 6324, 6321,10178,10178, 6330,10178, + 6337, 6339, 6343, 6346,10178, 6348, 6351, 6315, 6352, 6367, + 6345, 6353, 6376, 6373,10178, 6377, 6382,10178, 6361, 6379, + 6392, 6387, 6386, 6375, 6395, 6390, 6396, 6400, 6404, 6413, + 6411, 6417, 6407, 6420, 6439,10178, 6410, 6423, 6424, 6449, - 6439, 6438,10077, 6437,10077, 6435, 6440, 6448, 6452, 6451, - 6461,10077, 6466, 6463, 6474, 6456, 6479, 6483, 6481, 6487, - 6471, 6473, 6476, 6499, 6497, 6494, 6493, 6522, 6517,10077, - 6508, 6501, 6530, 6532, 6516, 6518, 6541, 6534, 6535, 6528, - 6540, 6547, 6551, 6549, 6552, 6560, 6565, 6554,10077, 6573, - 6584, 6567, 6589, 6579, 6592, 6581,10077, 6583, 6597, 6598, - 10077, 6594, 6606, 6596, 6571, 6609, 6613, 6617, 6621, 6614, - 6624, 6628, 6640,10077, 6630, 6634, 6629, 6647, 6654, 6641, - 10077,10077, 6665,10077, 6669, 6655, 6668, 6662, 6660, 6679, - 6663, 6682, 6693, 6676, 6681, 6695, 6692, 6701,10077, 6698, + 6437, 6434, 6456, 6460, 6447,10178, 6464, 6468, 6453, 6472, + 6481,10178, 6466,10178, 6482, 6480, 6478, 6499, 6484, 6412, + 10178, 6504, 6496, 6512, 6487, 6514, 6516, 6515, 6517, 6507, + 6511, 6528, 6526, 6527, 6523, 6539, 6562, 6550,10178, 6541, + 6547, 6564, 6566, 6554, 6555, 6549, 6576, 6568, 6577, 6572, + 6593, 6580, 6571, 6585, 6604, 6575, 6603, 6596,10178, 6611, + 6607, 6620, 6597, 6626, 6613, 6624, 6617,10178, 6627, 6632, + 6643,10178, 6642, 6630, 6649, 6661, 6644, 6645, 6647, 6651, + 6654, 6659, 6653, 6678,10178, 6672, 6675, 6671, 6688, 6692, + 6694,10178,10178, 6690,10178, 6695, 6681, 6698, 6689, 6702, - 6706, 6707, 6735, 6709, 6718, 6713, 6715, 6711,10077,10077, - 6732, 6738, 6740, 6746, 6747, 6742, 6733, 6752, 6750, 6756, - 6761, 6758, 6773,10077, 6766, 6767, 6768, 6769,10077, 6776, - 6781, 6775, 6777, 6800, 6788, 6791, 6790, 6804, 6799, 6811, - 6808, 6814, 6815, 6796, 6825, 6818, 6827, 6835, 6831, 6832, - 6824,10077, 6845, 6836, 6841, 6842, 6851, 6852, 6856, 6863, - 6854, 6864, 6869,10077, 6871,10077, 6879, 6880, 6883, 6893, - 6877, 6899, 6900, 6906, 6901, 6903, 6902, 6907, 6918, 6921, - 6925, 6916, 6924, 6938, 6944, 6940, 6946, 6942,10077, 6949, - 6935, 6941, 6945, 6959, 6960, 6951, 6963, 6967, 6975, 6962, + 6717, 6712, 6723, 6733, 6719, 6716, 6734, 6736, 6729,10178, + 6728, 6750, 6730, 6771, 6753, 6754, 6748, 6759, 6756,10178, + 10178, 6758, 6769, 6763, 6773, 6781, 6775, 6774, 6793, 6786, + 6788, 6804, 6800, 6798,10178, 6802, 6790, 6803, 6801,10178, + 6799, 6818, 6812, 6825, 6831, 6820, 6826, 6829, 6839, 6819, + 6843, 6850, 6845, 6852, 6847, 6837, 6863, 6859, 6856, 6867, + 6871, 6885,10178, 6883, 6874, 6876, 6877, 6886, 6884, 6887, + 6894, 6905, 6898, 6897,10178, 6911,10178, 6914, 6916, 6922, + 6929, 6920, 6934, 6932, 6936, 6935, 6938, 6947, 6944, 6950, + 6949, 6968, 6954, 6957, 6972, 6979, 6974, 6982, 6985, 6984, - 6974, 6991, 6992, 6981, 6984, 6982, 6986, 6988,10077, 6998, - 6996, 6997, 7005, 7010, 7009, 7011, 7018, 7030, 7029, 7020, - 7025, 7033,10077, 7027, 7032, 7049,10077, 7041, 7047, 7038, - 7059, 7050, 7045, 7066, 7060, 7067,10077, 7079, 7065, 7074, - 7069, 7077, 7087, 7073, 7088, 7094, 7109, 7115,10077, 7112, - 7101, 7114, 7120, 7102, 7104, 7116, 7129, 7097,10077, 7143, - 7144, 7146, 7138, 7160, 7162, 7142, 7152, 7164, 7161, 7169, - 7156, 7145, 7165, 7173, 7175, 7177, 7188, 7185, 7203, 7208, - 7201,10077, 7187,10077, 7190, 7209, 7215, 7211, 7220, 7213, - 7224, 7214, 7233,10077, 7223, 7238, 7231, 7242, 7235,10077, + 10178, 6987, 6971, 6988, 6978, 6993, 6994, 7003, 7002, 7005, + 7004, 7009, 7020, 7026, 7027, 7014, 7029, 7016, 7030, 7015, + 10178, 7032, 7039, 7021, 7045, 7050, 7053, 7056, 7043, 7074, + 7069, 7057, 7064, 7080,10178, 7066, 7059, 7087,10178, 7072, + 7073, 7071, 7089, 7093, 7110, 7099, 7106, 7098, 7107,10178, + 7112, 7103, 7120, 7114, 7117, 7124, 7121, 7126, 7131, 7134, + 7144, 7154,10178, 6902, 7148, 7151, 7159, 7140, 7153, 7155, + 7163, 7162,10178, 7180, 7189, 7191, 7182, 7203, 7205, 7181, + 7195, 7209, 7201, 7208, 7192, 7198, 7223, 7218, 7222, 7225, + 7230, 7228, 7219, 7246, 7216,10178, 7236,10178, 7240, 7250, - 7247, 7245, 7248, 7252,10077, 7265, 7262, 7250, 7266, 7273, - 7275,10077, 7283, 7282, 7291, 7292, 7303, 7290, 7301, 7293, - 7305, 7302, 7294, 7297, 7310, 7309, 7313, 7317,10077, 7321, - 7312, 7331, 7340, 7337, 7338, 7330, 7349, 7351, 7342,10077, - 7354, 7336, 7341, 7364, 7348, 7366, 7365, 7374, 7371, 7381, - 7389, 7376, 7377, 7380, 7395, 7388, 7402,10077, 7393, 7397, - 7414, 7415, 7410, 7423,10077, 7421,10077, 7417, 7427, 7432, - 7407, 7437,10077,10077, 7439, 7444, 7441, 7447, 7440,10077, - 10077, 7451,10077, 7445,10077, 7442, 7457,10077,10077, 7470, - 7455, 7458, 7472, 7482, 7461,10077, 7486,10077, 7494, 7471, + 7247, 7267, 7263, 7261, 7275, 7266, 7258,10178, 7252, 7265, + 7282, 7269, 7291,10178, 7277, 7285, 7295, 7294,10178, 7311, + 7308, 7297, 7303, 7319, 7322,10178, 7320, 7326, 7327, 7330, + 7331, 7325, 7336, 7337, 7338, 7333, 7341, 7343, 7347, 7372, + 7357, 7364,10178, 7373, 7376, 7380, 7378, 7381, 7384, 7365, + 7382, 7387, 7375,10178, 7389, 7398, 7399, 7402, 7409, 7397, + 7407, 7425, 7436, 7426, 7434, 7415, 7420, 7421, 7438, 7437, + 7441,10178, 7444, 7453, 7446, 7449, 7447, 7470,10178, 7466, + 10178, 7463, 7478, 7481, 7483, 7461, 7488,10178,10178, 7490, + 7496, 7480, 7495, 7491,10178,10178, 7498,10178, 7485,10178, - 7492, 7480, 7483, 7490,10077, 7484, 7498, 7500, 7504, 7515, - 10077, 7517, 7497, 7511, 7518,10077, 7534, 7532, 7521, 7519, - 10077, 7546, 7536, 7544, 7523, 7542, 7550, 7552, 7543, 7558, - 7553, 7561, 7563, 7567, 7570, 7586, 7589, 7591, 7595, 7584, - 7580, 7599, 7600, 7602, 7605, 7597, 7588, 7607, 7617, 7618, - 7622, 7620, 7621, 7641, 7642, 7632, 7644, 7645, 7646, 7630, - 7648, 7634, 7635, 7651, 7665, 7660, 7662, 7664, 7663, 7669, - 7672, 7673, 7692, 7685, 7701, 7689, 7690, 7691,10077, 7696, - 7682, 7703, 7707, 7713, 7730, 7731, 7738, 7739, 7741,10077, - 7743,10077, 7745, 7729, 7737, 7732, 7734,10077, 7740, 7759, + 7506, 7508,10178,10178, 7504, 7502, 7505, 7529, 7532, 7538, + 10178, 7539,10178, 7545, 7521, 7542, 7530, 7522, 7547,10178, + 7531, 7551, 7548, 7555, 7562,10178, 7571, 7557, 7581, 7565, + 7570,10178, 7586, 7588, 7574, 7577,10178, 7598, 7596, 7597, + 7582, 7594, 7592, 7601, 7609, 7617, 7620, 7623, 7632, 7619, + 7621, 7638, 7640, 7642, 7645, 7649, 7644, 7633, 7647, 7653, + 7662, 7672, 7665, 7655, 7674, 7664, 7666, 7669, 7688, 7676, + 7694, 7697, 7696, 7693, 7691, 7704, 7690, 7701, 7699, 7709, + 7708, 7718, 7730, 7712, 7720, 7728, 7724, 7735, 7731, 7742, + 7747, 7751, 7754, 7745, 7746,10178, 7764, 7762, 7743, 7774, - 7757, 7761, 7771, 7762, 7783, 7770, 7773, 7774, 7793,10077, - 7795, 7788, 7789, 7787, 7799,10077, 7804, 7803, 7806, 7807, - 7809, 7821, 7817, 7819, 7823, 7826, 7816, 7838, 7839, 7847, - 7829, 7840, 7851,10077, 7860, 7861, 7868, 7852, 7856, 7854, - 7863, 7875, 7862, 7866, 7887, 7889, 7894, 7897, 7896,10077, - 7884,10077, 7901, 7893, 7905, 7888, 7920, 7922, 7909, 7914, - 10077,10077, 7911, 7916, 7937, 7942, 7930, 7928, 7948, 7939, - 7936, 7949,10077, 7944, 7958, 7965, 7955,10077, 7964, 7954, - 7963, 7970,10077, 7972, 7978, 7989, 7988, 7975, 7996, 7995, - 7998, 7992, 7991, 7997, 8004,10077,10077,10077,10077, 8011, + 7769, 7780, 7787, 7794, 7795, 7796,10178, 7798,10178, 7801, + 7788, 7789, 7786, 7793,10178, 7810, 7813, 7812, 7816, 7829, + 7821, 7815, 7825, 7828, 7832, 7848,10178, 7847, 7837, 7840, + 7844, 7854,10178, 7857, 7860, 7852, 7864, 7865, 7878, 7871, + 7872, 7876, 7879, 7869, 7893, 7901, 7902, 7884, 7889, 7908, + 10178, 7918, 7919, 7913, 7905, 7909, 7906, 7912, 7932, 7922, + 7927, 7928, 7939, 7941, 7930, 7945, 7956,10178, 7954,10178, + 7949, 7959, 7950, 7940, 7974, 7975, 7964, 7963,10178,10178, + 7968, 7976, 7989, 7993, 7981, 7986, 7997, 7987, 7995, 8008, + 10178, 8002, 8020, 8014, 8027, 8015,10178, 8019, 8013, 8016, - 8006, 8009, 8013, 8016, 8019, 8033, 8036, 8038, 8037, 8021, - 8034,10077, 8050,10077,10077, 8046, 8052, 8040, 8053, 8062, - 8056, 8073, 8063,10077, 8072,10077, 8061, 8081, 8076, 8092, - 8094, 8090, 8077, 8101, 8098, 8102, 8088, 8093, 8115, 8119, - 8125, 8112, 8130, 8116, 8131,10077,10077, 8123, 8137, 8138, - 8145, 8139, 8142, 8134, 8154, 8151, 8162, 8150, 8158, 8152, - 8149, 8161, 8185, 8178, 8172,10077, 8186, 8187, 8188,10077, - 8189,10077, 8190, 8197, 8198, 8205, 8194, 8199, 8200, 8230, - 8224, 8232,10077,10077, 8220, 8244, 8234,10077,10077, 8222, - 8225, 8227, 8242, 8236, 8229, 8253, 8251, 8255, 8257,10077, + 8030,10178, 8037, 8023, 8044, 8050, 8038, 8039, 8052, 8057, + 8047, 8053, 8055, 8061, 8068,10178,10178,10178,10178, 8071, + 8064, 8070, 8060, 8077, 8079, 8084, 8094, 8096, 8101, 8082, + 8095,10178, 8107,10178,10178, 8109, 8111, 8098, 8113, 8119, + 8123, 8117, 8125,10178, 8120,10178, 8143, 8144, 8136, 8131, + 8155, 8152, 8137, 8159, 8154, 8160, 8150, 8162, 8171, 8167, + 8173, 8170, 8186, 8190, 8193,10178,10178, 8183, 8202, 8200, + 8209, 8201, 8210, 8194, 8178, 8207, 8214, 8213, 8216, 8217, + 8205, 8221, 8229, 8234, 8233,10178, 8240, 8246, 8252,10178, + 8238,10178, 8249, 8257, 8258, 8241, 8256, 8261, 8266, 8279, - 8259,10077, 8261, 8273, 8279, 8258, 8292, 8295, 8278, 8297, - 8291, 8286, 8282, 8293,10077, 8290, 8289,10077, 8300, 8308, - 8310, 8301, 8316,10077, 8329, 8318, 8312, 8332,10077, 8333, - 8340, 8341,10077, 8347,10077, 8328, 8345, 8337, 8366, 8342, - 10077, 8358, 8352,10077, 8362, 8365, 8370, 8379, 8371, 8373, - 10077, 8383, 8369,10077, 8368, 8390, 8393, 8391, 8389, 8399, - 8395, 8385, 8405, 8406, 8402, 8420,10077,10077, 8412, 8418, - 73, 8441, 8411, 8417, 8422, 8421, 8430, 8428, 8436, 8443, - 10077,10077, 8447,10077, 8448, 8455,10077, 8435, 8462, 8470, - 8459, 8461, 8454, 8464, 8480, 8473, 8481, 8498, 8488, 8486, + 8278, 8286,10178,10178, 8274, 8276, 8288,10178,10178, 8281, + 8284, 8290, 8295, 8303, 8293, 8289, 8308, 8311, 8324, 8313, + 10178, 8314,10178, 8322, 8330, 8328, 8318, 8338, 8349, 8336, + 8351, 8347, 8340, 8333, 8357,10178, 8355, 8339,10178, 8373, + 8368, 8376, 8363, 8372, 8378,10178, 8382, 8369, 8386, 8388, + 10178, 8392, 8390, 8396, 8397,10178, 8402,10178, 8391, 8403, + 8400, 8431, 8410,10178, 8405, 8415,10178, 8434, 8436, 8440, + 8438, 8432, 8433,10178, 8444, 8429,10178, 8428, 8450, 8452, + 8451, 8439, 8457, 8449, 8464, 8456, 8469, 8485, 8483,10178, + 10178, 8474, 8481, 73, 8493, 8467, 8472, 8475, 8494, 8503, - 8504, 8519, 8523, 8497, 8490, 8525, 8529, 8532, 8534, 8536, - 8511, 8515, 8521, 8518, 8551, 8550, 8539, 8562, 8560, 8552, - 8553,10077, 8549, 8570, 8571, 8557,10077, 8581, 8576, 8586, - 8585,10077, 8588, 8582, 8584, 8595, 8596,10077, 8589, 8606, - 8614, 8615, 8612, 8608, 8613, 8610, 8643, 8617, 8620, 8622, - 10077,10077,10077, 8623, 8636,10077, 8645, 8644, 8634, 8642, - 10077, 8662, 8655, 8653,10077,10077,10077, 8641, 8668, 8667, - 10077, 8654, 8483,10077, 8663,10077, 8656,10077, 8679, 8683, - 8695, 8689,10077, 8692, 8686, 8691, 8708,10077, 8707, 8714, - 8717, 8711, 8701, 8710, 8722,10077, 8713, 8725, 8726, 8733, + 8479, 8501, 8507,10178,10178, 8506,10178, 8508, 8512,10178, + 8498, 8521, 8517, 8519, 8535, 8529, 8532, 8527, 8526, 8543, + 8555, 8546, 8542, 8563, 8577, 8580, 8559, 8549, 8564, 8582, + 8588, 8593, 8595, 8581, 8598, 8579, 8574, 8604, 8606, 8609, + 8607, 8605, 8615, 8617,10178, 8602, 8613, 8616, 8641, 8630, + 10178, 8649, 8643, 8651, 8653,10178, 8652, 8645, 8656, 8657, + 8660,10178, 8655, 8659, 8661, 8663, 8662, 8672, 8684, 8682, + 8706,10178, 8689, 8694, 8700,10178,10178,10178, 8705, 8707, + 8698,10178, 8708, 8699, 8690, 8696,10178, 8719, 8711, 8716, + 10178,10178,10178, 8723, 8731, 8735,10178, 8725, 8754,10178, - 8724, 8734, 8738, 8740, 8737, 8748, 8741, 8750,10077, 8758, - 8765, 8769, 8775, 8744, 8764, 8768,10077, 8760,10077, 8778, - 10077, 8771, 8781, 8786, 8796, 8795, 8793, 8797, 8806, 8807, - 8798, 8827, 8808, 8811, 8820, 8788, 8813,10077,10077, 8830, - 8837,10077, 8821,10077, 8849,10077, 8834, 8835, 8847, 8844, - 8848,10077,10077, 8858, 8843, 8856, 8871, 8845, 8862,10077, - 8866, 8870, 8869, 8882,10077,10077, 8879, 8891, 8895,10077, - 8880, 8901, 8903, 8889, 8885, 8914, 8908, 8911, 8890, 8896, - 8894, 8912, 8916, 8925, 8927, 8931, 8941, 8947,10077,10077, - 10077, 8937, 8930, 8958, 8945, 8952, 8961, 8960,10077, 8954, + 8739,10178, 8732,10178, 8752, 8755, 8763, 8747,10178, 8762, + 8772, 8759, 8791,10178, 8761, 8769, 8770, 8784, 8778, 8782, + 8797,10178, 8781, 8799, 8805, 8803, 8788, 8809, 8786, 8811, + 8796, 8822, 8815, 8827,10178, 8831, 8834, 8841, 8843, 8826, + 8832, 8836,10178, 8830,10178, 8852,10178, 8842, 8862, 8863, + 8856, 8871, 8865, 8866, 8878, 8879, 8868, 8890, 8887, 8882, + 8893, 8894, 8897,10178,10178, 8899, 8895, 8904,10178, 8908, + 10178, 8910,10178, 8909, 8914, 8927, 8917, 8934,10178,10178, + 8938, 8920, 8936, 8870, 8926, 8923,10178, 8947, 8937, 8943, + 8955,10178, 8963,10178, 8953, 8976, 8972,10178, 8957, 8968, - 8962, 8965, 8964, 8971, 8976, 8973,10077, 8968, 8972, 8977, - 8988, 8984, 8987, 8992, 9000,10077, 8996, 9012, 9013, 9011, - 9004, 9017, 9024, 9025, 9026, 9030, 9019, 9015, 9039, 9042, - 10077, 9037,10077,10077, 9029,10077, 9028, 9036, 9035, 9038, - 9066,10077, 9061, 9044, 9053, 9059, 9056, 9069, 9079, 9082, - 10077, 9089, 9071, 9083, 9085,10077,10077, 9074, 9092,10077, - 9104, 9103, 9093, 9094, 9099, 9105, 9114, 9110,10077, 9119, - 9120, 9116, 9124, 9122, 9121, 9139,10077, 9147, 9134, 9137, - 9138,10077, 9141, 9140, 9152, 9154, 9168,10077, 9171, 9167, - 9182, 9183,10077, 9172, 9186, 9177,10077,10077,10077, 9178, + 8981, 8970, 8966, 8983, 8980, 8978, 8974, 8993, 8990, 8984, + 8995, 8992, 9001, 9021, 9022, 9026,10178,10178,10178, 9018, + 9011, 9037, 9033, 9032, 9039, 9023,10178, 9042, 9040, 9050, + 9044, 9049, 9061, 9046,10178, 9053, 9054, 9058, 9057, 9075, + 9067, 9071, 9080,10178, 9091, 9093, 9095, 9096, 9090, 9098, + 9100, 9108, 9109, 9111, 9099, 9106, 9120, 9114,10178, 9121, + 10178, 9124,10178, 9110,10178, 9118, 9122, 9115, 9128, 9142, + 10178, 9152, 9127, 9138, 9146, 9148, 9149, 9162, 9163,10178, + 9154, 9169, 9166, 9155, 9173,10178,10178, 9167, 9183,10178, + 9191, 9187, 9184, 9202, 9194, 9195, 9204, 9207,10178, 9205, - 9191, 9197,10077,10077,10077,10077, 9193, 9202, 9203, 9206, - 10077, 9208, 9213, 9227, 9221, 9233, 9219,10077, 9231, 9228, - 9238, 9224, 9225,10077,10077, 9241, 9247, 9248, 9243, 9251, - 10077,10077, 9220, 9249, 9255, 9264, 9262,10077, 9263, 9252, - 9285, 9278, 9291, 9293, 9295, 9282, 9294, 9298, 9301, 9308, - 9286, 9300, 9296, 9324, 9325, 9312, 9306, 9321, 9326, 9336, - 9340, 9328, 9341,10077,10077, 9345,10077, 9347, 9351,10077, - 10077, 9349, 9350, 9354, 9361,10077, 9362, 9364, 9365, 9366, - 9353,10077, 9373, 9369, 9374, 9359, 9370,10077, 9375, 9376, - 9384, 9389, 9372, 9393, 9406, 9394,10077, 9398, 9408,10077, + 9211, 9197, 9200, 9218, 9214, 9222,10178, 9227, 9221, 9231, + 9232,10178, 9219, 9241, 9243, 9242, 9266,10178, 9267, 9253, + 9247, 9270,10178, 9256, 9262, 9264,10178,10178,10178, 9281, + 9282, 9291,10178,10178,10178,10178, 9285, 9296, 9286, 9306, + 10178,10178, 9307, 9312, 9316, 9317, 9321, 9320,10178, 9322, + 9326, 9325, 9311, 9323,10178,10178, 9330, 9339, 9340, 9336, + 9342, 9345,10178,10178, 9346, 9348, 9357, 9367, 9362,10178, + 9352, 9369, 9378, 9372, 9379, 9383, 9385, 9375, 9386, 9402, + 9400, 9398, 9394, 9401, 9388, 9415, 9417, 9404, 9424, 9431, + 9426, 9430, 9433, 9425, 9429,10178,10178, 9435,10178, 9437, - 10077, 9396, 9412, 9392, 9423, 9409,10077, 9425, 9431, 9416, - 9432, 9419, 9426, 9433,10077, 9441, 9439,10077,10077, 9452, - 9446,10077,10077, 9436,10077,10077,10077,10077,10077,10077, - 10077,10077, 9464, 9467,10077, 9459, 9477, 9478,10077, 9480, - 10077, 9458, 9473, 9483, 9475,10077, 9476,10077, 9488, 9501, - 9493, 9504, 9503, 9515, 9500, 9502, 9474, 9507, 9499, 9517, - 9526, 9525, 9531, 9520, 9544, 9546, 9534, 9550,10077,10077, - 10077, 9542, 9540, 9557, 9561, 9565, 9571, 9566, 9574, 9559, - 9569, 9576, 9575, 9585, 9583, 9594, 9596, 9586, 9592, 9606, - 9595, 9598, 9614,10077, 9615, 9605, 9607, 9624,10077, 9613, + 9436,10178,10178, 9439, 9448, 9454, 9455,10178, 9465, 9468, + 9469, 9470, 9447,10178, 9462, 9476, 9477, 9474, 9466, 9459, + 10178, 9480, 9472, 9484, 9475, 9481, 9497, 9486, 9485,10178, + 9500, 9516,10178,10178, 9501, 9517, 9496, 9524, 9508,10178, + 9527, 9534, 9518, 9528, 9512, 9523, 9521,10178, 9550, 9553, + 10178,10178, 9536, 9551,10178,10178, 9543,10178,10178,10178, + 10178,10178,10178,10178,10178, 9560, 9568,10178,10178, 9559, + 9573, 9574,10178, 9575,10178, 9558, 9567, 9578, 9564,10178, + 9583,10178, 9589, 9577, 9601, 9605, 9598, 9616, 9608, 9595, + 9600, 9603, 9604, 9611, 9627, 9625, 9615, 9628, 9645, 9651, - 10077, 9612,10077,10077, 9629, 9636, 9635, 9625, 9651, 9653, - 9640, 9645, 9641, 9656, 9649,10077, 9650,10077,10077, 9638, - 9646,10077, 9655, 9670,10077, 9664, 9685, 9673, 9662, 9681, - 9676, 9693, 9699, 9679,10077,10077, 9687, 9691, 9686, 9710, - 9711, 9720, 9722, 9719, 9725, 9728, 9708, 9734,10077, 9739, - 9735, 9741,10077, 9738, 9726, 9737, 9729, 9751, 9763, 9754, - 9761,10077, 9758,10077, 9776, 9768, 9778, 9760, 9765, 9769, - 9788, 9786, 9781,10077, 9772, 9792, 9795, 9801, 9811, 9818, - 9810, 9805, 9826, 9822, 9828, 9831, 9829, 9833, 9815, 9838, - 9845,10077, 9835, 9847,10077, 9841, 9854, 9850, 9852, 9874, + 9638, 9652,10178,10178,10178, 9646, 9639, 9661, 9653, 9667, + 9668, 9670, 9671, 9655, 9663, 9672, 9676, 9686, 9679, 9678, + 9673, 9695, 9680, 9706, 9712, 9694, 9715,10178, 9716, 9702, + 9705, 9723,10178, 9710,10178, 9708,10178,10178, 9727, 9729, + 9720, 9721, 9739, 9750, 9732, 9736, 9741, 9753, 9761,10178, + 9762,10178,10178, 9743, 9745,10178, 9755, 9767,10178, 9754, + 9770, 9759, 9766, 9777, 9776, 9794, 9802, 9783,10178,10178, + 9788, 9782, 9792, 9812, 9809, 9789, 9817, 9815, 9819, 9823, + 9806, 9835,10178, 9813, 9826, 9832,10178, 9833, 9829, 9836, + 9830, 9842, 9859, 9846, 9853,10178, 9867,10178, 9871, 9869, - 10077, 9876, 9861, 9863, 9877, 9883, 9885,10077, 9884, 9887, - 9888,10077, 9889,10077,10077, 9901, 9881, 9898, 9897, 9899, - 10077,10077,10077, 9957, 9964, 9971, 9978, 9985, 9992, 9999, - 102,10006,10013,10020,10027,10034,10041,10048,10055,10062, - 10069 + 9872, 9855, 9860, 9870, 9884, 9886, 9876,10178, 9888, 9899, + 9890, 9901, 9906, 9915, 9912, 9903, 9921, 9918, 9929, 9924, + 9925, 9928, 9934, 9933, 9944,10178, 9937, 9947,10178, 9949, + 9952, 9948, 9950, 9971,10178, 9943, 9959, 9964, 9981, 9968, + 9980,10178, 9973, 9985, 9990,10178, 9984,10178,10178, 9996, + 9994, 9999, 9988, 9992,10178,10178,10178,10058,10065,10072, + 10079,10086,10093,10100, 102,10107,10114,10121,10128,10135, + 10142,10149,10156,10163,10170 } ; -static const flex_int16_t yy_def[3542] = +static const flex_int16_t yy_def[3576] = { 0, - 3523, 1, 3524, 3524, 3525, 3525, 3526, 3526, 3527, 3527, - 3528, 3528, 3529, 3529, 3530, 3530, 3523, 3531, 3523, 3523, - 3523, 3523, 3532, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3533, 3523, 3523, 3523, - 3533, 3534, 3523, 3523, 3523, 3534, 3535, 3523, 3523, 3523, - 3523, 3535, 3536, 3523, 3523, 3523, 3536, 3537, 3523, 3538, - 3523, 3537, 3537, 3539, 3523, 3523, 3523, 3523, 3539, 3540, - 3523, 3523, 3523, 3540, 3531, 3531, 3523, 3541, 3532, 3541, - 3532, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3557, 1, 3558, 3558, 3559, 3559, 3560, 3560, 3561, 3561, + 3562, 3562, 3563, 3563, 3564, 3564, 3557, 3565, 3557, 3557, + 3557, 3557, 3566, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3567, 3557, 3557, 3557, + 3567, 3568, 3557, 3557, 3557, 3568, 3569, 3557, 3557, 3557, + 3557, 3569, 3570, 3557, 3557, 3557, 3570, 3571, 3557, 3572, + 3557, 3571, 3571, 3573, 3557, 3557, 3557, 3557, 3573, 3574, + 3557, 3557, 3557, 3574, 3565, 3565, 3557, 3575, 3566, 3575, + 3566, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3533, - 3533, 3534, 3534, 3535, 3535, 3523, 3536, 3536, 3537, 3537, - 3538, 3538, 3537, 3539, 3539, 3523, 3540, 3540, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3567, + 3567, 3568, 3568, 3569, 3569, 3557, 3570, 3570, 3571, 3571, + 3572, 3572, 3571, 3573, 3573, 3557, 3574, 3574, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3537, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3571, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3537, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3571, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3537, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3523, 3531, - 3523, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3571, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, + 3557, 3565, 3557, 3557, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3571, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3537, 3537, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3571, 3571, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3571, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3571, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3537, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3571, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3537, 3531, 3523, 3531, 3531, 3531, 3523, 3531, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3523, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531, - 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, + 3565, 3571, 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3557, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3557, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, - 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, - 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3537, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3523, - 3523, 3531, 3523, 3531, 3523, 3531, 3531, 3523, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, + 3565, 3565, 3565, 3565, 3565, 3571, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, + 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3557, 3565, 3557, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, + 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3571, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3523, 3523, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3537, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3523, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3523, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3557, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3557, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, - 3537, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3523, 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3557, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3557, 3565, 3565, 3571, 3565, 3565, 3565, 3565, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3523, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3523, 3523, 3523, 3531, 3531, 3531, - 3523, 3531, 3531, 3523, 3531, 3523, 3531, 3523, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, + 3565, 3565, 3565, 3557, 3557, 3565, 3557, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3557, 3557, 3557, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3557, 3557, 3557, 3565, 3565, 3565, 3557, 3565, 3565, 3557, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, 3531, - 3531, 3523, 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, + 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3557, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3557, 3565, + 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3557, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3565, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3523, 3523, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3523, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3523, 3523, 3523, 3531, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3557, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, - 3531, 3531, 3523, 3523, 3523, 3523, 3531, 3531, 3531, 3531, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, - 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3523, 3531, 3523, 3531, 3531, 3523, - 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, + 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3557, 3557, 3557, 3565, + 3565, 3565, 3557, 3557, 3557, 3557, 3565, 3565, 3565, 3565, + 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3557, 3565, 3557, 3565, - 3523, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3531, 3531, 3523, 3523, 3531, - 3531, 3523, 3523, 3531, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3523, 3531, - 3523, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3523, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3523, 3531, + 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, + 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3557, 3557, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3557, 3557, 3565, 3565, 3557, 3557, 3565, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3565, 3565, 3557, 3557, 3565, + 3565, 3565, 3557, 3565, 3557, 3565, 3565, 3565, 3565, 3557, + 3565, 3557, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, - 3523, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3523, 3523, 3531, - 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3523, 3523, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, - 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - 3531, 3523, 3531, 3531, 3523, 3531, 3531, 3531, 3531, 3531, + 3565, 3565, 3557, 3557, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3557, 3565, 3557, 3565, 3557, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, + 3565, 3557, 3557, 3565, 3565, 3557, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3557, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3557, 3565, 3565, - 3523, 3531, 3531, 3531, 3531, 3531, 3531, 3523, 3531, 3531, - 3531, 3523, 3531, 3523, 3523, 3531, 3531, 3531, 3531, 3531, - 3523, 3523, 0, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523 + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + 3565, 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3557, 3565, + 3565, 3565, 3565, 3565, 3557, 3565, 3565, 3565, 3565, 3565, + 3565, 3557, 3565, 3565, 3565, 3557, 3565, 3557, 3557, 3565, + 3565, 3565, 3565, 3565, 3557, 3557, 0, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557 } ; -static const flex_int16_t yy_nxt[10144] = +static const flex_int16_t yy_nxt[10245] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 18, @@ -1599,7 +1608,7 @@ static const flex_int16_t yy_nxt[10144] = 59, 60, 61, 120, 22, 58, 59, 60, 61, 86, 22, 64, 65, 66, 64, 65, 66, 87, 160, 160, - 1334, 88, 85, 51, 119, 86, 51, 167, 167, 56, + 1339, 88, 85, 51, 119, 86, 51, 167, 167, 56, 120, 56, 170, 75, 76, 77, 78, 62, 22, 75, 76, 77, 78, 62, 22, 81, 82, 83, 67, 97, 86, 67, 19, 20, 21, 69, 70, 71, 19, 20, @@ -1629,69 +1638,69 @@ static const flex_int16_t yy_nxt[10144] = 134, 152, 169, 135, 169, 169, 86, 169, 86, 184, 136, 153, 86, 131, 195, 154, 155, 132, 182, 86, 174, 133, 174, 174, 166, 174, 205, 134, 86, 85, - 135, 85, 85, 86, 85, 332, 184, 136, 138, 1183, + 135, 85, 85, 86, 85, 332, 184, 136, 138, 1187, 85, 195, 139, 90, 183, 90, 90, 206, 90, 185, 165, 86, 140, 141, 90, 142, 86, 193, 194, 197, 196, 163, 186, 161, 86, 138, 86, 86, 86, 139, - 86, 183, 86, 86, 206, 240, 185, 198, 3523, 140, + 86, 183, 86, 86, 206, 240, 185, 198, 3557, 140, 141, 91, 142, 143, 193, 194, 144, 196, 190, 186, 199, 86, 201, 145, 191, 200, 192, 146, 147, 86, - 334, 86, 240, 86, 198, 86, 207, 3523, 86, 86, - 143, 208, 3523, 144, 209, 190, 215, 199, 86, 201, + 334, 86, 240, 86, 198, 86, 207, 3557, 86, 86, + 143, 208, 3557, 144, 209, 190, 215, 199, 86, 201, 145, 191, 200, 192, 146, 147, 202, 203, 211, 86, - 210, 212, 86, 207, 204, 228, 86, 3523, 208, 217, - 216, 209, 86, 86, 213, 214, 3523, 86, 86, 86, + 210, 212, 86, 207, 204, 228, 86, 3557, 208, 217, + 216, 209, 86, 86, 213, 214, 3557, 86, 86, 86, - 225, 3523, 86, 202, 203, 211, 218, 210, 212, 226, + 225, 3557, 86, 202, 203, 211, 218, 210, 212, 226, 220, 204, 228, 86, 221, 223, 217, 216, 227, 229, 224, 213, 214, 86, 232, 230, 219, 225, 86, 253, 222, 86, 86, 218, 86, 231, 226, 220, 86, 86, 233, 221, 223, 86, 86, 227, 229, 224, 235, 86, 234, 232, 230, 219, 237, 236, 253, 222, 238, 86, - 3523, 239, 231, 86, 86, 241, 245, 233, 86, 246, - 86, 86, 86, 3523, 242, 235, 86, 234, 86, 247, - 248, 237, 236, 243, 251, 238, 3523, 86, 239, 244, - 3523, 249, 241, 245, 257, 250, 246, 86, 86, 3523, + 3557, 239, 231, 86, 86, 241, 245, 233, 86, 246, + 86, 86, 86, 3557, 242, 235, 86, 234, 86, 247, + 248, 237, 236, 243, 251, 238, 3557, 86, 239, 244, + 3557, 249, 241, 245, 257, 250, 246, 86, 86, 3557, 254, 242, 259, 261, 86, 258, 247, 248, 262, 86, 243, 251, 267, 86, 86, 260, 244, 255, 249, 86, 256, 257, 250, 86, 263, 266, 86, 254, 268, 259, 261, 270, 258, 264, 86, 262, 277, 269, 272, 267, 86, 271, 260, 86, 255, 265, 86, 256, 86, 86, - 3523, 263, 266, 86, 86, 268, 177, 177, 270, 3523, - 264, 3523, 170, 277, 269, 272, 3523, 273, 271, 3523, - 3523, 164, 265, 164, 164, 169, 164, 169, 169, 90, + 3557, 263, 266, 86, 86, 268, 177, 177, 270, 3557, + 264, 3557, 170, 277, 269, 272, 3557, 273, 271, 3557, + 3557, 164, 265, 164, 164, 169, 164, 169, 169, 90, 169, 90, 90, 174, 90, 174, 174, 274, 174, 86, - 3523, 276, 3523, 280, 273, 278, 281, 282, 283, 284, + 3557, 276, 3557, 280, 273, 278, 281, 282, 283, 284, - 86, 275, 279, 3523, 285, 86, 338, 3523, 3523, 86, + 86, 275, 279, 3557, 285, 86, 338, 3557, 3557, 86, 86, 86, 286, 290, 86, 86, 291, 172, 276, 86, 280, 86, 278, 281, 282, 283, 284, 287, 275, 279, 86, 285, 340, 288, 289, 86, 86, 293, 86, 286, - 290, 294, 86, 291, 301, 303, 3523, 302, 306, 3523, + 290, 294, 86, 291, 301, 303, 3557, 302, 306, 3557, 307, 304, 308, 86, 305, 314, 310, 86, 295, 86, - 288, 289, 86, 86, 86, 86, 311, 86, 294, 3523, + 288, 289, 86, 86, 86, 86, 311, 86, 294, 3557, 86, 301, 303, 86, 302, 306, 86, 307, 304, 86, 309, 305, 314, 310, 86, 295, 296, 312, 86, 318, 317, 297, 313, 311, 326, 371, 298, 315, 86, 86, - 316, 86, 299, 300, 319, 86, 325, 309, 3523, 86, - 3523, 86, 86, 296, 312, 329, 318, 317, 297, 313, + 316, 86, 299, 300, 319, 86, 325, 309, 3557, 86, + 3557, 86, 86, 296, 312, 329, 318, 317, 297, 313, 86, 326, 371, 298, 315, 327, 86, 316, 86, 299, 300, 319, 320, 325, 330, 321, 86, 322, 337, 335, - 333, 86, 329, 342, 86, 331, 339, 86, 3523, 323, - 345, 324, 327, 336, 341, 3523, 346, 3523, 86, 320, - 3523, 3523, 321, 347, 322, 337, 86, 333, 86, 343, + 333, 86, 329, 342, 86, 331, 339, 86, 3557, 323, + 345, 324, 327, 336, 341, 3557, 346, 3557, 86, 320, + 3557, 3557, 321, 347, 322, 337, 86, 333, 86, 343, 86, 86, 331, 339, 344, 86, 323, 86, 324, 348, 336, 341, 86, 346, 86, 352, 86, 349, 350, 353, - 347, 354, 355, 356, 86, 3523, 343, 351, 357, 361, + 347, 354, 355, 356, 86, 3557, 343, 351, 357, 361, 358, 344, 86, 86, 86, 86, 348, 86, 86, 86, 86, 363, 352, 86, 349, 350, 353, 359, 354, 355, 356, 86, 360, 362, 351, 357, 361, 358, 364, 365, 366, 367, 86, 86, 86, 368, 369, 370, 363, 86, - 374, 375, 373, 86, 372, 377, 3523, 379, 376, 86, + 374, 375, 373, 86, 372, 377, 3557, 379, 376, 86, 362, 378, 86, 380, 381, 364, 86, 366, 367, 86, 86, 86, 86, 369, 370, 382, 86, 86, 384, 373, 395, 372, 86, 86, 379, 376, 385, 86, 378, 86, @@ -1702,1011 +1711,1022 @@ static const flex_int16_t yy_nxt[10144] = 388, 389, 391, 86, 390, 383, 392, 394, 393, 400, 386, 86, 404, 402, 86, 403, 406, 407, 86, 86, 86, 86, 86, 397, 398, 401, 408, 405, 86, 86, - 409, 86, 412, 415, 411, 414, 400, 413, 3523, 404, + 409, 86, 412, 415, 411, 414, 400, 413, 3557, 404, 402, 86, 403, 86, 407, 86, 86, 416, 86, 417, 418, 86, 419, 408, 405, 420, 86, 409, 86, 412, 415, 411, 414, 86, 413, 421, 422, 424, 86, 423, 86, 86, 86, 428, 416, 427, 417, 418, 86, 419, - 425, 429, 430, 432, 433, 434, 3523, 86, 3523, 436, + 425, 429, 430, 432, 433, 434, 3557, 86, 3557, 436, 86, 86, 421, 86, 86, 86, 423, 426, 86, 86, - 428, 86, 427, 86, 435, 437, 431, 425, 438, 3523, + 428, 86, 427, 86, 435, 437, 431, 425, 438, 3557, 432, 433, 434, 86, 86, 86, 436, 86, 86, 439, - 440, 441, 3523, 442, 426, 443, 446, 444, 86, 86, - 86, 435, 437, 431, 86, 438, 447, 448, 456, 3523, - 449, 86, 86, 3523, 445, 490, 439, 440, 441, 86, + 440, 441, 3557, 442, 426, 443, 446, 444, 86, 86, + 86, 435, 437, 431, 86, 438, 447, 448, 456, 3557, + 449, 86, 86, 3557, 445, 490, 439, 440, 441, 86, 442, 86, 443, 446, 444, 86, 86, 457, 471, 464, - 3523, 86, 3523, 3523, 448, 456, 86, 449, 86, 458, - 463, 445, 450, 86, 459, 451, 460, 86, 465, 3523, + 3557, 86, 3557, 3557, 448, 456, 86, 449, 86, 458, + 463, 445, 450, 86, 459, 451, 460, 86, 465, 3557, 452, 453, 454, 455, 457, 86, 464, 466, 467, 461, 86, 86, 462, 86, 86, 468, 458, 463, 86, 450, 469, 459, 451, 460, 470, 465, 474, 452, 453, 454, - 455, 478, 86, 475, 466, 467, 461, 3523, 86, 462, + 455, 478, 86, 475, 466, 467, 461, 3557, 86, 462, 472, 479, 480, 473, 481, 86, 482, 86, 86, 86, - 86, 470, 483, 474, 476, 477, 3523, 3523, 478, 86, + 86, 470, 483, 474, 476, 477, 3557, 3557, 478, 86, 475, 485, 484, 489, 86, 486, 86, 472, 479, 86, - 473, 481, 86, 482, 86, 86, 487, 495, 86, 483, - 86, 476, 477, 86, 86, 491, 488, 492, 485, 484, - 489, 494, 486, 86, 496, 497, 493, 3523, 86, 86, - 509, 3523, 498, 487, 495, 3523, 502, 500, 499, 501, - - 507, 86, 491, 488, 492, 510, 3523, 86, 494, 86, - 508, 3523, 497, 493, 86, 503, 86, 525, 86, 498, - 3523, 86, 86, 502, 500, 499, 501, 507, 504, 511, - 529, 505, 86, 506, 3523, 526, 86, 508, 524, 86, - 527, 86, 503, 86, 525, 86, 3523, 528, 530, 3523, - 542, 86, 86, 532, 3523, 504, 511, 529, 505, 86, - 506, 512, 526, 513, 531, 524, 86, 527, 86, 514, - 541, 543, 86, 515, 528, 530, 544, 542, 516, 3523, - 532, 517, 86, 547, 3523, 545, 548, 86, 512, 170, - 513, 531, 546, 551, 86, 549, 514, 541, 550, 3523, - - 515, 86, 552, 86, 3523, 516, 86, 86, 517, 518, - 547, 519, 545, 548, 553, 86, 86, 555, 563, 546, - 551, 554, 549, 565, 520, 550, 560, 521, 86, 522, - 86, 523, 3523, 86, 86, 86, 518, 562, 519, 561, - 86, 553, 570, 556, 555, 563, 86, 3523, 554, 86, - 564, 520, 557, 560, 521, 86, 522, 3523, 523, 533, - 534, 567, 86, 558, 562, 566, 561, 568, 86, 535, - 536, 537, 538, 539, 86, 86, 540, 564, 572, 557, - 569, 559, 86, 3523, 86, 86, 533, 534, 567, 86, - 558, 86, 566, 86, 568, 573, 535, 536, 537, 538, - - 539, 577, 571, 540, 86, 572, 576, 569, 559, 574, - 575, 3523, 86, 86, 578, 580, 584, 86, 579, 581, - 582, 3523, 573, 3523, 587, 86, 3523, 588, 577, 571, - 3523, 86, 3523, 576, 585, 86, 589, 583, 86, 86, - 86, 578, 580, 584, 86, 579, 581, 582, 86, 586, - 86, 587, 592, 591, 588, 590, 603, 86, 593, 594, - 604, 585, 86, 589, 583, 86, 86, 605, 606, 609, - 595, 608, 596, 3523, 607, 86, 586, 86, 86, 592, - 591, 3523, 590, 610, 611, 593, 594, 604, 86, 86, - 612, 86, 86, 613, 605, 606, 609, 595, 614, 596, - - 597, 607, 615, 86, 86, 86, 617, 86, 598, 599, - 610, 611, 600, 601, 86, 86, 602, 612, 616, 618, - 613, 620, 86, 619, 621, 614, 622, 597, 86, 615, - 623, 656, 86, 86, 741, 598, 599, 86, 624, 600, - 601, 86, 86, 602, 86, 616, 618, 86, 620, 86, - 619, 625, 626, 622, 627, 629, 86, 623, 631, 630, - 632, 86, 628, 86, 633, 624, 86, 86, 634, 635, - 86, 3523, 638, 86, 86, 86, 637, 3523, 625, 626, - 86, 627, 629, 636, 658, 631, 630, 632, 86, 628, - 86, 633, 86, 640, 86, 634, 635, 642, 86, 638, - - 639, 643, 86, 637, 641, 3523, 86, 86, 645, 86, - 636, 644, 647, 655, 86, 646, 86, 650, 86, 86, - 640, 648, 649, 86, 642, 653, 86, 639, 643, 86, - 86, 641, 86, 86, 86, 645, 659, 657, 644, 647, - 655, 663, 646, 86, 650, 651, 654, 652, 648, 649, - 666, 3523, 653, 86, 86, 86, 660, 661, 86, 665, - 662, 668, 664, 659, 657, 86, 671, 669, 663, 86, - 667, 86, 651, 654, 652, 86, 86, 86, 672, 86, - 675, 3523, 86, 660, 661, 86, 665, 662, 668, 664, - 670, 673, 674, 671, 676, 679, 86, 667, 86, 86, - - 86, 677, 678, 86, 680, 672, 86, 675, 690, 681, - 829, 830, 86, 86, 691, 86, 86, 670, 673, 674, - 86, 676, 679, 86, 86, 3523, 692, 695, 677, 678, - 3523, 680, 694, 700, 693, 690, 681, 682, 86, 86, - 86, 691, 683, 697, 684, 86, 3523, 696, 3523, 86, - 685, 701, 686, 692, 695, 687, 688, 86, 86, 694, - 700, 693, 689, 86, 682, 705, 86, 704, 698, 683, - 697, 684, 699, 86, 696, 706, 707, 685, 701, 686, - 708, 702, 687, 688, 703, 86, 709, 3523, 86, 689, - 86, 86, 86, 712, 704, 698, 710, 86, 711, 699, - - 86, 714, 706, 707, 713, 86, 86, 708, 702, 715, - 86, 703, 717, 709, 716, 3523, 718, 720, 719, 86, - 712, 86, 86, 710, 86, 711, 86, 86, 714, 86, - 721, 713, 722, 725, 729, 724, 715, 726, 723, 717, - 727, 716, 86, 718, 720, 719, 86, 86, 728, 731, - 86, 736, 86, 730, 86, 86, 3523, 721, 742, 722, - 725, 86, 724, 86, 726, 723, 86, 727, 86, 732, - 733, 170, 734, 735, 86, 728, 731, 86, 736, 737, - 730, 746, 86, 86, 86, 738, 739, 743, 740, 86, - 86, 744, 748, 86, 745, 749, 732, 733, 747, 734, - - 735, 3523, 86, 750, 86, 86, 737, 86, 746, 86, - 86, 86, 738, 739, 743, 740, 758, 86, 754, 748, - 759, 745, 749, 86, 751, 747, 757, 86, 755, 86, - 750, 752, 760, 756, 753, 761, 762, 763, 3523, 764, - 86, 767, 86, 86, 765, 754, 766, 86, 768, 3523, - 3523, 751, 86, 757, 769, 771, 86, 770, 752, 772, - 86, 753, 86, 86, 86, 86, 773, 776, 767, 86, - 775, 86, 86, 766, 86, 768, 86, 777, 86, 779, - 778, 769, 771, 86, 770, 774, 772, 86, 86, 86, - 86, 780, 781, 773, 776, 782, 3523, 775, 783, 784, - - 86, 786, 86, 790, 785, 787, 779, 778, 86, 86, - 86, 86, 774, 86, 86, 791, 788, 792, 780, 781, - 3523, 805, 782, 86, 86, 783, 784, 86, 786, 789, - 86, 785, 787, 798, 3523, 86, 86, 86, 797, 801, - 793, 799, 791, 788, 792, 794, 800, 86, 795, 796, - 86, 804, 802, 86, 826, 3523, 789, 86, 803, 86, - 798, 86, 806, 86, 86, 797, 801, 793, 799, 807, - 810, 86, 794, 800, 86, 795, 796, 808, 804, 802, - 86, 811, 814, 813, 812, 803, 86, 815, 816, 806, - 817, 86, 86, 86, 86, 819, 807, 810, 820, 809, - - 86, 3523, 86, 838, 808, 86, 86, 86, 811, 814, - 813, 812, 86, 818, 815, 816, 86, 817, 822, 821, - 86, 823, 86, 824, 86, 820, 809, 86, 825, 828, - 827, 3523, 86, 833, 831, 86, 834, 832, 840, 835, - 818, 86, 86, 86, 841, 822, 821, 836, 823, 86, - 824, 86, 86, 86, 837, 825, 828, 827, 86, 86, - 833, 831, 86, 834, 832, 839, 835, 843, 86, 86, - 86, 841, 844, 842, 836, 86, 846, 845, 3523, 847, - 851, 837, 915, 848, 853, 86, 854, 86, 852, 86, - 86, 856, 839, 86, 843, 860, 86, 849, 850, 857, - - 842, 3523, 86, 846, 86, 86, 847, 855, 86, 915, - 848, 853, 86, 854, 86, 852, 858, 86, 856, 86, - 861, 868, 862, 864, 849, 850, 857, 86, 865, 3523, - 866, 859, 863, 869, 855, 86, 867, 870, 86, 876, - 86, 86, 871, 858, 86, 872, 86, 861, 868, 862, - 878, 86, 873, 877, 86, 86, 86, 866, 859, 863, - 869, 86, 86, 867, 870, 874, 879, 875, 86, 871, - 880, 86, 872, 86, 86, 881, 86, 878, 86, 873, - 877, 882, 86, 886, 86, 889, 883, 885, 3523, 86, - 888, 887, 874, 879, 875, 884, 890, 880, 86, 86, - - 86, 891, 881, 86, 86, 3523, 893, 86, 882, 895, - 86, 892, 889, 883, 885, 86, 894, 888, 887, 86, - 86, 896, 884, 890, 899, 86, 897, 898, 891, 86, - 86, 901, 86, 893, 900, 86, 895, 902, 892, 903, - 3523, 905, 904, 894, 86, 908, 3523, 907, 896, 86, - 924, 899, 3523, 897, 898, 86, 86, 906, 901, 909, - 86, 900, 86, 86, 902, 912, 903, 86, 905, 904, - 86, 910, 908, 86, 907, 911, 914, 913, 916, 86, - 921, 918, 86, 920, 906, 86, 909, 917, 922, 86, - 86, 919, 912, 86, 925, 926, 86, 923, 910, 86, - - 86, 86, 911, 914, 913, 916, 86, 921, 918, 86, - 920, 86, 86, 927, 917, 922, 170, 928, 919, 86, - 929, 925, 926, 930, 923, 932, 931, 933, 3523, 934, - 86, 86, 936, 938, 939, 86, 86, 935, 86, 86, - 927, 937, 86, 940, 928, 946, 942, 929, 3523, 3523, - 930, 86, 932, 931, 86, 86, 934, 943, 941, 86, - 938, 939, 945, 86, 935, 86, 3523, 947, 937, 86, - 948, 86, 86, 942, 944, 86, 86, 86, 949, 950, - 959, 86, 961, 960, 943, 941, 86, 86, 951, 945, - 86, 962, 86, 86, 947, 86, 3523, 948, 966, 3523, - - 86, 944, 964, 963, 3523, 949, 950, 959, 970, 961, - 960, 965, 86, 967, 3523, 951, 952, 86, 962, 953, - 86, 86, 86, 954, 86, 966, 955, 3523, 968, 964, - 963, 969, 971, 956, 957, 970, 958, 972, 965, 86, - 967, 86, 973, 952, 86, 86, 953, 86, 3523, 3523, - 954, 3523, 3523, 955, 86, 968, 984, 982, 969, 971, - 956, 957, 981, 958, 972, 86, 3523, 983, 985, 86, - 993, 3523, 86, 86, 86, 974, 975, 986, 976, 86, - 86, 977, 990, 984, 982, 989, 978, 3523, 991, 981, - 86, 86, 979, 980, 983, 985, 997, 993, 987, 992, - - 994, 86, 974, 975, 986, 976, 998, 86, 977, 990, - 86, 86, 989, 978, 988, 991, 86, 995, 999, 979, - 980, 86, 996, 997, 86, 987, 992, 994, 1000, 1002, - 86, 1001, 86, 998, 1005, 1003, 3523, 3523, 1004, 1006, - 1010, 988, 3523, 3523, 1008, 999, 1009, 86, 1007, 86, - 86, 86, 86, 1012, 3523, 1000, 1002, 86, 1001, 86, - 86, 86, 1003, 86, 86, 1004, 1006, 1010, 1011, 86, - 1013, 1008, 86, 1009, 1014, 1007, 86, 1015, 3523, 1016, - 1012, 1020, 1017, 1018, 1019, 1021, 86, 1022, 1023, 86, - 86, 86, 1026, 1024, 1025, 1011, 86, 1013, 86, 1028, - - 1027, 1014, 1030, 1029, 1015, 86, 1016, 86, 86, 1017, - 1018, 1019, 1021, 86, 86, 1031, 86, 1032, 1033, 1034, - 86, 1025, 1035, 1037, 86, 86, 1038, 1027, 1036, 1039, - 1029, 86, 86, 3523, 86, 3523, 3523, 86, 86, 86, - 1040, 1044, 1031, 1045, 1032, 1033, 86, 86, 86, 86, - 1037, 1042, 86, 1038, 1041, 1036, 1039, 1043, 1046, 1047, - 86, 86, 86, 86, 1048, 86, 1049, 1040, 86, 3523, - 1045, 1050, 1051, 1052, 86, 1053, 86, 86, 1042, 1055, - 1065, 1041, 1056, 1054, 1043, 1046, 86, 3523, 86, 86, - 86, 1063, 1057, 1049, 1059, 3523, 86, 86, 1050, 1051, - - 1052, 86, 1053, 86, 86, 86, 1055, 1065, 1060, 1056, - 1054, 1058, 86, 86, 1064, 1061, 1066, 86, 1063, 1057, - 1062, 1059, 86, 1068, 1067, 1069, 86, 86, 1071, 1072, - 1073, 3523, 86, 1070, 86, 1060, 86, 1074, 1058, 1075, - 3523, 1064, 1081, 1066, 1085, 86, 86, 86, 1082, 86, - 1068, 1067, 1069, 86, 1076, 1071, 86, 1073, 1077, 86, - 1070, 86, 1078, 1079, 1074, 86, 1075, 86, 1080, 1081, - 86, 86, 1084, 1083, 1086, 1082, 86, 1088, 1087, 1089, - 86, 1076, 86, 1090, 1092, 1077, 86, 86, 86, 1078, - 1079, 1091, 86, 86, 1093, 1080, 86, 1094, 1095, 1084, - - 1083, 1086, 1097, 86, 1088, 1087, 1089, 86, 1096, 86, - 1090, 1092, 86, 1098, 1100, 1099, 86, 1105, 1091, 86, - 1101, 1093, 86, 1102, 1094, 86, 1103, 86, 86, 1097, - 1104, 86, 1106, 86, 86, 1096, 1108, 86, 1107, 1109, - 1098, 1100, 1099, 3523, 1111, 1112, 1113, 1101, 1110, 86, - 1102, 86, 86, 1103, 1114, 86, 1117, 1104, 1120, 1115, - 1121, 1119, 86, 3523, 86, 1107, 1109, 1116, 86, 86, - 1124, 1122, 1125, 1113, 86, 1110, 86, 86, 86, 1118, - 1123, 1114, 1127, 1117, 86, 86, 1115, 86, 1119, 86, - 86, 1129, 86, 1126, 1116, 86, 1128, 1124, 1122, 1135, - - 86, 1130, 3523, 1133, 86, 86, 1118, 1123, 1134, 86, - 1136, 86, 1137, 86, 1131, 3523, 1132, 1138, 1129, 1143, - 1126, 1141, 86, 1128, 1139, 86, 1135, 1140, 1130, 86, - 1153, 86, 86, 86, 1156, 170, 1144, 1136, 86, 1137, - 1145, 1131, 1142, 1132, 1138, 86, 1143, 86, 1141, 86, - 86, 1139, 1146, 1180, 1140, 3523, 86, 1153, 86, 3523, - 1154, 86, 1155, 1144, 1157, 1159, 86, 1145, 1163, 1142, - 3523, 3523, 1158, 1164, 86, 1161, 3523, 86, 1165, 1146, - 1147, 1160, 1148, 86, 1182, 86, 1149, 1154, 1150, 1155, - 1162, 1157, 1159, 1151, 86, 86, 86, 86, 1152, 1158, - - 86, 1166, 1161, 86, 86, 1165, 1167, 1147, 1160, 1148, - 1169, 86, 1172, 1149, 86, 1150, 1170, 1162, 1168, 1173, - 1151, 1174, 86, 1176, 1175, 1152, 1171, 86, 1166, 86, - 86, 1177, 1179, 1167, 86, 1178, 86, 1169, 86, 1172, - 1181, 86, 1184, 1170, 1196, 1168, 1173, 3523, 1174, 86, - 1176, 1175, 1185, 1171, 86, 1186, 86, 86, 1177, 1179, - 1187, 3523, 1178, 86, 1197, 1195, 86, 1200, 3523, 86, - 1198, 1196, 86, 1199, 86, 3523, 3523, 86, 1204, 1185, - 86, 3523, 1186, 1201, 1207, 86, 86, 1187, 1188, 86, - 1203, 1197, 1195, 1189, 1200, 1190, 1205, 1198, 1202, 86, - - 1199, 1191, 86, 86, 86, 1204, 1192, 1193, 1206, 86, - 1201, 1209, 1214, 1194, 86, 1188, 86, 1203, 1210, 86, - 1189, 1208, 1190, 1205, 3523, 1202, 86, 86, 1191, 1215, - 1211, 1217, 3523, 1192, 1193, 1206, 3523, 1212, 1209, 86, - 1194, 86, 1213, 86, 1218, 1210, 86, 1216, 1208, 1222, - 1219, 86, 86, 1220, 86, 3523, 1215, 1211, 86, 1221, - 1223, 1225, 1224, 86, 1212, 1226, 1228, 1227, 86, 1213, - 86, 1218, 1229, 86, 1216, 86, 1230, 1219, 86, 86, - 1220, 86, 86, 86, 86, 1231, 1221, 1223, 1225, 1224, - 86, 1233, 1226, 1232, 1227, 1234, 1235, 1236, 86, 1229, - - 86, 1237, 86, 1230, 86, 1238, 1239, 86, 1240, 3523, - 1241, 86, 1231, 3523, 1242, 86, 86, 1244, 1233, 86, - 1232, 86, 1234, 1235, 1236, 3523, 86, 86, 1237, 1243, - 1245, 1248, 1238, 1239, 1246, 1252, 86, 1241, 86, 86, - 86, 1242, 1247, 86, 1244, 1249, 1250, 86, 1251, 1254, - 1253, 86, 1255, 86, 3523, 1259, 1243, 1245, 1248, 1257, - 1256, 1246, 1252, 3523, 3523, 1258, 86, 86, 86, 1247, - 86, 86, 1249, 1250, 1264, 1251, 86, 1253, 86, 86, - 1260, 86, 1259, 1265, 86, 1261, 1257, 1256, 1262, 1267, - 1266, 1263, 1258, 1268, 1269, 1270, 86, 86, 86, 1271, - - 86, 1264, 86, 1273, 3523, 1275, 1272, 86, 86, 3523, - 1265, 1274, 86, 86, 86, 1262, 1267, 1266, 1263, 1277, - 1268, 1269, 1270, 86, 1276, 1279, 1280, 86, 1278, 1281, - 1285, 86, 1275, 1272, 86, 86, 1282, 86, 1274, 1283, - 86, 1286, 1284, 86, 1288, 86, 1277, 86, 86, 1287, - 1289, 1276, 1279, 1280, 86, 1278, 1281, 1285, 1290, 1291, - 86, 86, 86, 1282, 86, 86, 1283, 1293, 1286, 1284, - 1292, 1288, 1294, 1296, 1295, 3523, 1287, 86, 1298, 86, - 1297, 86, 86, 86, 1303, 86, 1291, 86, 1300, 1299, - 1301, 86, 1302, 1305, 1293, 1307, 1304, 1292, 86, 1294, - - 1296, 1295, 86, 86, 1306, 1298, 86, 1297, 1308, 1313, - 1309, 1303, 1311, 3523, 1310, 1314, 1299, 3523, 86, 86, - 86, 86, 86, 1304, 86, 86, 86, 86, 1312, 1315, - 86, 1306, 1317, 86, 1316, 1308, 86, 1309, 1318, 1319, - 86, 1310, 1314, 86, 86, 1321, 1324, 86, 1320, 1322, - 86, 1325, 1326, 1323, 86, 1312, 1315, 3523, 86, 1317, - 1328, 1316, 86, 86, 86, 1318, 1319, 86, 86, 1327, - 1329, 1330, 1321, 1324, 1332, 1320, 1322, 1331, 1340, 86, - 1323, 86, 86, 86, 86, 1333, 1335, 1328, 1336, 86, - 86, 1337, 1342, 3523, 86, 86, 1327, 86, 1330, 86, - - 1338, 1332, 86, 1339, 1331, 86, 86, 1341, 1345, 1343, - 1344, 86, 1333, 1335, 86, 1336, 1346, 170, 1337, 1342, - 1348, 86, 1349, 1347, 1350, 1351, 86, 1338, 86, 1352, - 1339, 86, 86, 1353, 1341, 1345, 1343, 1344, 86, 1356, - 86, 1355, 86, 1346, 1354, 1357, 1358, 1348, 1360, 1349, - 1347, 86, 1351, 3523, 1366, 86, 1359, 3523, 1363, 86, - 3523, 86, 1361, 86, 86, 86, 1356, 86, 1355, 86, - 86, 1354, 1357, 1358, 86, 1360, 1362, 1367, 86, 1364, - 1365, 86, 1369, 1359, 86, 1363, 1368, 1370, 86, 1361, - 86, 86, 1371, 1376, 86, 86, 3523, 3523, 1377, 86, - - 1378, 1372, 1379, 1362, 1367, 1381, 1364, 1365, 86, 1369, - 1373, 1380, 1374, 1368, 1370, 1375, 86, 1382, 86, 1371, - 1376, 1384, 86, 86, 86, 1377, 1383, 1378, 1372, 86, - 86, 86, 1381, 1385, 86, 1386, 1389, 1373, 1380, 1374, - 1388, 86, 1375, 1390, 1382, 1391, 1387, 3523, 1384, 1393, - 3523, 86, 1398, 1383, 86, 86, 86, 86, 86, 1394, - 1385, 86, 1386, 1389, 1396, 1395, 1392, 1388, 1397, 1413, - 1390, 86, 1391, 1387, 86, 86, 86, 1400, 1399, 1398, - 1402, 86, 1401, 3523, 3523, 1407, 1394, 86, 86, 86, - 86, 1396, 1395, 1392, 86, 1397, 86, 1403, 1405, 1406, - - 86, 86, 1409, 1408, 1400, 1399, 1404, 1402, 86, 1401, - 86, 86, 1407, 1410, 1411, 1412, 1414, 3523, 1416, 86, - 1417, 86, 86, 86, 1403, 1405, 1406, 86, 1509, 1409, - 1408, 1415, 86, 1404, 1419, 86, 86, 1421, 86, 86, - 1410, 1411, 1412, 1414, 1418, 1416, 1420, 1417, 1422, 86, - 1423, 1428, 86, 1425, 86, 86, 1424, 1426, 1415, 1427, - 86, 1419, 1432, 86, 1421, 1430, 1431, 1429, 1448, 86, - 86, 1418, 86, 1420, 86, 1422, 86, 86, 1428, 1435, - 3523, 1438, 86, 1424, 1426, 86, 1427, 86, 86, 1432, - 1433, 1436, 1430, 1431, 1429, 1434, 1437, 3523, 1446, 1447, - - 86, 3523, 3523, 1449, 86, 1452, 1435, 86, 1438, 3523, - 86, 1450, 86, 1453, 1456, 3523, 1451, 86, 1436, 3523, - 86, 1455, 86, 1437, 1439, 1446, 1447, 1454, 1440, 86, - 1449, 1441, 1442, 86, 86, 86, 1443, 86, 1450, 1457, - 1453, 1456, 1444, 1451, 1461, 1460, 1445, 86, 1455, 86, - 86, 1439, 86, 86, 1454, 1440, 1462, 3523, 1441, 1442, - 1458, 1468, 1459, 1443, 1463, 86, 1457, 1464, 1465, 1444, - 1466, 1461, 1460, 1445, 86, 1469, 1467, 1470, 1471, 1479, - 1481, 1482, 86, 86, 86, 86, 1472, 1458, 86, 1459, - 86, 1463, 86, 86, 1464, 1465, 3523, 1466, 3523, 86, - - 86, 86, 1478, 1467, 1470, 1471, 1479, 86, 1480, 86, - 1483, 3523, 1487, 1472, 1473, 1484, 1485, 1488, 1486, 1474, - 3523, 1475, 1489, 1476, 86, 1477, 86, 86, 86, 1478, - 86, 1491, 86, 1490, 86, 1480, 86, 1483, 86, 1487, - 1492, 1473, 1484, 1485, 1493, 1486, 1474, 1494, 1475, 86, - 1476, 86, 1477, 1495, 1498, 1496, 1497, 86, 1491, 3523, - 1490, 86, 86, 86, 1499, 86, 1500, 1492, 1501, 86, - 1502, 1493, 1511, 3523, 1494, 1503, 1504, 1507, 1505, 86, - 1495, 86, 1496, 1497, 1508, 86, 86, 1506, 86, 1510, - 86, 1499, 86, 1500, 86, 1501, 86, 1502, 86, 86, - - 1512, 86, 1503, 1504, 1507, 1505, 86, 1513, 1514, 1515, - 1516, 1508, 1517, 1518, 1506, 1519, 1510, 86, 1520, 1521, - 86, 1525, 3523, 1522, 1530, 86, 1523, 1512, 86, 86, - 86, 86, 86, 1528, 1513, 1514, 1515, 1516, 1533, 86, - 1518, 86, 86, 1524, 86, 1520, 1521, 1526, 86, 86, - 1522, 1527, 1529, 1523, 86, 1531, 86, 86, 1532, 86, - 1528, 86, 1534, 86, 1535, 1533, 1542, 3523, 1536, 3523, - 1524, 86, 1537, 1538, 1526, 1539, 86, 86, 1527, 1529, - 86, 1544, 1531, 1541, 1540, 1532, 86, 1543, 86, 1534, - 86, 1535, 1546, 1542, 86, 1536, 1545, 86, 1550, 1537, - - 1538, 86, 1539, 86, 1547, 86, 1548, 86, 1544, 86, - 1541, 1540, 1551, 1549, 1543, 1552, 1553, 1554, 86, 1546, - 1556, 1555, 3523, 1545, 1558, 86, 86, 86, 86, 1557, - 86, 1547, 1560, 1548, 1559, 1562, 1566, 86, 86, 86, - 1549, 86, 1552, 1553, 86, 86, 1561, 1556, 1555, 86, - 1564, 86, 86, 1563, 86, 86, 1557, 86, 1567, 1560, - 1565, 1559, 1562, 1569, 86, 170, 1570, 1568, 86, 1572, - 1574, 1573, 1571, 1561, 1576, 3523, 86, 1564, 86, 86, - 1563, 1577, 3523, 86, 1578, 86, 1582, 1565, 86, 1575, - 86, 86, 1581, 1570, 1568, 86, 1572, 1574, 1573, 1571, - - 1580, 1576, 86, 1579, 1584, 86, 1583, 86, 1577, 86, - 86, 1578, 1585, 86, 86, 1588, 1575, 1586, 1589, 1581, - 86, 1590, 1587, 1592, 86, 1591, 86, 1580, 1600, 1593, - 1579, 1584, 1594, 1583, 1599, 86, 86, 1597, 86, 1585, - 86, 86, 1588, 1595, 1598, 1589, 1596, 86, 1590, 86, - 1592, 1601, 1591, 1603, 1605, 86, 1593, 3523, 1604, 1594, - 86, 1599, 86, 1602, 1597, 86, 1606, 86, 1607, 86, - 1595, 1598, 1608, 1596, 86, 1609, 1611, 86, 1601, 86, - 1610, 1605, 1612, 86, 1613, 86, 1617, 1614, 1621, 86, - 1602, 86, 1615, 1606, 86, 1607, 1616, 86, 1618, 1608, - - 86, 86, 1609, 1611, 86, 86, 1619, 1610, 1620, 1612, - 3523, 1613, 86, 1617, 1614, 86, 86, 1622, 1623, 1615, - 86, 86, 1624, 1616, 1625, 1618, 1626, 1627, 1628, 86, - 86, 1635, 86, 1619, 1629, 1620, 86, 86, 86, 86, - 1630, 1631, 1633, 1632, 1622, 1623, 1634, 1636, 86, 1624, - 1639, 1625, 86, 1626, 1627, 1628, 86, 86, 1635, 86, - 86, 1629, 1637, 86, 86, 1638, 1640, 1630, 1631, 1633, - 1632, 1641, 86, 1634, 1636, 1642, 86, 1639, 1643, 1644, - 86, 1647, 1646, 1649, 1650, 3523, 1645, 86, 86, 1637, - 1648, 1651, 1638, 86, 1652, 1654, 3523, 3523, 86, 1653, - - 1656, 1655, 1642, 86, 86, 1643, 86, 86, 1647, 1646, - 1657, 1661, 86, 1645, 1658, 86, 86, 1648, 86, 86, - 86, 1652, 86, 86, 86, 86, 1653, 1656, 1655, 86, - 1659, 86, 1660, 3523, 1662, 1663, 1664, 1657, 1661, 1666, - 3523, 1658, 86, 86, 86, 1665, 1667, 3523, 1668, 1673, - 3523, 1670, 86, 1669, 86, 86, 1671, 1659, 1672, 1660, - 86, 1662, 1663, 1664, 1676, 86, 1666, 86, 1677, 1674, - 1675, 1678, 1665, 1667, 1679, 86, 1673, 86, 86, 86, - 86, 86, 86, 86, 1680, 1672, 1681, 1682, 1684, 86, - 86, 1676, 1683, 86, 1685, 1677, 1674, 1675, 1678, 86, - - 1686, 1679, 1687, 1688, 1689, 1690, 3523, 3523, 86, 86, - 1696, 1680, 86, 86, 1682, 1684, 1691, 1692, 86, 1683, - 1693, 1694, 86, 86, 86, 86, 86, 1686, 86, 1687, - 1695, 1689, 1690, 1697, 86, 86, 86, 1696, 1698, 1701, - 1702, 1699, 1700, 1691, 1692, 1703, 3523, 1693, 1694, 86, - 86, 1704, 1705, 1707, 86, 1712, 1706, 1695, 3523, 86, - 1697, 3523, 86, 1708, 86, 1698, 1701, 86, 1699, 1700, - 86, 86, 86, 86, 1713, 86, 1714, 86, 1704, 1705, - 1707, 1709, 1712, 1706, 1715, 1710, 1716, 1717, 86, 1719, - 1708, 86, 1720, 1718, 3523, 1721, 86, 86, 1711, 1729, - - 1723, 1713, 1722, 1714, 86, 1724, 86, 1726, 1709, 86, - 1725, 1715, 1710, 1716, 86, 86, 86, 86, 1727, 1720, - 1718, 86, 1721, 86, 86, 1711, 1728, 1723, 86, 1722, - 1730, 86, 1724, 86, 1726, 1731, 86, 1725, 1733, 1735, - 1732, 3523, 1734, 1736, 86, 1727, 86, 1737, 1738, 1739, - 86, 3523, 1740, 1728, 1743, 1741, 3523, 86, 1744, 1746, - 86, 3523, 1731, 86, 86, 1733, 86, 1732, 86, 1734, - 1736, 86, 86, 1742, 86, 1738, 86, 86, 86, 1740, - 1745, 1743, 1741, 1747, 86, 1744, 1746, 86, 1748, 1749, - 86, 1750, 1753, 1755, 1751, 1752, 3523, 86, 1754, 1756, - - 1742, 86, 86, 1760, 1758, 86, 86, 1745, 86, 3523, - 1747, 86, 1765, 3523, 86, 1748, 1749, 86, 1750, 1753, - 1755, 1751, 1752, 1757, 86, 1754, 1756, 1759, 1761, 86, - 1760, 1758, 1764, 1762, 86, 86, 1763, 1770, 1766, 86, - 1767, 86, 86, 1768, 86, 86, 1769, 86, 1772, 1773, - 1757, 86, 1771, 1775, 1759, 1761, 1774, 86, 86, 1764, - 1762, 86, 1776, 1763, 1770, 1766, 1779, 1767, 86, 86, - 1768, 86, 1778, 1769, 1777, 1772, 1773, 170, 86, 1771, - 86, 1780, 1781, 1774, 1782, 1783, 86, 1784, 86, 1776, - 86, 1786, 86, 1779, 86, 86, 1785, 1787, 86, 1778, - - 86, 1777, 1790, 1788, 1791, 1792, 1789, 1796, 1780, 1781, - 86, 1782, 1783, 86, 1784, 1794, 1795, 86, 1786, 86, - 1798, 1793, 86, 1785, 1787, 3523, 1800, 86, 86, 86, - 1788, 1791, 1792, 1789, 1797, 1802, 1799, 1801, 86, 86, - 86, 86, 1794, 1795, 1803, 86, 1805, 1804, 1793, 86, - 86, 1806, 86, 86, 1807, 1810, 86, 1809, 3523, 1808, - 1813, 1797, 1802, 1799, 1801, 1811, 86, 86, 86, 86, - 1818, 1803, 86, 1805, 1804, 86, 1812, 86, 1806, 86, - 1822, 1807, 1810, 1814, 1809, 86, 1808, 1813, 1820, 1819, - 86, 86, 1811, 1815, 1825, 1826, 1816, 1823, 86, 1824, - - 1827, 86, 86, 1812, 1821, 1828, 1829, 1822, 1817, 1832, - 1814, 86, 86, 1830, 3523, 1820, 1819, 86, 86, 86, - 1815, 1825, 86, 1816, 1823, 1831, 1824, 1833, 86, 1834, - 1836, 1821, 86, 1829, 1838, 1817, 1835, 86, 86, 86, - 1830, 86, 1839, 86, 1840, 86, 1837, 1841, 1842, 86, - 1843, 86, 1831, 86, 1833, 3523, 1834, 1836, 86, 1845, - 1844, 1838, 1846, 1835, 86, 1849, 1847, 1852, 1848, 3523, - 86, 1851, 86, 1837, 86, 1842, 86, 86, 86, 86, - 86, 86, 86, 1850, 1853, 1857, 1845, 1844, 86, 86, - 1854, 86, 1849, 1847, 1852, 1848, 1855, 86, 1851, 1856, - - 1858, 86, 1860, 86, 1861, 86, 1859, 1863, 86, 1862, - 1850, 1853, 1857, 1864, 86, 1870, 3523, 1854, 3523, 86, - 3523, 86, 86, 1855, 86, 86, 1856, 1858, 1865, 1860, - 1866, 1861, 1867, 1859, 1863, 86, 1862, 1868, 1869, 86, - 1871, 86, 86, 1873, 86, 86, 1872, 86, 1874, 1875, - 86, 1877, 1881, 1876, 86, 1865, 3523, 1866, 86, 1867, - 1878, 86, 3523, 1879, 1868, 1869, 86, 1871, 86, 86, - 1873, 1880, 86, 1872, 86, 1874, 1875, 1884, 1877, 1881, - 1876, 86, 1882, 86, 1885, 1883, 1888, 1878, 86, 1886, - 1879, 1887, 1889, 86, 1890, 1894, 86, 1892, 1880, 1891, - - 86, 1893, 3523, 1895, 1884, 1897, 86, 1896, 1907, 1882, - 86, 1885, 1883, 1888, 86, 86, 1886, 86, 1887, 86, - 1898, 86, 86, 1899, 1892, 86, 1891, 86, 1893, 1900, - 1895, 1901, 1897, 1902, 1896, 1903, 1904, 86, 1908, 1905, - 86, 1906, 86, 86, 86, 86, 1910, 1898, 3523, 1909, - 1899, 86, 1912, 86, 86, 3523, 1900, 1911, 1901, 86, - 1902, 86, 1903, 1904, 1913, 86, 1905, 1914, 1906, 86, - 1915, 86, 1918, 1910, 1917, 1916, 1909, 86, 86, 1912, - 1919, 1920, 86, 1921, 1911, 1923, 1922, 86, 3523, 1924, - 86, 1913, 1925, 1929, 1914, 1930, 86, 86, 3523, 1918, - - 3523, 1917, 86, 86, 86, 3523, 1926, 1919, 1920, 86, - 1921, 86, 1923, 1922, 1927, 86, 1924, 1928, 86, 1925, - 1929, 1931, 1930, 1933, 1935, 1932, 1936, 86, 1934, 1939, - 1937, 3523, 86, 1926, 86, 86, 1938, 86, 86, 1941, - 1940, 1927, 1942, 1943, 1928, 1945, 1944, 1949, 1931, 86, - 3523, 1935, 1932, 1936, 1946, 86, 1953, 1937, 86, 86, - 3523, 86, 1947, 1938, 1950, 86, 86, 1940, 1954, 86, - 1943, 1948, 1955, 1944, 86, 86, 1951, 86, 86, 86, - 86, 1946, 1952, 1958, 86, 1956, 1957, 86, 86, 1947, - 1960, 1950, 1959, 86, 86, 1954, 3523, 1961, 1948, 1955, - - 86, 1963, 86, 1951, 1962, 1964, 1966, 1965, 86, 1952, - 1958, 86, 1956, 1957, 86, 86, 1968, 1960, 86, 1959, - 86, 1969, 86, 1970, 1961, 1971, 1977, 1967, 1963, 1972, - 1973, 1962, 1964, 86, 1965, 1974, 86, 86, 1975, 86, - 1978, 1976, 1980, 86, 1981, 86, 3523, 1983, 86, 1979, - 1970, 86, 86, 86, 1967, 86, 1972, 1973, 86, 1982, - 86, 1984, 1974, 1986, 1988, 86, 86, 1978, 1976, 1980, - 86, 86, 1985, 1987, 1983, 1991, 1979, 1989, 1990, 86, - 3523, 86, 86, 86, 1992, 86, 1982, 1995, 1984, 1994, - 1986, 1988, 1993, 86, 86, 86, 1999, 1997, 1996, 1985, - - 1987, 86, 1991, 3523, 1989, 1990, 86, 170, 86, 1998, - 2001, 1992, 86, 2000, 86, 2005, 1994, 86, 2002, 1993, - 2003, 2004, 86, 86, 1997, 1996, 86, 2006, 2007, 86, - 86, 2009, 3523, 86, 2010, 86, 1998, 2001, 2011, 2012, - 2000, 2008, 2005, 86, 3523, 2002, 2014, 2003, 2004, 2013, - 86, 2015, 86, 2016, 2017, 2007, 3523, 2018, 2009, 86, - 3523, 86, 86, 2019, 86, 2011, 86, 2020, 2008, 86, - 2021, 86, 3523, 2014, 86, 86, 2013, 2022, 2024, 2023, - 86, 2017, 86, 86, 2018, 2025, 86, 86, 86, 2028, - 2019, 2026, 2029, 2027, 2020, 2032, 3523, 2021, 2037, 2035, - - 86, 86, 86, 2036, 2022, 2024, 2023, 86, 86, 86, - 2030, 2038, 2025, 3523, 86, 86, 2028, 2033, 2026, 2029, - 2027, 86, 2032, 2031, 2034, 86, 2035, 2039, 86, 2043, - 2036, 3523, 2040, 86, 2041, 2042, 86, 2030, 2044, 86, - 86, 2047, 86, 86, 2033, 2045, 86, 2046, 2048, 2049, - 2031, 2034, 2051, 2050, 2039, 2052, 2043, 2058, 86, 2040, - 86, 2041, 2042, 86, 2053, 2044, 2056, 86, 2047, 2057, - 86, 2054, 2045, 2059, 2046, 86, 86, 86, 2055, 86, - 2050, 86, 2052, 2060, 86, 2061, 2062, 2063, 3523, 86, - 2066, 2053, 86, 86, 86, 2065, 2057, 86, 2054, 2064, - - 2059, 86, 2068, 2067, 2069, 2055, 2072, 2071, 2070, 86, - 86, 3523, 2061, 86, 2063, 86, 2073, 86, 86, 86, - 86, 2074, 2065, 2075, 86, 2076, 2064, 2084, 86, 2068, - 2067, 86, 3523, 2072, 2071, 2070, 3523, 2081, 86, 2077, - 2078, 2079, 2082, 2073, 86, 86, 2080, 86, 2074, 2083, - 2075, 86, 2088, 2085, 86, 2091, 86, 86, 2086, 86, - 86, 2090, 2089, 2087, 2081, 86, 2077, 2078, 2079, 2082, - 2093, 86, 2092, 2080, 86, 3523, 2083, 2094, 2095, 2088, - 2085, 2096, 2091, 2097, 86, 86, 86, 86, 2090, 2089, - 86, 2098, 86, 2099, 2100, 86, 2102, 2103, 2101, 2092, - - 2104, 86, 86, 86, 2094, 2095, 2105, 86, 2096, 2106, - 86, 86, 2107, 2108, 2110, 2112, 3523, 2111, 2098, 86, - 2099, 2100, 86, 2102, 86, 2101, 2109, 2104, 86, 2113, - 86, 86, 86, 86, 2115, 86, 2106, 2114, 2122, 2107, - 2108, 2116, 86, 2118, 2111, 3523, 86, 2117, 86, 86, - 2119, 86, 2120, 2109, 86, 2121, 2113, 2123, 2125, 86, - 86, 2115, 2126, 86, 2114, 2122, 2124, 3523, 2116, 86, - 2118, 2127, 2128, 86, 2117, 2129, 2130, 2119, 86, 2120, - 86, 2133, 2131, 2132, 2134, 2125, 2137, 86, 86, 86, - 2135, 2136, 86, 2124, 86, 86, 86, 2139, 2127, 2128, - - 2140, 86, 2141, 86, 86, 86, 2144, 86, 2133, 2131, - 2132, 2134, 2149, 2137, 2142, 86, 2143, 2135, 2136, 2138, - 86, 86, 2145, 86, 2139, 2148, 2147, 2150, 86, 86, - 2146, 86, 86, 2144, 86, 86, 2151, 86, 2153, 86, - 2154, 2142, 2152, 2143, 2156, 2169, 2138, 86, 86, 2145, - 86, 2155, 2148, 2147, 2150, 2157, 2158, 2146, 2161, 2159, - 2163, 86, 86, 2151, 2160, 2153, 86, 2154, 2162, 2152, - 2165, 2156, 86, 86, 86, 86, 2164, 86, 2155, 86, - 2172, 2166, 86, 2158, 86, 86, 2159, 2163, 86, 2167, - 2170, 2160, 86, 2168, 2171, 2162, 86, 2165, 2173, 86, - - 86, 2174, 86, 2164, 2175, 3523, 86, 2172, 2166, 2176, - 2178, 2177, 86, 2181, 2182, 2179, 2167, 2170, 2183, 2185, - 2168, 2171, 2192, 2184, 2186, 2173, 86, 2180, 86, 86, - 86, 2175, 86, 2188, 86, 2190, 2176, 2178, 2177, 2194, - 86, 86, 2179, 2187, 86, 86, 2189, 2191, 2193, 2192, - 86, 86, 2199, 2196, 2180, 86, 86, 2195, 2198, 86, - 2188, 86, 86, 86, 2197, 86, 2194, 86, 2200, 86, - 2187, 2201, 2202, 2189, 2191, 2193, 86, 2203, 86, 86, - 2205, 2204, 2207, 2206, 2195, 86, 2208, 2209, 86, 2210, - 86, 2197, 86, 2211, 170, 2200, 86, 2212, 2201, 2202, - - 86, 2213, 3523, 2214, 2203, 86, 86, 2205, 2204, 2207, - 2206, 2215, 86, 2208, 86, 2216, 86, 2217, 2223, 2218, - 2211, 2219, 86, 2220, 2224, 86, 2221, 2229, 2213, 86, - 2214, 2228, 86, 86, 2226, 2227, 86, 2222, 2215, 86, - 86, 86, 2216, 86, 2217, 2223, 2218, 2225, 2219, 86, - 2220, 86, 86, 2221, 86, 86, 86, 86, 2228, 2230, - 2231, 2226, 2227, 2232, 2222, 86, 86, 2233, 2234, 2236, - 2235, 2237, 86, 2239, 2225, 86, 2240, 2245, 86, 2243, - 86, 2238, 86, 2246, 86, 2241, 2230, 2231, 86, 86, - 2232, 86, 86, 3523, 2233, 2234, 2242, 2235, 2237, 86, - - 2239, 86, 2244, 2240, 2245, 2250, 2243, 2247, 2238, 86, - 2246, 86, 2241, 2248, 2252, 2249, 2251, 3523, 2258, 3523, - 86, 86, 2253, 2242, 2254, 86, 2255, 86, 86, 2244, - 86, 86, 2250, 2256, 2247, 86, 2257, 86, 2259, 2261, - 2248, 86, 2249, 2251, 86, 2258, 86, 2260, 86, 2253, - 2262, 2254, 2263, 2255, 2264, 2266, 2270, 86, 2267, 2265, - 2256, 86, 2269, 2257, 2268, 86, 2261, 2271, 86, 2275, - 86, 2273, 2272, 3523, 2260, 86, 86, 2262, 86, 2263, - 86, 86, 86, 86, 86, 2267, 2265, 2276, 86, 2269, - 2274, 2268, 86, 2278, 2271, 86, 2275, 86, 2273, 2272, - - 2277, 2279, 3523, 2280, 2281, 86, 86, 2289, 86, 2282, - 86, 2283, 2284, 3523, 2276, 86, 86, 2274, 2292, 86, - 2278, 3523, 2286, 86, 2293, 2285, 2290, 2277, 2279, 86, - 2280, 2281, 2288, 86, 86, 86, 2282, 2287, 2283, 2284, - 2295, 86, 86, 2291, 2296, 2292, 86, 86, 2294, 2286, - 86, 2293, 2285, 2290, 2297, 86, 2298, 2299, 2300, 2288, - 3523, 2302, 86, 86, 2287, 2301, 2304, 2295, 2306, 86, - 2291, 2296, 2303, 3523, 86, 2294, 86, 86, 86, 86, - 2307, 2297, 2305, 2298, 2299, 2300, 2309, 86, 2302, 2308, - 86, 86, 2301, 2304, 2310, 86, 2311, 2312, 2313, 2303, - - 86, 2315, 86, 2316, 2314, 86, 2318, 2307, 2317, 2305, - 86, 3523, 86, 86, 2319, 86, 2308, 2321, 86, 2320, - 86, 2310, 86, 2311, 2312, 2313, 86, 2326, 2315, 2322, - 2316, 2314, 86, 86, 2323, 2317, 86, 2324, 86, 2325, - 86, 2319, 2327, 2329, 2321, 2328, 2320, 86, 2331, 2333, - 2330, 2332, 3523, 3523, 2326, 86, 86, 86, 2334, 2337, - 2335, 86, 2339, 3523, 2324, 2340, 2325, 86, 2336, 86, - 2329, 86, 2328, 86, 86, 2338, 2333, 2330, 2332, 86, - 86, 2341, 2342, 2359, 2343, 2334, 86, 2335, 86, 2339, - 86, 86, 2340, 86, 2344, 2336, 2348, 2345, 2346, 86, - - 2347, 2349, 2338, 2350, 86, 2352, 86, 2353, 2341, 2342, - 86, 2343, 86, 2351, 2354, 2355, 3523, 2358, 86, 2356, - 86, 2344, 86, 86, 2345, 2346, 3523, 2347, 86, 3523, - 2350, 86, 2352, 86, 2353, 86, 86, 86, 2357, 2360, - 2351, 2354, 2355, 2361, 2358, 86, 2356, 2362, 86, 2363, - 2365, 2364, 86, 86, 2368, 2366, 86, 2367, 2369, 3523, - 86, 2370, 2373, 86, 2371, 2357, 2360, 86, 86, 86, - 2361, 2372, 3523, 86, 2362, 2382, 2363, 2365, 2364, 86, - 86, 2368, 2366, 2374, 2367, 2369, 86, 2376, 2370, 2373, - 2377, 2371, 2379, 86, 86, 2378, 2375, 2380, 2372, 86, - - 2381, 86, 86, 2383, 86, 2384, 2385, 86, 86, 2388, - 2374, 2387, 2386, 2391, 2376, 86, 2395, 2377, 86, 2379, - 86, 86, 2378, 2375, 2380, 2396, 2389, 2381, 2397, 2390, - 2383, 86, 86, 2385, 86, 2398, 2388, 86, 2387, 2386, - 86, 2392, 2393, 2399, 2400, 86, 170, 2394, 86, 3523, - 86, 2401, 86, 2389, 86, 2397, 2390, 86, 2405, 2409, - 2406, 2404, 2398, 2408, 3523, 2402, 2407, 2410, 2392, 2411, - 2399, 86, 86, 2412, 86, 2413, 2403, 86, 2401, 86, - 2414, 86, 2415, 3523, 2417, 86, 86, 2406, 2404, 86, - 2408, 86, 2402, 2407, 2410, 86, 2411, 86, 2420, 2416, - - 86, 2418, 2413, 2403, 2422, 86, 86, 86, 86, 2415, - 2421, 2417, 86, 2419, 86, 86, 86, 2423, 2424, 2425, - 86, 2427, 2426, 2429, 2430, 2420, 2416, 86, 2418, 86, - 86, 2422, 2432, 2428, 2433, 86, 2440, 2421, 86, 86, - 2419, 2431, 2435, 86, 2423, 2424, 2425, 86, 2427, 2426, - 86, 2430, 2437, 86, 86, 2434, 2438, 86, 2436, 2432, - 2428, 2433, 2439, 86, 86, 2441, 86, 2442, 2431, 2435, - 86, 86, 2443, 2444, 86, 86, 2451, 3523, 2449, 2437, - 86, 86, 2434, 2438, 86, 2436, 2445, 2447, 2446, 2439, - 86, 86, 2441, 86, 2442, 86, 2448, 2450, 2452, 2443, - - 2444, 2455, 86, 86, 2453, 2449, 2454, 2456, 86, 2457, - 86, 2458, 3523, 2445, 2447, 2446, 86, 2459, 86, 86, - 2464, 2460, 86, 2448, 2450, 2452, 2461, 2463, 2455, 2462, - 2465, 2453, 86, 2454, 2456, 2466, 2457, 2467, 86, 86, - 86, 86, 86, 2468, 2459, 86, 86, 2464, 2460, 2469, - 3523, 2470, 2473, 2461, 2463, 86, 2462, 86, 2474, 2475, - 86, 3523, 2466, 86, 86, 2471, 2476, 2477, 2472, 2479, - 2468, 2480, 2481, 2478, 86, 2483, 2469, 86, 2470, 86, - 86, 86, 2482, 86, 86, 86, 2475, 2485, 86, 2486, - 86, 2487, 2471, 2476, 2477, 2472, 2479, 2484, 86, 86, - - 2478, 86, 86, 2488, 2489, 2491, 86, 2490, 2496, 2482, - 3523, 2492, 2493, 86, 86, 2495, 2486, 2498, 2487, 2494, - 86, 86, 3523, 86, 2484, 86, 2500, 86, 2497, 2501, - 86, 86, 2491, 2502, 2490, 86, 86, 86, 2492, 2493, - 2499, 2505, 2495, 2503, 86, 3523, 2494, 2508, 86, 86, - 86, 2506, 2507, 2500, 2509, 2497, 2501, 86, 2504, 86, - 2502, 2511, 2516, 2510, 86, 2514, 86, 2499, 86, 86, - 2503, 86, 86, 2512, 2508, 2515, 2517, 86, 2506, 2507, - 86, 2509, 2513, 2518, 86, 2504, 86, 2519, 86, 86, - 2510, 2521, 2514, 2523, 2520, 2524, 3523, 2522, 86, 86, - - 2512, 2528, 2515, 2517, 86, 86, 86, 2525, 86, 2513, - 2518, 2527, 86, 86, 2519, 2529, 86, 2526, 86, 2534, - 2523, 2520, 2524, 2530, 2522, 2535, 86, 86, 2528, 2539, - 2531, 2536, 3523, 86, 2525, 2542, 86, 2537, 2527, 2538, - 86, 86, 2529, 86, 2526, 2532, 2541, 2533, 86, 2540, - 2530, 86, 2535, 86, 86, 86, 2539, 2531, 2536, 86, - 2543, 2544, 2542, 2545, 2537, 2546, 2538, 2547, 86, 2548, - 2555, 2551, 2532, 2541, 2533, 2549, 2540, 86, 2552, 2550, - 2556, 86, 86, 86, 86, 86, 2553, 2543, 2544, 3523, - 2545, 86, 2546, 2554, 2557, 86, 2558, 2555, 2559, 86, - - 86, 86, 2549, 86, 86, 2552, 2550, 2556, 86, 2560, - 2562, 2561, 86, 2553, 86, 2563, 86, 2564, 2569, 2565, - 2554, 2557, 2566, 2558, 86, 2559, 86, 86, 2568, 86, - 2567, 2574, 3523, 2570, 2572, 3523, 2560, 2573, 2561, 3523, - 86, 2571, 86, 2579, 2564, 3523, 2565, 86, 86, 2566, - 86, 2577, 86, 170, 86, 2568, 2581, 2567, 2574, 86, - 2570, 2572, 86, 86, 2573, 2575, 2578, 2576, 2571, 2580, - 86, 2582, 86, 2583, 86, 2584, 2585, 86, 2577, 2587, - 2586, 86, 2588, 2581, 86, 2590, 86, 86, 2591, 86, - 2589, 86, 2575, 2578, 2576, 2592, 2580, 2593, 2582, 2595, - - 2583, 86, 2584, 2585, 86, 86, 2587, 2586, 2594, 2588, - 2596, 2597, 86, 2598, 86, 2591, 2605, 2589, 2600, 2599, - 2602, 86, 86, 2604, 2593, 3523, 2601, 2609, 2603, 86, - 86, 86, 86, 86, 2607, 2594, 86, 2608, 2597, 2606, - 86, 86, 86, 2610, 86, 2600, 2599, 2602, 86, 86, - 2604, 86, 86, 2601, 2609, 2603, 86, 2611, 2612, 2613, - 86, 2607, 2614, 2616, 2608, 2615, 2606, 2617, 2619, 86, - 86, 2618, 3523, 2620, 2622, 86, 86, 86, 2626, 86, - 86, 86, 2623, 3523, 2611, 2612, 2613, 86, 86, 2614, - 86, 2625, 2615, 86, 2617, 2619, 2621, 2624, 2618, 2627, - - 2620, 2622, 2628, 86, 86, 86, 2629, 3523, 2630, 2623, - 86, 2631, 2632, 86, 2634, 86, 86, 2635, 2625, 86, - 86, 2633, 2638, 2621, 2624, 2636, 2627, 86, 86, 2628, - 2639, 2637, 86, 2629, 86, 2630, 86, 2640, 2631, 2632, - 2643, 86, 2641, 2642, 2635, 2645, 86, 2644, 2633, 86, - 2646, 2648, 2636, 86, 86, 2647, 86, 2639, 2637, 2650, - 86, 2651, 86, 2652, 2640, 2649, 86, 2643, 2654, 2641, - 2642, 86, 2645, 2661, 2644, 2653, 86, 2646, 86, 86, - 86, 86, 2647, 86, 86, 2655, 86, 2656, 2651, 2659, - 86, 2658, 2649, 2657, 86, 2654, 86, 86, 2662, 2660, - - 86, 2663, 2653, 2664, 2675, 2665, 3523, 2668, 2666, 86, - 86, 86, 2655, 2670, 2656, 2669, 2659, 2667, 2658, 86, - 2657, 86, 86, 86, 2671, 86, 2660, 2673, 2672, 86, - 2664, 86, 2665, 86, 2668, 2666, 86, 86, 2674, 86, - 2670, 2676, 2669, 86, 2667, 2677, 2678, 2679, 2683, 2681, - 86, 2671, 2680, 2685, 86, 2672, 86, 86, 86, 2682, - 86, 2684, 86, 2686, 3523, 2674, 2688, 2687, 2676, 2689, - 3523, 86, 2677, 86, 2679, 86, 2681, 2691, 2692, 2680, - 2685, 86, 86, 86, 2690, 86, 2682, 2695, 2684, 86, - 2686, 86, 86, 2688, 2687, 2693, 2689, 86, 2696, 2694, - - 86, 2697, 86, 2698, 2691, 2692, 86, 2699, 2700, 86, - 2701, 2690, 3523, 2703, 2695, 2704, 2702, 3523, 2705, 86, - 2707, 2706, 2693, 86, 3523, 86, 2694, 86, 86, 3523, - 86, 2708, 2712, 3523, 86, 2700, 86, 2701, 86, 86, - 2703, 86, 2704, 2702, 86, 2705, 86, 2707, 2706, 2709, - 2711, 2710, 2713, 2714, 2715, 2716, 86, 86, 2708, 86, - 86, 86, 2720, 2724, 2718, 2721, 2722, 2723, 2717, 86, - 2719, 86, 2726, 86, 86, 3523, 2709, 2711, 2710, 2713, - 86, 86, 2716, 86, 86, 86, 2725, 86, 2729, 2720, - 86, 2718, 2721, 2722, 2723, 2717, 2728, 2719, 2731, 86, - - 2727, 86, 86, 86, 86, 2730, 2733, 2732, 86, 2734, - 2736, 86, 86, 2725, 2735, 2729, 2740, 2737, 2738, 3523, - 3523, 86, 2742, 2728, 170, 2731, 2739, 2727, 86, 86, - 86, 86, 2730, 2733, 2732, 86, 2734, 2736, 2741, 2743, - 86, 2735, 86, 2740, 2737, 2738, 86, 2744, 2745, 2742, - 2746, 2747, 86, 2739, 2748, 3523, 2749, 3523, 2750, 2751, - 2752, 2754, 3523, 2753, 3523, 2741, 2743, 3523, 86, 86, - 86, 86, 2755, 86, 2744, 2745, 86, 86, 86, 86, - 86, 2748, 86, 2749, 86, 2750, 2751, 2752, 2754, 2756, - 2753, 2757, 2759, 2758, 2760, 3523, 86, 2761, 86, 2755, - - 86, 86, 2762, 2763, 2764, 3523, 2765, 2766, 2769, 86, - 86, 2770, 86, 86, 2767, 2772, 2756, 3523, 2757, 2759, - 2758, 2760, 86, 2768, 2761, 2771, 86, 86, 86, 2762, - 2763, 2764, 86, 2765, 86, 2769, 2773, 2774, 86, 2775, - 2776, 2767, 86, 86, 2777, 86, 86, 2781, 86, 2778, - 2768, 2783, 2771, 2779, 2780, 86, 86, 2782, 86, 2784, - 86, 2785, 86, 2773, 2774, 86, 2775, 2776, 86, 2787, - 2786, 2777, 2788, 2789, 2781, 2790, 2778, 86, 86, 86, - 2779, 2780, 2791, 2792, 2782, 2793, 86, 3523, 2785, 2794, - 86, 86, 2795, 86, 2796, 86, 2787, 2786, 2797, 86, - - 86, 86, 86, 2799, 2798, 86, 2800, 86, 2802, 2791, - 2792, 2801, 2793, 3523, 86, 2803, 2794, 3523, 3523, 2795, - 2807, 2796, 2804, 86, 2805, 2797, 86, 86, 86, 2806, - 2799, 2798, 86, 86, 3523, 86, 86, 2808, 2801, 2809, - 86, 2810, 2803, 2812, 86, 2811, 2813, 2807, 86, 2804, - 86, 2805, 2814, 86, 2815, 86, 2806, 2816, 2817, 86, - 2818, 86, 2819, 2820, 2808, 2821, 2809, 86, 2810, 86, - 2812, 2822, 2811, 2813, 2823, 86, 86, 2824, 86, 2814, - 2825, 86, 2829, 86, 2816, 2817, 2827, 86, 86, 2819, - 2820, 2826, 2821, 86, 86, 2828, 2830, 86, 2822, 2831, - - 2833, 2823, 86, 86, 86, 2832, 2834, 2825, 2835, 86, - 3523, 86, 2836, 2827, 86, 2839, 2841, 86, 2826, 2837, - 2838, 2844, 2828, 2830, 2842, 3523, 2831, 86, 86, 2840, - 86, 86, 2832, 2834, 86, 86, 86, 86, 2845, 2836, - 2843, 2846, 2839, 86, 2847, 86, 2837, 2838, 86, 2851, - 86, 2842, 86, 2852, 2848, 86, 2840, 2849, 86, 2850, - 86, 2853, 2854, 2855, 3523, 2845, 2857, 2843, 2846, 2856, - 2858, 2847, 86, 86, 3523, 86, 86, 86, 2864, 86, - 2852, 2848, 2859, 2862, 2849, 86, 2850, 2860, 2853, 86, - 2855, 86, 86, 2857, 2861, 86, 2856, 2858, 2865, 2863, - - 86, 86, 86, 2866, 2867, 2864, 2868, 2869, 2870, 2859, - 2862, 86, 86, 2871, 2860, 86, 86, 2872, 2874, 2873, - 86, 2861, 2876, 2875, 3523, 2865, 2863, 86, 2881, 86, - 2866, 86, 86, 86, 2869, 2870, 2877, 86, 2878, 2879, - 170, 86, 3523, 2882, 2872, 2874, 2873, 2880, 2883, 2884, - 2875, 86, 2886, 2885, 86, 86, 2888, 2887, 86, 2889, - 2890, 2891, 86, 2877, 86, 2878, 2879, 2892, 2898, 86, - 86, 2894, 2896, 86, 2880, 2883, 86, 86, 86, 2893, - 2885, 86, 2897, 2888, 86, 2895, 2889, 2890, 86, 86, - 86, 86, 2899, 86, 2892, 2900, 2901, 86, 2894, 2896, - - 86, 86, 3523, 2904, 2903, 2902, 2893, 2906, 3523, 2897, - 3523, 86, 2895, 2905, 2907, 2908, 3523, 86, 3523, 2910, - 2911, 2912, 2900, 2901, 86, 86, 86, 86, 86, 86, - 2904, 2903, 2902, 86, 2906, 2909, 86, 86, 86, 86, - 2905, 2907, 2908, 2913, 86, 2914, 2910, 2911, 2912, 2915, - 2916, 2917, 2918, 2919, 2922, 2923, 3523, 2920, 2921, 86, - 2924, 86, 2909, 86, 86, 3523, 86, 2927, 86, 86, - 2913, 86, 2914, 86, 2925, 86, 2915, 2916, 2926, 2918, - 2919, 86, 2923, 86, 2920, 2921, 2929, 2924, 2928, 2931, - 86, 2932, 86, 2930, 86, 2933, 86, 86, 86, 2934, - - 86, 2925, 2935, 2938, 2937, 2926, 2939, 2944, 2936, 3523, - 2941, 2942, 86, 2929, 2943, 2928, 2931, 86, 86, 2940, - 2930, 86, 2933, 2945, 2951, 86, 2946, 2947, 86, 86, - 86, 86, 86, 2939, 86, 2936, 86, 2941, 2942, 86, - 86, 2943, 2949, 2948, 2952, 2953, 2940, 86, 2950, 86, - 2945, 86, 3523, 2946, 2947, 86, 2954, 86, 2955, 2956, - 2957, 2959, 2958, 3523, 3523, 2964, 2962, 86, 86, 2949, - 2948, 86, 86, 2960, 2965, 2950, 86, 2966, 2961, 86, - 86, 86, 2967, 2954, 86, 2955, 86, 2957, 2959, 2958, - 2963, 86, 2964, 2962, 2968, 2971, 2969, 86, 2970, 2972, - - 2973, 86, 2974, 2976, 86, 86, 2975, 86, 86, 86, - 86, 2978, 86, 2982, 2983, 2980, 2977, 2963, 86, 2985, - 2979, 2968, 86, 2969, 86, 2970, 2972, 2973, 86, 86, - 86, 2981, 86, 2975, 86, 2986, 2984, 2993, 86, 2992, - 3523, 86, 2980, 2977, 86, 86, 2989, 2979, 2987, 2990, - 86, 86, 2995, 2988, 2991, 2996, 86, 86, 2981, 86, - 86, 86, 2986, 2984, 2997, 2994, 2992, 86, 2998, 86, - 2999, 3523, 3000, 2989, 86, 86, 2990, 3001, 3005, 2995, - 86, 2991, 86, 3002, 3006, 3009, 86, 86, 3003, 3004, - 3077, 2997, 2994, 86, 86, 2998, 3007, 2999, 86, 3000, - - 86, 86, 3021, 86, 3001, 3005, 3008, 3010, 3523, 86, - 3002, 3006, 86, 3011, 3013, 3003, 3004, 3014, 3523, 86, - 86, 3012, 86, 3007, 3015, 86, 3016, 86, 3020, 86, - 3018, 3017, 3028, 3008, 3010, 3019, 86, 86, 3022, 3027, - 3011, 3013, 3023, 86, 3014, 3024, 3523, 3025, 3012, 3026, - 86, 3015, 3523, 3029, 86, 3020, 3030, 86, 86, 3028, - 86, 3038, 86, 3523, 86, 3022, 3027, 3032, 86, 3023, - 3033, 86, 3024, 86, 3025, 86, 3026, 3031, 86, 3034, - 3029, 3035, 3039, 3030, 3036, 3037, 3040, 3041, 86, 86, - 86, 86, 86, 3042, 3032, 3043, 86, 3033, 3044, 86, - - 3046, 86, 3045, 3047, 3031, 3048, 3034, 3523, 3035, 86, - 86, 3036, 3037, 3040, 3041, 86, 3049, 3050, 3052, 3051, - 86, 86, 3043, 86, 86, 86, 3053, 86, 86, 3045, - 3047, 3054, 3048, 3055, 86, 86, 3057, 3058, 3063, 3056, - 3064, 3062, 3061, 3049, 3050, 86, 3051, 86, 3065, 86, - 3059, 86, 86, 86, 86, 3060, 86, 3066, 3054, 86, - 3055, 86, 86, 3057, 3058, 3063, 3056, 3064, 3062, 3061, - 3067, 3068, 3069, 86, 3070, 86, 3071, 3072, 3073, 3523, - 86, 86, 86, 86, 86, 3074, 3076, 3078, 3075, 3079, - 3523, 3523, 86, 86, 86, 86, 3080, 3067, 3068, 3069, - - 3081, 86, 86, 3071, 3072, 3073, 86, 86, 3082, 3084, - 3083, 3085, 3074, 3076, 3078, 3075, 3079, 3086, 86, 3089, - 3096, 3087, 86, 3080, 3088, 86, 3090, 3081, 86, 3091, - 86, 86, 3092, 3093, 86, 3082, 3084, 3083, 3085, 3095, - 86, 3094, 3097, 3098, 3086, 3099, 86, 86, 3087, 86, - 86, 3088, 86, 86, 3100, 3105, 86, 3103, 3101, 3092, - 3093, 86, 3107, 86, 86, 86, 3095, 3104, 3094, 3097, - 3098, 3102, 86, 86, 3108, 3112, 86, 86, 3106, 86, - 86, 3100, 3109, 86, 3103, 3101, 3110, 86, 3111, 86, - 3116, 3113, 3115, 3523, 3104, 3114, 3117, 86, 3102, 86, - - 3131, 3108, 3112, 86, 86, 3106, 3118, 86, 86, 3109, - 86, 3119, 3120, 3110, 86, 3111, 3121, 86, 3113, 3115, - 86, 3122, 3114, 3117, 3125, 86, 3124, 86, 3123, 3128, - 3126, 3523, 86, 3118, 86, 86, 86, 86, 3119, 3120, - 3127, 3129, 3133, 3121, 3132, 86, 86, 86, 3122, 3134, - 86, 3125, 86, 3124, 3135, 3123, 3128, 3126, 3130, 86, - 86, 3136, 3137, 3138, 3139, 3141, 86, 3127, 3129, 86, - 3142, 3132, 3140, 86, 86, 3143, 86, 3144, 3145, 3148, - 3146, 3135, 86, 86, 86, 3130, 86, 86, 86, 3137, - 3138, 3139, 3141, 3147, 3151, 86, 3149, 86, 3153, 3140, - - 3150, 86, 3143, 3165, 3144, 86, 3148, 3146, 86, 86, - 86, 3152, 3154, 3156, 3155, 3157, 3158, 3159, 86, 86, - 3147, 86, 3164, 3149, 86, 3166, 3160, 3150, 86, 86, - 86, 3162, 3163, 86, 86, 86, 3167, 3169, 3152, 3154, - 86, 3155, 86, 3158, 3159, 3161, 3171, 86, 3168, 3164, - 86, 86, 3166, 86, 3170, 86, 3172, 3177, 3162, 3163, - 3173, 3174, 3175, 3167, 86, 3176, 86, 3178, 3179, 86, - 86, 3181, 3161, 3171, 3182, 3168, 86, 3523, 3185, 3523, - 86, 3170, 3183, 3172, 86, 3188, 86, 3173, 3174, 3175, - 3180, 86, 3189, 86, 3178, 3184, 3193, 86, 3181, 86, - - 86, 86, 3190, 86, 86, 3186, 3187, 86, 3197, 3183, - 86, 86, 86, 3192, 3191, 86, 86, 3180, 3194, 3189, - 3195, 3196, 3184, 86, 3198, 3199, 86, 86, 3200, 3190, - 3201, 86, 3186, 3187, 3202, 86, 3203, 3204, 3205, 86, - 3192, 3191, 3206, 86, 3207, 3194, 3209, 3195, 3196, 3211, - 86, 86, 86, 3208, 86, 3200, 86, 3201, 86, 3210, - 3212, 3202, 3213, 86, 86, 86, 3215, 86, 86, 86, - 3214, 3207, 3216, 3218, 86, 86, 86, 86, 86, 3217, - 3208, 86, 3219, 86, 3220, 3221, 3210, 3212, 3222, 3213, - 3223, 3224, 86, 3215, 3225, 86, 3226, 3214, 86, 3216, - - 86, 3235, 3229, 3227, 3231, 86, 3217, 3230, 86, 3219, - 86, 3220, 3221, 86, 3228, 3222, 3232, 3223, 86, 3234, - 3233, 86, 86, 3236, 86, 3237, 3238, 3239, 86, 3229, - 3227, 86, 86, 86, 3230, 3240, 3523, 3241, 86, 3244, - 3523, 3228, 86, 86, 86, 3245, 3234, 3233, 3242, 86, - 3236, 3523, 3237, 86, 3239, 86, 3243, 3246, 86, 86, - 86, 86, 3240, 86, 3241, 3248, 3244, 3247, 3252, 3249, - 3250, 3251, 3245, 86, 3523, 3242, 86, 86, 86, 86, - 86, 3253, 3254, 3243, 3246, 3256, 86, 3255, 3257, 3259, - 3264, 86, 3248, 86, 3247, 3252, 3249, 3250, 3251, 3258, - - 3260, 3262, 3263, 3265, 3261, 3267, 86, 86, 3253, 3254, - 86, 86, 3256, 3266, 3255, 3257, 86, 86, 3270, 3268, - 3271, 86, 86, 3272, 3273, 86, 3258, 3260, 3262, 3263, - 86, 3261, 86, 3276, 3269, 3279, 86, 3274, 3275, 3523, - 3266, 86, 86, 3277, 3278, 86, 3268, 86, 3280, 3281, - 3282, 3284, 86, 3523, 3283, 3288, 3523, 3290, 86, 86, - 86, 3269, 3279, 86, 86, 3287, 86, 86, 3291, 3296, - 86, 3292, 86, 3285, 3523, 3280, 3281, 86, 3284, 3286, - 86, 3283, 86, 3289, 3290, 3293, 86, 86, 86, 3294, - 86, 86, 3287, 3295, 86, 3291, 3296, 3297, 3292, 3298, - - 3285, 86, 86, 86, 3299, 3300, 3286, 3301, 3306, 3302, - 3289, 3303, 3293, 3307, 3523, 3308, 3294, 86, 3315, 3304, - 3295, 86, 3305, 3309, 86, 86, 3298, 3310, 3316, 3311, - 86, 3299, 86, 86, 86, 86, 3302, 86, 3303, 86, - 86, 3312, 3313, 3314, 3317, 86, 3304, 86, 3318, 3305, - 3309, 86, 3319, 3523, 3310, 3320, 3311, 3322, 3321, 3323, - 86, 3325, 3326, 86, 86, 86, 3327, 86, 3312, 3313, - 3314, 3317, 3324, 3328, 3329, 86, 3330, 3331, 3332, 86, - 86, 3335, 3320, 3337, 86, 3321, 86, 3339, 86, 86, - 86, 3333, 86, 86, 3334, 3336, 3341, 3343, 86, 3324, - - 86, 86, 3338, 86, 86, 86, 3346, 3340, 86, 86, - 3337, 86, 86, 86, 86, 86, 3342, 3344, 3333, 3345, - 3348, 3334, 3336, 86, 3343, 3347, 3349, 3350, 86, 3338, - 3351, 86, 86, 86, 3340, 86, 3352, 86, 3355, 3353, - 3354, 3523, 3356, 3342, 3344, 86, 3345, 86, 86, 3357, - 3358, 86, 3347, 3349, 3350, 86, 3359, 3351, 86, 3361, - 3362, 3360, 86, 3352, 86, 86, 3353, 3354, 3363, 3356, - 86, 86, 86, 3364, 3365, 86, 3357, 3358, 86, 3523, - 86, 3366, 3367, 3359, 3368, 86, 3361, 3362, 3360, 3369, - 3370, 86, 3371, 3372, 3373, 3363, 3523, 86, 86, 3374, - - 3364, 3365, 3376, 86, 3385, 3523, 86, 3375, 3366, 3367, - 3379, 3368, 86, 86, 86, 86, 86, 86, 3380, 86, - 3372, 3373, 86, 3377, 3378, 3383, 3374, 86, 3382, 3376, - 3381, 3385, 86, 3384, 3375, 3386, 3387, 3379, 86, 86, - 86, 86, 86, 86, 3388, 3380, 86, 3389, 3391, 3390, - 3377, 3378, 3383, 3392, 86, 3382, 86, 3381, 3394, 86, - 3384, 3393, 3386, 3387, 86, 86, 3395, 3396, 3397, 3399, - 86, 3388, 3398, 86, 3389, 3391, 3390, 3401, 3403, 86, - 3392, 86, 3400, 86, 3402, 86, 3404, 3523, 3393, 86, - 3405, 3407, 3408, 3395, 3396, 3397, 86, 3523, 86, 3398, - - 86, 3406, 3409, 3412, 86, 86, 3523, 3416, 86, 3400, - 86, 3402, 3413, 86, 86, 86, 3414, 3405, 3407, 3408, - 3410, 3411, 86, 3415, 86, 86, 3418, 3419, 3406, 3409, - 3417, 86, 3420, 86, 86, 86, 3422, 86, 3421, 3413, - 3423, 3425, 3424, 3414, 86, 86, 86, 3410, 3411, 3426, - 3415, 86, 86, 86, 86, 3427, 3428, 3417, 3429, 3420, - 3430, 3435, 3436, 86, 86, 3421, 3431, 3423, 86, 3424, - 3432, 3437, 3433, 3434, 86, 86, 3426, 86, 3438, 86, - 86, 3439, 3427, 3428, 86, 86, 3440, 3444, 86, 86, - 86, 3449, 86, 3431, 86, 86, 3441, 3432, 3437, 3433, - - 3434, 86, 3442, 86, 3443, 3438, 3445, 3446, 3439, 86, - 3447, 3523, 86, 3440, 3444, 86, 3448, 3452, 86, 3450, - 86, 3451, 3453, 3441, 86, 86, 86, 3455, 3454, 3442, - 86, 3443, 86, 3445, 3446, 3456, 3457, 3447, 86, 3460, - 3523, 3461, 3458, 3448, 3452, 3459, 3450, 86, 3451, 86, - 86, 3462, 3463, 3464, 3465, 3454, 3467, 3466, 86, 86, - 3468, 86, 3456, 3457, 86, 86, 3460, 86, 86, 3458, - 3470, 3473, 3459, 86, 86, 3523, 86, 86, 86, 3463, - 86, 3465, 3469, 3467, 3466, 3471, 3472, 3468, 3474, 3475, - 86, 3478, 3476, 86, 3480, 3477, 3479, 86, 3473, 86, - - 86, 3481, 86, 3482, 86, 3485, 3483, 86, 86, 3469, - 3484, 86, 3471, 3472, 3487, 86, 3475, 86, 3478, 3476, - 86, 3480, 3477, 3479, 3488, 86, 3486, 86, 3481, 3490, - 3482, 86, 3485, 3483, 86, 3489, 3491, 3484, 3492, 3493, - 86, 3487, 3494, 3495, 86, 3523, 3498, 3501, 3496, 86, - 86, 3488, 3497, 3486, 86, 3499, 3490, 86, 3503, 3523, - 3523, 86, 3489, 3491, 3523, 86, 3493, 86, 86, 3494, - 86, 3504, 86, 3498, 86, 3496, 3500, 86, 3502, 3497, - 86, 3505, 3499, 3506, 86, 3503, 86, 3507, 3508, 86, - 3511, 86, 3509, 86, 3510, 3512, 3514, 3523, 3504, 3515, - - 86, 3523, 86, 3500, 3513, 3502, 3517, 3516, 3505, 3521, - 3506, 3522, 3519, 86, 3507, 86, 86, 3511, 3518, 3509, - 86, 3510, 86, 86, 86, 3523, 86, 86, 86, 3520, - 3523, 3513, 3523, 3517, 3516, 3523, 86, 86, 86, 3519, - 86, 3523, 3523, 3523, 3523, 3518, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3520, 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, 3523, 89, - 89, 89, 89, 160, 160, 3523, 3523, 3523, 160, 160, - 162, 162, 3523, 3523, 162, 3523, 162, 164, 3523, 3523, - 3523, 3523, 3523, 164, 167, 167, 3523, 3523, 3523, 167, - 167, 169, 3523, 3523, 3523, 3523, 3523, 169, 171, 171, - 3523, 171, 171, 171, 171, 174, 3523, 3523, 3523, 3523, - 3523, 174, 177, 177, 3523, 3523, 3523, 177, 177, 90, - 90, 3523, 90, 90, 90, 90, 17, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523 + 473, 481, 86, 482, 86, 86, 487, 496, 86, 483, + 86, 476, 477, 86, 86, 497, 488, 498, 485, 484, + 489, 495, 486, 86, 491, 3557, 492, 3557, 86, 86, + 499, 508, 503, 487, 496, 493, 500, 3557, 509, 86, + + 510, 3557, 494, 488, 498, 86, 3557, 86, 495, 86, + 86, 491, 86, 492, 501, 504, 502, 499, 508, 503, + 511, 3557, 493, 500, 86, 509, 512, 525, 505, 494, + 3557, 506, 86, 507, 86, 3557, 3557, 528, 86, 86, + 529, 501, 504, 502, 526, 3557, 3557, 86, 86, 86, + 531, 3557, 86, 512, 525, 505, 3557, 530, 506, 533, + 507, 513, 527, 514, 528, 543, 532, 529, 86, 515, + 86, 526, 86, 516, 86, 544, 548, 531, 517, 542, + 545, 518, 170, 86, 530, 550, 533, 86, 513, 527, + 514, 86, 543, 532, 546, 551, 515, 86, 553, 3557, + + 516, 547, 566, 548, 3557, 517, 542, 86, 518, 519, + 549, 520, 550, 86, 3557, 86, 555, 552, 86, 554, + 86, 546, 551, 86, 521, 86, 556, 522, 547, 523, + 86, 524, 557, 3557, 86, 86, 519, 549, 520, 86, + 561, 558, 3557, 555, 552, 3557, 554, 86, 562, 3557, + 563, 521, 3557, 556, 522, 86, 523, 3557, 524, 534, + 535, 559, 86, 564, 86, 567, 565, 561, 558, 536, + 537, 538, 539, 540, 568, 562, 541, 563, 86, 560, + 569, 86, 571, 86, 86, 86, 534, 535, 559, 570, + 564, 86, 567, 565, 573, 86, 536, 537, 538, 539, + + 540, 568, 86, 541, 574, 86, 560, 569, 572, 578, + 86, 575, 576, 3557, 86, 577, 570, 579, 581, 580, + 86, 573, 86, 582, 583, 3557, 86, 588, 86, 585, + 3557, 574, 86, 604, 586, 572, 578, 607, 609, 589, + 86, 584, 577, 86, 579, 581, 580, 86, 86, 587, + 582, 583, 86, 86, 588, 590, 585, 86, 591, 593, + 86, 586, 592, 3557, 607, 86, 589, 86, 584, 86, + 86, 86, 86, 605, 606, 608, 587, 610, 594, 595, + 612, 3557, 590, 86, 3557, 591, 593, 611, 613, 592, + 596, 86, 597, 86, 614, 617, 86, 86, 616, 618, + + 605, 606, 608, 86, 610, 594, 595, 612, 86, 86, + 3557, 615, 86, 619, 611, 613, 86, 596, 86, 597, + 598, 614, 617, 620, 86, 616, 86, 621, 599, 600, + 622, 624, 601, 602, 623, 86, 603, 86, 615, 625, + 619, 3557, 86, 86, 631, 86, 626, 598, 627, 657, + 620, 86, 630, 86, 621, 599, 600, 86, 624, 601, + 602, 623, 86, 603, 628, 632, 625, 86, 86, 633, + 86, 631, 629, 626, 86, 627, 634, 640, 636, 630, + 635, 86, 637, 86, 86, 638, 639, 3557, 641, 642, + 86, 628, 632, 643, 86, 3557, 633, 86, 3557, 629, + + 86, 86, 86, 634, 640, 636, 645, 635, 86, 637, + 647, 86, 638, 639, 86, 641, 642, 644, 646, 86, + 643, 648, 659, 86, 86, 86, 651, 86, 86, 649, + 652, 650, 653, 645, 654, 655, 656, 647, 86, 86, + 668, 86, 86, 86, 644, 646, 658, 660, 648, 86, + 3557, 86, 661, 651, 86, 665, 649, 652, 650, 653, + 664, 654, 655, 656, 86, 86, 666, 662, 86, 86, + 663, 667, 86, 658, 660, 670, 669, 671, 86, 661, + 3557, 3557, 665, 86, 86, 674, 86, 664, 673, 86, + 675, 677, 3557, 666, 662, 86, 679, 663, 667, 86, + + 672, 86, 670, 669, 676, 681, 678, 86, 86, 86, + 86, 682, 674, 680, 86, 673, 86, 675, 677, 86, + 683, 3557, 692, 679, 693, 694, 3557, 672, 86, 86, + 86, 676, 681, 678, 86, 86, 3557, 86, 682, 3557, + 680, 695, 696, 697, 3557, 698, 731, 683, 684, 692, + 86, 693, 694, 685, 699, 686, 86, 3557, 706, 702, + 3557, 687, 703, 688, 86, 86, 689, 690, 695, 696, + 697, 86, 698, 691, 86, 684, 86, 86, 86, 700, + 685, 699, 686, 701, 86, 706, 702, 709, 687, 703, + 688, 710, 704, 689, 690, 705, 711, 707, 713, 86, + + 691, 86, 86, 86, 712, 86, 700, 708, 86, 714, + 701, 715, 717, 86, 709, 716, 719, 718, 710, 704, + 86, 720, 705, 711, 86, 713, 3557, 723, 86, 86, + 3557, 712, 86, 744, 708, 86, 714, 721, 715, 717, + 724, 86, 716, 719, 718, 86, 722, 86, 720, 86, + 726, 86, 725, 727, 723, 729, 732, 728, 86, 3557, + 86, 3557, 86, 730, 721, 86, 3557, 724, 734, 733, + 738, 86, 735, 722, 86, 86, 86, 726, 86, 725, + 727, 86, 729, 732, 728, 86, 170, 739, 736, 737, + 730, 741, 740, 86, 86, 734, 733, 738, 86, 735, + + 86, 86, 742, 743, 746, 745, 751, 747, 3557, 3557, + 749, 748, 750, 762, 739, 736, 737, 86, 741, 740, + 86, 86, 86, 86, 86, 752, 3557, 760, 86, 742, + 86, 765, 745, 751, 747, 86, 86, 749, 748, 750, + 753, 757, 756, 759, 761, 86, 758, 754, 763, 86, + 755, 764, 752, 86, 86, 766, 768, 86, 86, 771, + 767, 769, 86, 86, 772, 770, 773, 753, 775, 756, + 759, 86, 86, 86, 754, 86, 86, 755, 86, 774, + 776, 86, 778, 768, 86, 86, 771, 86, 769, 86, + 86, 772, 770, 773, 777, 775, 779, 780, 783, 781, + + 784, 792, 86, 86, 86, 86, 774, 776, 782, 778, + 785, 786, 787, 86, 3557, 3557, 3557, 86, 86, 788, + 86, 777, 86, 86, 780, 783, 781, 784, 86, 793, + 3557, 790, 789, 86, 794, 782, 86, 785, 786, 787, + 86, 86, 86, 791, 795, 799, 788, 86, 800, 796, + 86, 86, 797, 798, 86, 801, 793, 806, 790, 789, + 3557, 794, 802, 803, 86, 804, 807, 3557, 86, 86, + 791, 795, 799, 86, 86, 800, 796, 808, 805, 797, + 798, 3557, 801, 809, 806, 86, 810, 86, 3557, 802, + 803, 86, 804, 812, 813, 86, 817, 814, 86, 820, + + 815, 3557, 821, 816, 808, 805, 86, 86, 811, 86, + 809, 86, 86, 810, 818, 86, 86, 819, 86, 86, + 812, 813, 822, 817, 814, 823, 820, 815, 86, 86, + 816, 824, 825, 86, 828, 811, 826, 86, 827, 86, + 86, 818, 3557, 86, 819, 830, 829, 831, 832, 822, + 833, 3557, 823, 86, 86, 835, 834, 836, 824, 825, + 840, 842, 837, 826, 86, 827, 86, 86, 838, 86, + 86, 839, 830, 829, 86, 86, 86, 833, 86, 86, + 841, 843, 835, 834, 836, 844, 846, 86, 845, 837, + 86, 847, 86, 86, 3557, 838, 854, 848, 839, 849, + + 853, 3557, 86, 856, 86, 86, 850, 841, 843, 855, + 86, 86, 844, 86, 858, 845, 3557, 859, 86, 860, + 851, 852, 857, 854, 848, 86, 849, 86, 86, 86, + 856, 863, 86, 850, 869, 861, 855, 86, 864, 86, + 86, 858, 865, 870, 859, 86, 860, 851, 852, 857, + 862, 867, 866, 86, 3557, 871, 868, 879, 872, 86, + 86, 869, 861, 86, 86, 864, 86, 873, 877, 865, + 870, 3557, 874, 880, 3557, 875, 86, 862, 876, 866, + 86, 86, 871, 86, 86, 872, 878, 86, 881, 86, + 3557, 882, 86, 86, 873, 877, 86, 883, 884, 874, + + 880, 889, 875, 86, 885, 876, 86, 86, 886, 86, + 888, 892, 86, 878, 890, 881, 891, 887, 882, 893, + 3557, 86, 86, 3557, 883, 884, 86, 86, 894, 86, + 896, 885, 86, 86, 86, 886, 897, 888, 892, 895, + 898, 890, 902, 891, 887, 86, 893, 86, 903, 899, + 86, 86, 904, 86, 905, 894, 909, 896, 86, 900, + 901, 906, 3557, 897, 907, 86, 895, 898, 86, 902, + 86, 3557, 86, 911, 908, 903, 899, 86, 912, 904, + 86, 905, 86, 909, 86, 910, 900, 901, 906, 86, + 914, 907, 916, 915, 913, 86, 917, 3557, 86, 921, + + 911, 908, 86, 918, 86, 912, 86, 919, 86, 920, + 923, 924, 910, 86, 86, 922, 86, 914, 926, 916, + 915, 913, 925, 917, 86, 927, 921, 3557, 86, 86, + 918, 86, 928, 86, 919, 86, 920, 923, 924, 929, + 86, 930, 922, 931, 932, 926, 933, 934, 936, 925, + 3557, 939, 943, 3557, 170, 935, 86, 86, 86, 928, + 86, 86, 86, 86, 86, 940, 929, 941, 930, 937, + 931, 932, 942, 933, 934, 86, 944, 938, 86, 945, + 86, 950, 935, 86, 86, 86, 946, 86, 947, 948, + 86, 949, 940, 3557, 941, 86, 937, 951, 86, 942, + + 86, 86, 86, 944, 938, 952, 945, 953, 950, 86, + 962, 954, 3557, 946, 86, 947, 948, 86, 86, 3557, + 963, 3557, 86, 86, 951, 964, 967, 965, 976, 3557, + 86, 3557, 952, 3557, 953, 3557, 3557, 962, 954, 955, + 966, 3557, 956, 86, 86, 969, 957, 963, 86, 958, + 3557, 968, 964, 967, 965, 970, 959, 960, 972, 961, + 86, 86, 86, 971, 86, 986, 955, 966, 86, 956, + 973, 86, 969, 957, 86, 974, 958, 985, 968, 86, + 975, 86, 970, 959, 960, 972, 961, 86, 86, 86, + 971, 984, 986, 988, 987, 3557, 3557, 973, 86, 86, + + 992, 990, 974, 86, 985, 3557, 3557, 975, 977, 978, + 989, 979, 3557, 86, 980, 993, 86, 991, 984, 981, + 988, 987, 86, 86, 86, 982, 983, 992, 990, 994, + 996, 995, 86, 1001, 86, 977, 978, 989, 979, 997, + 998, 980, 993, 86, 991, 999, 981, 1000, 1003, 1002, + 3557, 86, 982, 983, 1004, 1005, 994, 996, 995, 86, + 1001, 86, 1006, 86, 1008, 1007, 997, 86, 1009, 1010, + 86, 1011, 86, 1016, 1000, 1003, 1002, 86, 1012, 86, + 86, 1004, 1005, 1013, 86, 1015, 86, 86, 1019, 1006, + 86, 86, 1007, 86, 1014, 1009, 1010, 1017, 1011, 86, + + 1016, 86, 86, 1018, 86, 1012, 1022, 1021, 1020, 86, + 1013, 86, 1015, 1023, 86, 1019, 86, 86, 1026, 1024, + 1025, 1014, 86, 1027, 1017, 1029, 1028, 1031, 1030, 1032, + 1018, 1033, 3557, 1022, 1021, 1020, 86, 1034, 1037, 1035, + 1038, 86, 3557, 1036, 3557, 86, 1024, 86, 86, 1039, + 86, 86, 1041, 1028, 1042, 1030, 1032, 86, 1047, 86, + 86, 86, 86, 86, 1034, 86, 1035, 86, 86, 1040, + 1036, 1043, 1045, 1044, 86, 1048, 1039, 86, 86, 1041, + 1046, 1042, 86, 86, 1049, 86, 1050, 1051, 86, 1052, + 1053, 86, 3557, 86, 1054, 3557, 1040, 86, 1043, 1045, + + 1044, 1055, 1048, 86, 86, 1056, 1057, 1046, 86, 1059, + 1058, 1049, 86, 86, 1089, 1063, 1052, 1053, 1061, 86, + 86, 1054, 1060, 1062, 86, 1064, 1066, 86, 1055, 86, + 1065, 86, 1056, 1057, 86, 86, 1059, 1058, 1067, 86, + 1068, 86, 1063, 1069, 1070, 1061, 86, 1072, 1075, 1060, + 1062, 86, 86, 1066, 1076, 1071, 86, 86, 86, 3557, + 1073, 1078, 86, 1077, 86, 1067, 1079, 1068, 1074, 86, + 1069, 1070, 86, 86, 1072, 1075, 1085, 1086, 1080, 1081, + 86, 86, 1071, 86, 86, 86, 86, 1073, 1078, 1082, + 1077, 1083, 1084, 1079, 86, 1074, 1090, 1091, 86, 1087, + + 86, 1088, 1092, 1085, 1086, 1080, 1081, 1093, 86, 86, + 86, 1095, 86, 86, 86, 86, 1082, 1094, 1083, 1084, + 1096, 1098, 1097, 1090, 1091, 1099, 1087, 1102, 1088, 1092, + 86, 3557, 86, 1100, 1093, 86, 1104, 1106, 1095, 86, + 1109, 86, 86, 86, 1094, 86, 1101, 1096, 1098, 1097, + 1103, 1105, 86, 86, 1102, 86, 1111, 86, 86, 1107, + 1100, 1108, 1110, 1104, 1106, 1112, 1113, 86, 86, 86, + 1115, 1116, 86, 1101, 1114, 3557, 1124, 1103, 1105, 86, + 3557, 86, 1117, 1111, 1118, 1121, 1107, 1123, 1108, 1122, + 1125, 1119, 86, 1113, 86, 86, 1126, 86, 1129, 1120, + + 1131, 1114, 86, 86, 3557, 86, 86, 86, 86, 1117, + 1127, 1118, 1121, 86, 1123, 1128, 1122, 1130, 1119, 86, + 86, 1133, 86, 1126, 86, 1132, 1120, 86, 1137, 86, + 86, 1140, 1134, 1138, 86, 1141, 1142, 1127, 1139, 1143, + 3557, 86, 1128, 86, 1130, 1135, 86, 1136, 1133, 1144, + 86, 1147, 1132, 1160, 86, 1148, 86, 3557, 1140, 1134, + 170, 86, 1141, 1142, 86, 1139, 1143, 1145, 1158, 86, + 1146, 86, 1135, 86, 1136, 86, 1144, 1149, 1147, 1150, + 86, 1159, 1148, 1169, 86, 86, 3557, 1161, 3557, 86, + 1157, 86, 3557, 86, 1145, 1158, 1162, 1146, 1167, 1163, + + 1165, 86, 1186, 1168, 1149, 1164, 1150, 1151, 1159, 1152, + 1169, 86, 3557, 1153, 1161, 1154, 86, 1157, 86, 86, + 1155, 1171, 86, 1162, 1166, 1156, 1163, 1165, 1170, 86, + 86, 86, 1164, 1172, 1151, 1174, 1152, 86, 1173, 1176, + 1153, 86, 1154, 1178, 86, 1175, 1177, 1155, 1171, 1181, + 86, 1166, 1156, 1179, 86, 1170, 86, 86, 1180, 86, + 1172, 1182, 1174, 1184, 1183, 1173, 1176, 86, 86, 1185, + 1178, 86, 1175, 1177, 1188, 1191, 1181, 1199, 1189, 3557, + 1179, 1190, 86, 86, 86, 1180, 86, 3557, 1182, 86, + 1200, 1183, 86, 1203, 1201, 86, 1202, 3557, 3557, 1205, + + 1211, 86, 1191, 1204, 1199, 1189, 86, 86, 1190, 1192, + 3557, 86, 86, 1206, 1193, 3557, 1194, 1200, 86, 86, + 1203, 1201, 1195, 1202, 86, 86, 1205, 1196, 1197, 1207, + 1204, 1208, 86, 1210, 1198, 86, 1192, 1209, 1213, 86, + 1206, 1193, 86, 1194, 86, 86, 1212, 1218, 1214, 1195, + 1216, 1215, 1221, 86, 1196, 1197, 1207, 86, 1208, 86, + 1210, 1198, 86, 1217, 1209, 1213, 1219, 1222, 86, 1220, + 1224, 1223, 86, 1212, 86, 1214, 86, 1216, 1215, 86, + 1226, 1225, 1227, 1229, 86, 1232, 3557, 1230, 1233, 86, + 1217, 86, 86, 1219, 1222, 86, 1220, 1224, 1223, 1228, + + 1231, 86, 1235, 1244, 86, 86, 86, 86, 1225, 1227, + 1229, 86, 86, 1234, 1230, 1233, 1236, 86, 1237, 1239, + 1240, 86, 3557, 86, 86, 1238, 1228, 1231, 1242, 1235, + 1241, 86, 86, 1245, 86, 86, 1248, 1246, 86, 3557, + 1234, 1243, 3557, 1236, 86, 1237, 1239, 1240, 86, 86, + 86, 86, 1238, 1250, 1247, 1242, 1251, 1241, 86, 1249, + 1245, 86, 1252, 1248, 1246, 86, 86, 86, 1243, 1253, + 1254, 1255, 1256, 1258, 86, 1257, 1259, 1260, 3557, 1264, + 1250, 1247, 1261, 1251, 1265, 3557, 1249, 3557, 1268, 1252, + 86, 86, 86, 86, 86, 86, 1253, 1254, 1255, 1256, + + 1262, 86, 1257, 1269, 1260, 86, 1263, 1273, 86, 1261, + 1266, 86, 86, 1267, 86, 1268, 86, 86, 1270, 1272, + 1271, 86, 1275, 1274, 1277, 86, 1278, 1262, 86, 3557, + 1269, 86, 1276, 1263, 1273, 86, 86, 1266, 86, 86, + 1267, 1279, 1280, 3557, 1281, 1270, 1272, 1271, 1282, 1286, + 1274, 1283, 1284, 1278, 86, 86, 86, 86, 1285, 1276, + 86, 1288, 1289, 86, 1287, 1291, 1290, 1294, 1279, 1280, + 86, 1281, 86, 1293, 86, 1282, 1286, 1295, 1283, 1284, + 86, 86, 86, 86, 86, 1285, 86, 1292, 1288, 1289, + 1296, 1287, 1291, 1290, 86, 1298, 1297, 1300, 86, 86, + + 1293, 1299, 1301, 1305, 86, 86, 86, 1303, 86, 1302, + 86, 1304, 1306, 1307, 1292, 1308, 86, 1296, 1310, 86, + 1318, 1309, 1298, 1297, 1300, 86, 1312, 86, 1299, 1301, + 1311, 86, 1313, 1316, 1303, 86, 1302, 86, 1304, 1315, + 1314, 1317, 1308, 86, 86, 86, 86, 86, 1309, 86, + 86, 1319, 86, 1320, 86, 1321, 1325, 1311, 86, 1313, + 1323, 1324, 1322, 86, 86, 86, 1315, 1314, 1317, 86, + 86, 86, 86, 1326, 1330, 1328, 1331, 1327, 1319, 3557, + 1320, 3557, 1321, 1325, 86, 86, 86, 1323, 1324, 1322, + 86, 1329, 1333, 1332, 1334, 86, 1337, 1336, 1338, 86, + + 1326, 1335, 1328, 1340, 1327, 86, 86, 86, 86, 86, + 86, 86, 86, 1341, 86, 1343, 1345, 86, 1329, 1333, + 1332, 86, 1346, 1337, 1336, 1338, 1342, 1344, 1335, 1347, + 1340, 86, 1349, 1348, 86, 86, 1351, 1350, 1357, 170, + 1341, 86, 1343, 86, 1353, 1355, 1352, 1354, 86, 1346, + 86, 86, 1358, 1342, 1344, 86, 1347, 3557, 1360, 1349, + 1348, 86, 1356, 1351, 1350, 86, 86, 1359, 1361, 86, + 86, 1353, 86, 1352, 1354, 1362, 1365, 1363, 86, 1364, + 86, 1368, 1371, 1367, 86, 1360, 1418, 1366, 1369, 1356, + 86, 86, 86, 86, 1359, 1361, 3557, 86, 86, 86, + + 86, 86, 1362, 1365, 1363, 1370, 1364, 1372, 1368, 86, + 1367, 1374, 1373, 86, 1366, 1369, 1375, 1376, 86, 1377, + 86, 86, 1381, 86, 86, 1382, 1383, 1384, 1378, 3557, + 1379, 3557, 1370, 1380, 1372, 1387, 1385, 86, 1374, 1373, + 3557, 86, 1388, 1375, 1376, 86, 1377, 1390, 86, 1381, + 86, 86, 1382, 1383, 86, 1378, 86, 1379, 1386, 86, + 1380, 1389, 1387, 1385, 1391, 86, 1393, 1392, 1394, 1388, + 86, 86, 1398, 3557, 1390, 86, 1395, 3557, 1399, 1397, + 1396, 86, 1400, 3557, 1404, 1386, 86, 86, 1389, 86, + 86, 1391, 1402, 1393, 1392, 1394, 86, 1403, 1405, 86, + + 86, 1401, 86, 1395, 86, 1399, 1397, 1396, 86, 1400, + 86, 1404, 1411, 1407, 86, 1406, 1412, 1408, 1410, 1402, + 86, 86, 1417, 3557, 1403, 1405, 1409, 86, 1401, 1413, + 86, 86, 86, 1416, 86, 3557, 3557, 86, 1415, 1411, + 1407, 86, 1406, 1412, 1408, 1410, 1414, 86, 1419, 1417, + 1420, 1421, 86, 1409, 86, 86, 1413, 86, 1422, 1423, + 1416, 1424, 1426, 1425, 86, 1415, 1428, 86, 1427, 86, + 86, 86, 1429, 1414, 1430, 1419, 86, 1420, 1421, 86, + 86, 1431, 1433, 1432, 1434, 1422, 1423, 1437, 1424, 1426, + 1425, 86, 1435, 86, 1436, 1427, 86, 1443, 86, 1429, + + 1438, 86, 86, 86, 1440, 1439, 86, 1441, 1431, 1433, + 1432, 1434, 86, 1442, 1437, 1451, 86, 1452, 1453, 1435, + 86, 1436, 1457, 86, 1443, 1454, 1467, 86, 3557, 86, + 3557, 1440, 86, 1455, 1441, 86, 3557, 1461, 1456, 1458, + 1442, 1444, 1451, 86, 1452, 1445, 3557, 1459, 1446, 1447, + 86, 86, 1454, 1448, 86, 86, 86, 1460, 86, 1449, + 1455, 86, 1462, 1450, 1461, 1456, 1458, 86, 1444, 86, + 1465, 1463, 1445, 1464, 1459, 1446, 1447, 86, 1466, 1470, + 1448, 1468, 1473, 86, 1460, 1469, 1449, 86, 86, 1462, + 1450, 1471, 86, 1472, 1474, 86, 1476, 1465, 1463, 86, + + 1464, 86, 86, 1475, 86, 1466, 1470, 1477, 1468, 1483, + 1489, 1484, 1469, 3557, 86, 3557, 1486, 1487, 1471, 86, + 1472, 86, 1485, 1476, 86, 86, 86, 1488, 3557, 1490, + 1475, 86, 3557, 86, 1477, 1478, 1483, 1489, 1484, 1492, + 1479, 86, 1480, 86, 1481, 86, 1482, 1493, 86, 1485, + 1491, 1498, 1494, 86, 1488, 1496, 1490, 86, 1495, 86, + 86, 1497, 1478, 1499, 86, 1503, 1492, 1479, 1504, 1480, + 3557, 1481, 1500, 1482, 1502, 3557, 86, 1491, 1498, 86, + 86, 86, 1496, 86, 1501, 1495, 1506, 86, 1497, 1505, + 1499, 3557, 86, 1507, 86, 1504, 1508, 86, 1513, 1500, + + 86, 1502, 1509, 1510, 86, 86, 86, 1511, 1512, 1514, + 1515, 1501, 1516, 1506, 1517, 86, 1505, 86, 86, 1518, + 1507, 86, 1523, 1508, 86, 1513, 1519, 86, 1525, 1509, + 1510, 86, 1520, 1522, 1511, 1512, 1514, 86, 1524, 1516, + 1521, 86, 1526, 1531, 86, 86, 1518, 3557, 86, 86, + 86, 86, 1527, 1519, 86, 86, 1528, 1529, 1530, 1520, + 1522, 1533, 86, 86, 86, 1524, 1532, 1521, 86, 1526, + 86, 86, 1534, 86, 86, 1535, 1536, 1538, 1537, 1527, + 1540, 3557, 86, 1528, 1529, 1530, 1539, 3557, 1533, 86, + 1541, 1542, 3557, 1532, 1543, 86, 86, 1544, 1545, 1534, + + 86, 3557, 1535, 86, 1538, 1537, 1548, 1540, 86, 1546, + 86, 86, 1547, 1539, 86, 1549, 86, 1541, 1542, 1550, + 86, 1543, 1551, 1552, 1544, 1545, 1553, 1555, 86, 1556, + 86, 1554, 86, 1548, 86, 1557, 1546, 86, 1558, 1547, + 1560, 86, 1549, 3557, 86, 86, 1550, 86, 1559, 1551, + 1552, 86, 1563, 1553, 1555, 1561, 1562, 1564, 1554, 1565, + 86, 86, 1567, 1566, 86, 1558, 86, 86, 86, 1569, + 86, 86, 86, 86, 1568, 1559, 1572, 1573, 1574, 1563, + 1570, 170, 1561, 1562, 86, 86, 1565, 86, 1571, 1567, + 1566, 86, 86, 1575, 3557, 1578, 1569, 1576, 3557, 86, + + 1581, 1568, 86, 1577, 1579, 1574, 1580, 1570, 86, 86, + 86, 86, 1583, 86, 1582, 1571, 1585, 1588, 86, 1584, + 1586, 86, 1578, 86, 1576, 86, 86, 1581, 1587, 86, + 1577, 1579, 1589, 1580, 1590, 1592, 86, 1591, 86, 1583, + 1593, 1582, 1594, 1585, 86, 86, 1584, 1586, 1595, 1596, + 86, 86, 1597, 3557, 3557, 1587, 86, 1604, 1598, 1589, + 1599, 1590, 1603, 1600, 1591, 86, 86, 86, 86, 1594, + 86, 1601, 86, 1605, 1602, 1595, 1596, 1606, 1608, 1597, + 86, 1607, 86, 1609, 1604, 1598, 86, 1599, 1610, 1603, + 1600, 1611, 1614, 86, 86, 1612, 86, 1613, 1601, 86, + + 1605, 1602, 1616, 1615, 86, 1608, 86, 3557, 1607, 86, + 1617, 86, 1618, 1619, 86, 86, 1623, 86, 1611, 1614, + 86, 1624, 1612, 1620, 1613, 86, 1621, 3557, 1627, 1616, + 1615, 3557, 1622, 3557, 86, 86, 86, 1617, 1625, 1618, + 1619, 86, 86, 1623, 86, 1629, 1626, 86, 1624, 1628, + 1620, 3557, 3557, 1621, 86, 1630, 86, 1631, 1635, 1622, + 86, 1634, 1632, 86, 86, 1625, 1633, 1636, 1637, 86, + 86, 3557, 1629, 1626, 86, 1639, 1628, 1638, 86, 1640, + 86, 86, 1630, 1641, 1631, 1635, 86, 86, 1634, 1632, + 86, 1642, 1644, 1633, 1636, 1637, 1643, 86, 1645, 86, + + 1646, 1647, 1639, 86, 1638, 3557, 1640, 1648, 1650, 86, + 1641, 1649, 3557, 1655, 86, 1651, 1652, 1654, 1642, 1644, + 86, 1656, 1653, 1643, 86, 1645, 1657, 86, 86, 1658, + 1660, 3557, 86, 86, 1648, 86, 86, 86, 1649, 86, + 1659, 1661, 1651, 1652, 1654, 86, 1664, 1662, 3557, 1653, + 1663, 1666, 1667, 86, 1668, 86, 1658, 86, 86, 86, + 1671, 86, 1665, 86, 86, 86, 86, 1659, 1661, 1669, + 1672, 1670, 86, 1664, 1662, 86, 86, 1663, 1666, 1667, + 86, 1668, 86, 86, 1673, 1683, 1674, 1671, 1676, 1665, + 86, 1675, 86, 1677, 1678, 1680, 1669, 1672, 1670, 1679, + + 1681, 86, 1684, 86, 1687, 1682, 1685, 86, 86, 1691, + 86, 1673, 1683, 86, 3557, 1686, 1688, 1694, 86, 1693, + 86, 1678, 1680, 86, 86, 86, 1679, 1681, 1689, 1684, + 1690, 86, 1682, 1685, 1703, 86, 86, 1692, 86, 1695, + 86, 86, 1686, 1688, 1696, 86, 1693, 86, 1697, 86, + 1698, 1699, 86, 1702, 1700, 1689, 86, 1690, 86, 86, + 86, 1703, 1701, 1704, 1692, 86, 1695, 86, 86, 1708, + 1707, 1696, 1709, 1710, 1705, 1697, 1706, 1698, 1699, 1711, + 1702, 1700, 86, 1718, 86, 86, 1713, 86, 3557, 1701, + 1704, 1712, 86, 1714, 1715, 86, 86, 1707, 1716, 86, + + 1710, 1705, 86, 1706, 86, 86, 1711, 86, 1719, 1721, + 1718, 1717, 1720, 1713, 1723, 1722, 86, 3557, 1712, 86, + 1714, 1715, 1724, 1725, 86, 1716, 86, 1730, 1728, 1729, + 86, 1726, 1727, 1736, 1731, 1719, 1721, 1742, 1717, 1720, + 1732, 86, 1722, 86, 86, 1734, 86, 86, 1737, 1724, + 86, 86, 1740, 1733, 1730, 86, 1729, 86, 1726, 1727, + 86, 1731, 86, 86, 1735, 86, 1741, 1732, 1738, 86, + 1739, 86, 1734, 1744, 86, 86, 86, 86, 1743, 1740, + 1733, 1746, 1745, 1747, 1751, 86, 3557, 1748, 1749, 1750, + 86, 1735, 86, 1741, 86, 1738, 1752, 1739, 86, 86, + + 86, 1753, 3557, 86, 1755, 1743, 86, 1761, 86, 1745, + 1747, 1751, 1757, 86, 1748, 1749, 1750, 1754, 86, 86, + 1756, 1758, 3557, 1752, 86, 1760, 3557, 1759, 1753, 86, + 86, 1755, 86, 86, 1761, 1762, 1763, 3557, 86, 1757, + 1765, 1772, 86, 1764, 1754, 86, 1767, 1756, 1758, 86, + 1766, 1768, 1760, 86, 1759, 86, 1769, 86, 1770, 1771, + 3557, 1773, 1762, 1763, 86, 86, 1775, 1765, 86, 1774, + 1764, 86, 86, 1767, 1776, 1778, 86, 1766, 1768, 86, + 86, 1777, 1779, 1769, 86, 1770, 1771, 1780, 1773, 86, + 1781, 86, 86, 1775, 1782, 86, 1774, 1784, 1783, 3557, + + 1788, 1776, 1778, 1791, 1785, 86, 1787, 1786, 1777, 1779, + 3557, 86, 86, 86, 1780, 86, 86, 1781, 170, 1793, + 1794, 86, 86, 1797, 1784, 1783, 86, 1788, 1789, 1790, + 1791, 1785, 1795, 1787, 1786, 1792, 86, 86, 1799, 86, + 1798, 1796, 86, 1807, 1800, 86, 1793, 1794, 86, 1801, + 86, 86, 1803, 1802, 1804, 1789, 1790, 1805, 86, 1795, + 86, 86, 1792, 1810, 1806, 1799, 1809, 1798, 1796, 1811, + 86, 1800, 86, 1812, 86, 86, 1801, 86, 1808, 1814, + 1802, 1804, 1813, 1816, 86, 86, 86, 86, 1815, 86, + 1810, 1806, 86, 1809, 1817, 86, 1811, 86, 1818, 86, + + 1812, 1820, 1819, 1825, 1826, 1808, 1814, 1821, 86, 1813, + 1816, 86, 1829, 3557, 86, 1815, 86, 1822, 86, 3557, + 1823, 1817, 1827, 1830, 86, 1818, 86, 1832, 1820, 1819, + 86, 1826, 1824, 1833, 1821, 86, 1834, 1835, 1828, 1829, + 1831, 86, 86, 3557, 1822, 86, 86, 1823, 1836, 1827, + 1830, 86, 1837, 1839, 1832, 1838, 3557, 1841, 3557, 1824, + 86, 1840, 1845, 1842, 1846, 1828, 1843, 1831, 86, 86, + 86, 86, 86, 1844, 86, 1836, 1847, 1848, 86, 1837, + 86, 86, 1838, 86, 1841, 86, 86, 1850, 1840, 1845, + 1842, 1849, 3557, 1843, 1851, 1852, 86, 1853, 86, 1856, + + 1844, 1854, 1855, 1858, 1857, 3557, 86, 1859, 86, 86, + 86, 86, 86, 86, 1860, 1871, 1864, 86, 1849, 86, + 86, 1851, 1852, 86, 86, 1861, 1856, 86, 1854, 1855, + 1858, 1857, 1865, 1862, 1859, 1863, 1866, 86, 86, 86, + 1868, 1860, 86, 1864, 86, 1867, 1869, 86, 3557, 1872, + 1870, 3557, 1861, 1875, 1877, 86, 86, 86, 1873, 1865, + 1862, 86, 1863, 1866, 86, 86, 86, 1868, 1874, 86, + 1879, 1882, 1867, 1869, 1880, 86, 1872, 1870, 1876, 1878, + 1875, 86, 1881, 86, 86, 1873, 86, 1883, 1884, 86, + 1885, 86, 86, 1886, 3557, 1874, 3557, 1879, 1882, 86, + + 86, 1880, 1888, 1914, 1887, 1876, 1878, 1889, 86, 1881, + 1890, 86, 1891, 1896, 1883, 1884, 86, 1885, 1895, 1897, + 1886, 1892, 86, 86, 1901, 86, 1893, 1899, 1894, 1888, + 86, 1887, 1898, 86, 1889, 86, 86, 1890, 1900, 1891, + 86, 1903, 86, 1902, 1904, 1895, 86, 86, 1892, 86, + 1905, 86, 1907, 1893, 1899, 1894, 1906, 86, 1908, 1898, + 86, 1915, 86, 1909, 1910, 1900, 86, 3557, 1903, 86, + 1902, 1904, 86, 1916, 86, 3557, 1913, 1905, 86, 1907, + 3557, 86, 1917, 1906, 1911, 1908, 1919, 1912, 86, 86, + 1909, 1910, 1918, 86, 86, 86, 1921, 1920, 1924, 1922, + + 1916, 1925, 86, 1913, 1923, 1948, 86, 86, 1928, 1917, + 86, 1911, 1927, 1919, 1912, 1926, 86, 86, 1929, 1918, + 86, 86, 1930, 1921, 1920, 1924, 1931, 3557, 1925, 86, + 1932, 86, 1933, 1935, 86, 1928, 1936, 86, 3557, 1927, + 86, 1938, 1926, 1937, 3557, 1929, 1934, 1940, 1939, 1930, + 86, 86, 86, 1931, 86, 1944, 86, 1932, 86, 1933, + 1935, 1941, 1946, 1936, 1943, 86, 1942, 86, 1938, 1949, + 1937, 1945, 1947, 1934, 1940, 1939, 86, 86, 86, 1950, + 1951, 1952, 1944, 1954, 86, 86, 1955, 1953, 1958, 1946, + 1956, 1943, 1957, 86, 1962, 1959, 1949, 86, 1945, 1947, + + 86, 3557, 1963, 86, 1960, 86, 86, 86, 1952, 86, + 1961, 1967, 86, 1955, 1953, 86, 1964, 1956, 1968, 1957, + 86, 86, 1959, 1969, 86, 1965, 86, 1966, 86, 1963, + 86, 1960, 1970, 86, 1972, 86, 1973, 1961, 1967, 1971, + 86, 86, 1974, 1964, 1975, 1968, 86, 1977, 86, 86, + 1969, 1978, 1965, 1979, 1966, 86, 1986, 86, 1980, 1970, + 1984, 1972, 1983, 1973, 1982, 1976, 1971, 86, 1981, 1974, + 86, 86, 1985, 86, 1990, 86, 1987, 1991, 3557, 86, + 1979, 86, 1988, 86, 86, 86, 86, 86, 86, 1983, + 1992, 1982, 1976, 86, 1993, 1981, 1989, 1995, 1996, 1985, + + 1994, 86, 1998, 1987, 1991, 86, 86, 86, 1997, 1988, + 2001, 2004, 1999, 86, 2000, 2002, 86, 1992, 2006, 86, + 86, 1993, 2008, 1989, 1995, 1996, 86, 1994, 86, 1998, + 170, 2003, 86, 86, 86, 1997, 2005, 2001, 86, 1999, + 2007, 2000, 2002, 86, 86, 2006, 2009, 2011, 86, 86, + 2010, 2012, 2013, 2015, 2014, 2017, 2016, 2019, 2003, 86, + 86, 86, 86, 2005, 86, 2018, 86, 2007, 2021, 2020, + 86, 86, 2022, 2009, 2011, 2025, 2024, 2010, 2012, 2013, + 2023, 2014, 2017, 2016, 86, 86, 86, 2027, 2026, 2028, + 2029, 2047, 2018, 86, 86, 86, 2020, 86, 86, 2022, + + 2030, 2031, 86, 86, 2033, 86, 3557, 2023, 86, 2032, + 86, 2034, 86, 86, 2027, 2026, 2028, 2029, 86, 2035, + 2036, 2038, 2037, 86, 3557, 3557, 86, 2030, 2031, 2045, + 2044, 2033, 2039, 86, 86, 86, 2032, 86, 2034, 2046, + 3557, 86, 3557, 86, 2041, 2040, 2035, 2036, 2038, 2037, + 86, 86, 86, 2042, 2049, 2048, 2045, 2044, 2051, 2039, + 2043, 86, 86, 2052, 2053, 2050, 86, 2056, 2057, 86, + 86, 2041, 2040, 86, 2058, 86, 2059, 2060, 2067, 2061, + 2042, 2049, 2048, 86, 2054, 2051, 2055, 2043, 2069, 86, + 2052, 2053, 2050, 86, 2056, 86, 2062, 86, 2065, 2066, + + 2068, 86, 86, 2059, 86, 86, 2061, 2070, 2063, 2064, + 86, 2054, 2071, 2055, 86, 86, 86, 2085, 2072, 2073, + 86, 86, 86, 2062, 86, 86, 2066, 2068, 2074, 2075, + 2076, 2077, 2078, 2080, 2070, 2063, 2064, 86, 2079, 86, + 86, 2081, 2082, 3557, 86, 2072, 2073, 2083, 2084, 86, + 86, 3557, 86, 86, 2090, 2074, 86, 2076, 2077, 86, + 2080, 86, 2091, 86, 86, 2079, 2093, 2099, 2081, 2082, + 86, 86, 2092, 86, 2083, 2084, 2086, 2087, 2088, 86, + 2094, 2090, 2097, 2089, 2098, 2095, 2100, 86, 2101, 2091, + 2096, 86, 86, 2102, 2099, 86, 86, 2106, 86, 2092, + + 86, 2103, 86, 2086, 2087, 2088, 2105, 2094, 2108, 2097, + 2089, 2098, 86, 2100, 2104, 2101, 2111, 86, 2112, 86, + 2109, 86, 2107, 86, 86, 86, 2110, 86, 2103, 2113, + 2114, 86, 2116, 2105, 86, 2108, 86, 2115, 2118, 86, + 2117, 2104, 86, 2111, 86, 86, 2119, 2109, 2121, 2107, + 86, 2130, 2120, 2110, 2122, 2132, 2113, 86, 86, 2116, + 86, 2123, 2124, 86, 2115, 2118, 2125, 2117, 2126, 86, + 2127, 2128, 86, 86, 2129, 86, 2135, 2131, 86, 2120, + 2138, 2122, 86, 86, 86, 86, 2134, 86, 2123, 2124, + 2136, 2139, 2140, 2125, 2137, 2126, 86, 2127, 2128, 86, + + 2133, 2129, 86, 2142, 2131, 2141, 86, 86, 86, 2144, + 86, 2145, 86, 2134, 86, 86, 2143, 2136, 86, 2140, + 2146, 2137, 2147, 86, 86, 2149, 86, 2133, 2148, 86, + 2142, 86, 2141, 86, 2150, 2151, 2144, 2154, 2145, 3557, + 3557, 2152, 2153, 2143, 86, 2159, 2162, 2146, 86, 2147, + 2156, 86, 2149, 2155, 86, 2148, 2157, 86, 86, 2158, + 86, 86, 2160, 2161, 2154, 86, 86, 86, 2152, 2153, + 2163, 86, 86, 2162, 2165, 2164, 3557, 2156, 86, 2168, + 2155, 86, 2166, 2157, 2169, 2172, 2158, 2167, 2170, 2160, + 2161, 2175, 3557, 2171, 3557, 2174, 3557, 2163, 86, 86, + + 86, 2165, 2164, 86, 86, 86, 86, 86, 86, 2166, + 2173, 2169, 86, 2176, 2167, 2170, 86, 2177, 2175, 2178, + 2171, 2179, 2174, 2180, 86, 2181, 86, 2182, 86, 2183, + 2185, 2184, 2196, 2186, 86, 86, 3557, 2173, 2187, 86, + 2176, 2197, 2192, 2191, 2177, 86, 2178, 2193, 2179, 2188, + 86, 86, 2181, 2199, 2182, 86, 2183, 86, 2184, 86, + 2186, 86, 2201, 2189, 86, 2187, 2194, 86, 2190, 86, + 2191, 2195, 2200, 86, 86, 86, 2188, 2198, 86, 86, + 2199, 2202, 2203, 2207, 2205, 2204, 2206, 86, 86, 2209, + 2189, 2210, 2208, 2211, 86, 2190, 86, 86, 86, 2200, + + 86, 86, 2213, 3557, 2198, 86, 2217, 2212, 2202, 2203, + 86, 2205, 2204, 2206, 86, 86, 2214, 2215, 86, 2208, + 2211, 86, 2216, 2218, 170, 2219, 2220, 2221, 86, 2213, + 86, 86, 86, 2217, 2212, 2222, 2223, 2224, 2225, 2227, + 2226, 3557, 86, 2214, 2215, 2229, 3557, 86, 2228, 2216, + 2218, 86, 2219, 86, 86, 2231, 2230, 86, 86, 2232, + 86, 86, 2222, 2233, 2224, 2225, 2227, 2226, 86, 86, + 86, 86, 2229, 2234, 86, 2228, 2235, 2237, 86, 2236, + 2238, 86, 2231, 2230, 2239, 2240, 2232, 2241, 2244, 2243, + 2233, 2242, 3557, 2247, 86, 86, 86, 86, 86, 86, + + 2234, 2245, 86, 86, 2237, 2246, 2236, 2238, 86, 86, + 2248, 2239, 86, 2249, 2241, 2244, 2243, 2250, 2242, 86, + 2251, 2254, 2270, 2252, 86, 86, 86, 86, 2245, 2256, + 86, 86, 2246, 86, 2253, 2255, 86, 2248, 2257, 2258, + 2249, 2261, 2263, 2259, 2250, 2260, 2262, 2251, 2254, 86, + 2252, 86, 2264, 86, 86, 3557, 2256, 86, 86, 2273, + 86, 2253, 2255, 86, 86, 2257, 2258, 2265, 2261, 86, + 2259, 2266, 2260, 2262, 2267, 2268, 86, 2269, 86, 2264, + 2272, 2271, 86, 2274, 86, 86, 2273, 86, 2275, 2277, + 86, 86, 86, 2276, 2265, 2278, 2279, 2280, 2266, 2281, + + 86, 2267, 2268, 2286, 2269, 2283, 86, 2272, 2271, 2284, + 2274, 3557, 86, 2282, 86, 86, 86, 2287, 86, 2318, + 2276, 86, 2278, 2279, 2280, 86, 86, 2285, 2289, 86, + 2286, 86, 2283, 2288, 86, 86, 2284, 2290, 2291, 86, + 2282, 2292, 2298, 86, 2287, 2293, 86, 2294, 2300, 86, + 86, 86, 86, 2295, 2285, 2289, 86, 2296, 2299, 86, + 2288, 2301, 86, 86, 2290, 2291, 2303, 2302, 2292, 2298, + 2297, 2304, 2293, 86, 2294, 2300, 86, 2305, 86, 2306, + 2295, 2307, 2308, 2309, 2296, 2299, 86, 2312, 86, 2310, + 3557, 3557, 86, 2303, 2302, 86, 3557, 2297, 2304, 86, + + 2311, 2314, 2315, 86, 2305, 86, 2306, 86, 2307, 2308, + 2309, 86, 2313, 2316, 2312, 2317, 2310, 86, 2319, 86, + 86, 86, 2320, 86, 2321, 2322, 86, 2311, 2314, 2315, + 2324, 2323, 2325, 2330, 2326, 86, 3557, 2327, 86, 2313, + 2316, 2328, 2317, 86, 2331, 2319, 86, 3557, 2332, 2320, + 86, 86, 2322, 86, 86, 86, 86, 2324, 2323, 2325, + 2329, 2326, 86, 2333, 2327, 86, 86, 86, 2328, 2334, + 2336, 2331, 2337, 2338, 2335, 2332, 2339, 2341, 86, 2340, + 86, 2343, 2342, 2344, 3557, 2345, 86, 2329, 86, 86, + 2333, 2346, 2350, 86, 86, 2351, 2354, 2336, 2352, 2337, + + 2338, 86, 2347, 86, 2341, 86, 2340, 86, 2343, 2342, + 86, 86, 2345, 2348, 86, 86, 86, 2353, 2346, 86, + 2355, 2349, 2351, 2354, 86, 2352, 2356, 2357, 2358, 2347, + 2361, 2359, 86, 2362, 2360, 86, 86, 2364, 2363, 3557, + 2348, 2366, 86, 86, 2353, 2365, 86, 2355, 2349, 2368, + 86, 2367, 86, 2356, 2357, 2358, 86, 2361, 2359, 86, + 2369, 2360, 2371, 86, 2364, 86, 86, 2370, 2366, 86, + 2372, 86, 2365, 2373, 2374, 2375, 2368, 2376, 2367, 2377, + 2380, 86, 86, 86, 86, 2379, 86, 2369, 86, 2371, + 86, 2378, 86, 86, 2370, 2381, 2382, 2372, 86, 2383, + + 86, 2374, 2375, 2384, 2376, 2385, 2377, 2380, 2388, 2386, + 86, 86, 2379, 2390, 86, 2387, 2391, 86, 2378, 2393, + 86, 2389, 2381, 2382, 2396, 2392, 2383, 86, 86, 86, + 2384, 86, 2385, 86, 86, 2388, 2386, 86, 2395, 2394, + 2390, 86, 2387, 2391, 2397, 2398, 2393, 2400, 2389, 2399, + 2401, 86, 2392, 2402, 2403, 86, 86, 2405, 86, 2404, + 2409, 2410, 86, 2411, 2406, 2395, 2394, 86, 86, 170, + 2414, 2397, 86, 86, 2400, 86, 2399, 2401, 2407, 2412, + 2402, 2403, 2415, 2408, 2418, 2419, 2404, 86, 2413, 86, + 2411, 2406, 86, 86, 2420, 86, 2416, 86, 86, 2421, + + 2423, 2425, 86, 2424, 2422, 2428, 2412, 2417, 86, 2415, + 86, 2418, 86, 86, 86, 2413, 2426, 2427, 2429, 2431, + 86, 2420, 2430, 2416, 3557, 86, 2421, 86, 2425, 86, + 2424, 2422, 86, 2432, 2417, 2434, 2433, 86, 86, 86, + 86, 86, 86, 86, 2427, 2429, 2431, 2435, 2437, 2430, + 2438, 86, 2436, 2442, 2439, 2443, 2441, 86, 86, 86, + 2432, 2440, 2434, 2433, 86, 86, 2444, 2448, 86, 2446, + 86, 3557, 2445, 2451, 2435, 2437, 86, 2438, 86, 2436, + 2442, 2439, 86, 2441, 86, 2447, 86, 2449, 2440, 86, + 2450, 86, 2452, 2444, 2448, 86, 2446, 2454, 86, 2445, + + 2451, 2453, 86, 2455, 2465, 2456, 86, 2457, 2458, 2551, + 86, 3557, 2447, 86, 2449, 86, 86, 2450, 2461, 2452, + 2460, 2459, 86, 86, 86, 86, 86, 2462, 2453, 2463, + 2455, 2464, 2456, 86, 2457, 2458, 86, 86, 2466, 2467, + 2469, 86, 2468, 2470, 86, 2461, 2472, 2460, 2459, 2473, + 86, 2474, 2471, 86, 2462, 86, 2463, 2478, 2464, 86, + 2475, 86, 2479, 2480, 2476, 2466, 2467, 2469, 86, 2468, + 2470, 86, 2477, 86, 86, 86, 2473, 86, 2474, 2471, + 2481, 2482, 2483, 86, 2478, 2484, 86, 2475, 86, 86, + 2480, 2476, 2485, 86, 2488, 2486, 86, 2489, 2487, 2477, + + 3557, 2490, 2494, 2492, 2491, 2495, 2496, 86, 2482, 2483, + 86, 86, 2484, 86, 2498, 3557, 2500, 86, 86, 2485, + 2493, 86, 2486, 86, 86, 2487, 86, 86, 2490, 2494, + 2492, 2491, 86, 86, 2497, 2499, 2501, 2502, 2503, 2504, + 2505, 86, 86, 86, 86, 2507, 2509, 2493, 86, 2510, + 2506, 2511, 2512, 86, 86, 86, 2508, 2513, 2517, 86, + 86, 2497, 2499, 2501, 2502, 86, 86, 2505, 86, 86, + 2515, 86, 2507, 2509, 2516, 3557, 2510, 2506, 86, 2512, + 2514, 2520, 86, 2508, 86, 2517, 3557, 2518, 2521, 86, + 2525, 2522, 86, 2524, 2523, 86, 86, 2515, 86, 2526, + + 2528, 2516, 2519, 86, 2527, 86, 2529, 2514, 86, 2531, + 86, 86, 86, 86, 2518, 2521, 2530, 2525, 2522, 86, + 2524, 2523, 2532, 2534, 2537, 2535, 86, 2528, 86, 2519, + 2533, 2527, 86, 2529, 2536, 2538, 2531, 86, 86, 2539, + 2540, 3557, 86, 2530, 2545, 86, 86, 2541, 2543, 86, + 2534, 86, 2535, 86, 2542, 2546, 86, 2533, 2547, 86, + 86, 2536, 2538, 86, 2544, 86, 2539, 2540, 2553, 2548, + 86, 2545, 2552, 86, 2541, 2543, 2554, 2555, 2556, 86, + 2558, 2542, 2546, 86, 2549, 2547, 2550, 86, 2557, 3557, + 86, 2544, 86, 86, 86, 2553, 2548, 2560, 86, 2552, + + 2559, 86, 86, 2554, 2555, 2556, 2561, 2558, 2562, 2563, + 2564, 2549, 2565, 2550, 2566, 2557, 2568, 3557, 2569, 86, + 86, 86, 2567, 2572, 2560, 2570, 2579, 2559, 86, 2571, + 86, 86, 2581, 2561, 86, 2562, 2563, 86, 2573, 2574, + 86, 2566, 86, 2575, 86, 2569, 2576, 86, 86, 2567, + 2572, 2577, 2570, 2580, 2578, 86, 2571, 86, 86, 2581, + 2585, 86, 86, 3557, 86, 2573, 2574, 86, 2582, 86, + 2575, 2584, 2583, 2576, 2586, 86, 2587, 3557, 2577, 86, + 2594, 2578, 2589, 2591, 2588, 86, 86, 2585, 2590, 86, + 2592, 86, 2593, 2595, 2596, 2582, 2597, 86, 2584, 2583, + + 86, 2599, 86, 2587, 86, 170, 86, 2594, 86, 2589, + 2591, 2588, 2598, 2600, 86, 2590, 86, 2592, 2602, 2593, + 2595, 86, 2601, 2597, 86, 2604, 2603, 2606, 2599, 2605, + 86, 2607, 2609, 86, 86, 2608, 86, 2612, 2613, 2598, + 2600, 2610, 86, 3557, 2611, 2602, 2614, 86, 2615, 2601, + 86, 2617, 2604, 2603, 2606, 3557, 2605, 2618, 86, 86, + 2621, 86, 2608, 2616, 86, 86, 86, 2619, 2610, 86, + 86, 2611, 86, 2614, 2620, 86, 86, 86, 2617, 2622, + 86, 2624, 86, 2623, 2618, 3557, 86, 2621, 3557, 2625, + 2616, 2626, 2627, 3557, 2619, 2628, 86, 2631, 2632, 2633, + + 2634, 2620, 2629, 86, 86, 2630, 2635, 3557, 2624, 3557, + 2623, 86, 86, 2640, 86, 86, 2625, 86, 2626, 86, + 86, 86, 2628, 86, 2631, 2632, 86, 2634, 86, 2629, + 2636, 2637, 2630, 2635, 2638, 2639, 86, 86, 86, 2641, + 2640, 86, 2642, 2643, 2644, 2646, 86, 2645, 86, 3557, + 3557, 2647, 2648, 2651, 86, 2649, 2655, 2636, 2637, 86, + 86, 2638, 2639, 2654, 86, 86, 2641, 2656, 2652, 2642, + 2650, 2644, 2646, 86, 2645, 86, 86, 86, 2647, 2648, + 86, 2653, 2649, 86, 2657, 86, 86, 2658, 86, 2659, + 2654, 2660, 86, 3557, 2656, 2652, 2661, 2650, 2662, 2663, + + 86, 2664, 86, 2666, 2667, 86, 2665, 2668, 2653, 86, + 2670, 2657, 2669, 3557, 2658, 2671, 2659, 86, 2660, 86, + 86, 2674, 86, 2661, 86, 2662, 2663, 86, 2664, 86, + 86, 2667, 2672, 2665, 86, 86, 2673, 86, 2676, 2669, + 2675, 86, 2671, 86, 86, 86, 2677, 86, 2674, 2678, + 2679, 2680, 2681, 2682, 3557, 2683, 2685, 3557, 2684, 2672, + 86, 86, 2687, 2673, 2686, 2676, 2688, 2675, 86, 86, + 86, 86, 2689, 2677, 2691, 2693, 2678, 86, 86, 2690, + 2682, 86, 2683, 2685, 86, 2684, 86, 86, 2694, 2687, + 86, 2686, 2692, 2688, 86, 2695, 86, 2696, 2697, 2689, + + 3557, 86, 2693, 2698, 86, 2699, 2690, 2700, 2702, 86, + 86, 2701, 2704, 86, 2703, 2705, 86, 2706, 2707, 2692, + 86, 86, 2695, 2708, 2696, 86, 3557, 86, 3557, 3557, + 2698, 86, 2699, 86, 2700, 86, 86, 86, 2701, 2704, + 86, 2703, 2705, 2709, 2706, 2707, 2710, 2711, 86, 2712, + 2708, 2713, 2716, 2714, 2717, 2715, 86, 2718, 86, 86, + 86, 2719, 86, 2721, 2722, 3557, 2723, 3557, 2720, 3557, + 2709, 86, 86, 2710, 2711, 2724, 2712, 86, 2713, 86, + 2714, 86, 2715, 86, 86, 2725, 86, 2727, 86, 2726, + 2721, 2722, 86, 2723, 86, 2720, 2729, 2731, 2728, 2730, + + 2732, 86, 2724, 86, 86, 86, 2734, 2733, 86, 2735, + 2738, 86, 2725, 86, 2727, 86, 2726, 2737, 2741, 2736, + 2744, 3557, 2740, 2729, 2731, 2728, 2730, 86, 2739, 86, + 86, 2742, 86, 86, 2733, 86, 86, 2738, 86, 2745, + 86, 2743, 2746, 86, 2737, 2741, 2736, 86, 86, 2740, + 2747, 86, 2748, 2749, 3557, 2739, 2753, 86, 2742, 86, + 2750, 2751, 3557, 86, 2755, 2752, 2745, 86, 2743, 86, + 86, 2754, 2757, 2758, 86, 2756, 3557, 2747, 2761, 2748, + 2749, 86, 86, 2753, 86, 86, 170, 2750, 2751, 2762, + 86, 2755, 2752, 86, 2759, 2763, 2760, 2764, 2754, 2757, + + 2758, 86, 2756, 86, 2765, 2761, 2766, 2767, 86, 2768, + 3557, 2769, 2772, 86, 2770, 3557, 2762, 2773, 2771, 86, + 2774, 2759, 2763, 2760, 2764, 86, 86, 86, 86, 2781, + 3557, 2765, 86, 86, 86, 86, 2768, 86, 2769, 2772, + 86, 2770, 2775, 2776, 2773, 2771, 2777, 2774, 2778, 86, + 2779, 86, 86, 2780, 86, 86, 2781, 2782, 2783, 2786, + 86, 2785, 2784, 2787, 86, 2789, 2790, 86, 86, 2775, + 2776, 86, 2792, 2777, 2788, 2778, 86, 2779, 2791, 86, + 2780, 3557, 2793, 86, 2782, 2783, 86, 86, 2785, 2784, + 2787, 86, 2789, 86, 2794, 2795, 86, 2796, 2797, 86, + + 2801, 2788, 2798, 86, 86, 2791, 2799, 2800, 86, 2793, + 86, 86, 2802, 2803, 2804, 86, 2805, 86, 86, 2806, + 2810, 2794, 2795, 86, 2796, 2797, 2807, 2801, 86, 2798, + 2808, 2809, 86, 2799, 2800, 2811, 2812, 2813, 2814, 2802, + 86, 86, 2821, 2805, 86, 86, 2806, 86, 86, 2815, + 2817, 86, 86, 2807, 2816, 2820, 2819, 86, 86, 2822, + 2818, 86, 2811, 2812, 2813, 2814, 86, 86, 2823, 86, + 2825, 86, 2828, 3557, 2827, 3557, 2815, 2817, 86, 86, + 86, 2816, 2820, 2819, 86, 2824, 2822, 2818, 86, 86, + 2826, 2829, 2830, 86, 2832, 86, 2831, 2825, 86, 2828, + + 2833, 2827, 86, 86, 2835, 2836, 2834, 86, 2837, 2839, + 2840, 3557, 2824, 86, 86, 86, 2838, 2826, 2829, 2830, + 86, 2832, 2841, 2831, 2842, 86, 86, 2833, 86, 2843, + 2845, 2835, 86, 2834, 86, 2837, 86, 2840, 2844, 2846, + 2847, 86, 2851, 2838, 2853, 2849, 2848, 86, 2850, 2841, + 2856, 2842, 86, 86, 86, 86, 2843, 2845, 86, 86, + 2854, 2852, 86, 2855, 2858, 2844, 86, 2847, 2860, 86, + 2857, 2853, 2849, 2848, 2859, 2850, 86, 86, 86, 2862, + 2864, 2861, 2867, 86, 2865, 2868, 86, 2854, 2852, 86, + 2855, 86, 86, 2863, 86, 2860, 86, 2857, 2866, 86, + + 86, 2859, 2869, 86, 2870, 2871, 2862, 86, 2861, 86, + 86, 2865, 2868, 2874, 2875, 2872, 86, 2873, 86, 2877, + 2863, 86, 2876, 86, 2880, 2866, 2878, 3557, 2879, 2869, + 2881, 2870, 2871, 86, 86, 86, 3557, 86, 2884, 2882, + 86, 2875, 2872, 2890, 2873, 2885, 86, 2886, 86, 2876, + 86, 2880, 86, 2878, 2883, 2879, 86, 2881, 86, 86, + 2887, 2888, 86, 2889, 86, 2884, 2882, 2891, 2893, 2892, + 86, 2894, 2885, 2895, 2886, 86, 86, 2896, 2899, 3557, + 2897, 2883, 86, 86, 2900, 2914, 2901, 2887, 2888, 86, + 2889, 86, 2898, 86, 86, 2893, 2892, 2902, 170, 86, + + 2895, 86, 2904, 2903, 2896, 2905, 86, 2897, 2906, 86, + 86, 2900, 86, 2901, 2907, 2908, 2909, 86, 2911, 2898, + 2913, 2910, 86, 2915, 2902, 86, 3557, 2912, 2921, 86, + 2903, 2916, 86, 86, 2917, 2906, 2922, 2919, 2920, 86, + 86, 86, 2908, 2918, 86, 2911, 86, 2913, 86, 86, + 2915, 2923, 86, 86, 2912, 86, 86, 2924, 2916, 2925, + 86, 2917, 2928, 2926, 2919, 2920, 2929, 2927, 86, 3557, + 2918, 2932, 86, 86, 2930, 2931, 3557, 86, 2923, 86, + 86, 2933, 2934, 2940, 2924, 86, 2925, 2935, 86, 2928, + 2926, 86, 2936, 2929, 2927, 86, 86, 86, 2932, 2937, + + 86, 2930, 2931, 2938, 2939, 86, 2941, 2945, 2933, 2934, + 2948, 3557, 2942, 86, 2935, 86, 2943, 86, 86, 2936, + 86, 2944, 2946, 86, 2947, 86, 2937, 86, 86, 86, + 2938, 2939, 86, 2941, 86, 2949, 2951, 2948, 2950, 2942, + 2956, 2953, 86, 2943, 2952, 2958, 2955, 86, 2944, 2946, + 86, 2947, 86, 86, 2954, 2957, 2959, 86, 2961, 2962, + 2963, 86, 2949, 86, 2967, 2950, 2960, 86, 2953, 86, + 2964, 2952, 86, 2955, 2965, 86, 2966, 86, 86, 86, + 2968, 2954, 2957, 2969, 2972, 3557, 86, 2963, 86, 2971, + 86, 2967, 2970, 2960, 86, 2974, 86, 2964, 2976, 2975, + + 2977, 2965, 86, 2966, 2978, 2973, 2979, 86, 86, 3557, + 2969, 86, 86, 2980, 2982, 86, 2971, 86, 2981, 2970, + 2984, 86, 2974, 2983, 2985, 86, 2975, 86, 2990, 86, + 86, 86, 2973, 2979, 2988, 86, 86, 2989, 2986, 86, + 2980, 86, 86, 2987, 86, 2981, 2991, 2984, 2992, 86, + 2983, 2985, 2993, 2994, 86, 2990, 2997, 2995, 2996, 2998, + 2999, 2988, 3000, 3002, 2989, 3001, 3003, 86, 86, 3004, + 86, 86, 86, 86, 3005, 86, 3008, 86, 86, 86, + 2994, 3011, 3007, 86, 2995, 2996, 2998, 2999, 86, 86, + 86, 86, 3001, 3003, 3006, 86, 86, 3009, 3012, 3010, + + 3013, 3005, 3015, 86, 3016, 3014, 86, 3017, 86, 3007, + 3019, 86, 3018, 86, 86, 3557, 3020, 3021, 86, 3022, + 86, 3006, 86, 3023, 86, 3012, 3010, 3025, 3024, 3015, + 3028, 3016, 86, 86, 3017, 3026, 3027, 86, 3035, 3018, + 86, 3557, 86, 3020, 3021, 86, 86, 86, 3029, 3030, + 3023, 86, 3031, 3034, 3025, 3024, 86, 3028, 86, 3032, + 86, 3047, 3026, 3027, 3033, 86, 86, 3557, 86, 3036, + 3037, 86, 3039, 3040, 86, 3029, 3030, 3048, 3038, 3031, + 3034, 86, 86, 3041, 3042, 86, 3032, 3044, 86, 3043, + 3046, 3033, 3045, 3557, 86, 3049, 3036, 3037, 86, 3039, + + 3040, 3050, 86, 86, 3048, 3038, 3051, 3557, 3052, 3053, + 3041, 3055, 3056, 86, 3064, 3054, 86, 3046, 86, 86, + 86, 86, 3049, 3058, 3060, 3065, 3061, 86, 3050, 3557, + 3057, 3066, 86, 3051, 86, 3052, 3053, 86, 3055, 3056, + 3059, 86, 3054, 86, 86, 86, 86, 3062, 86, 3063, + 3058, 3060, 86, 3061, 86, 86, 86, 3057, 3066, 3067, + 3068, 3069, 3070, 3071, 3073, 3557, 3074, 3059, 3557, 86, + 3072, 3079, 3557, 3080, 3062, 3557, 3063, 3075, 3076, 3081, + 86, 3077, 86, 3082, 86, 3078, 3067, 3068, 86, 3070, + 86, 86, 86, 3074, 86, 86, 86, 3072, 86, 86, + + 86, 86, 86, 3083, 3075, 3076, 3081, 3084, 3077, 3085, + 3082, 86, 3078, 3086, 3088, 3089, 3090, 3557, 3087, 3092, + 3094, 86, 3091, 86, 3093, 3095, 3097, 3096, 86, 86, + 3083, 3098, 3099, 86, 3084, 86, 3085, 86, 86, 86, + 3100, 3088, 3089, 3090, 86, 86, 86, 86, 3102, 3091, + 86, 3093, 3095, 3097, 3096, 86, 3103, 3104, 86, 3099, + 3101, 3105, 86, 3106, 86, 3107, 3557, 3100, 3111, 3108, + 86, 86, 3109, 3117, 86, 3102, 3110, 3557, 86, 3112, + 3557, 3118, 3119, 3103, 3104, 3114, 86, 3101, 3124, 3557, + 3106, 86, 3107, 86, 86, 3111, 3108, 3113, 86, 3109, + + 86, 86, 86, 3110, 3115, 3120, 3112, 3116, 86, 86, + 3121, 86, 3114, 3122, 3123, 3127, 3125, 86, 3128, 3130, + 86, 86, 3126, 86, 3113, 86, 3132, 86, 3131, 3133, + 86, 3115, 3120, 3129, 3116, 86, 86, 3121, 86, 3135, + 3122, 3123, 86, 3125, 86, 3128, 3130, 3136, 86, 3126, + 86, 3137, 3134, 3132, 86, 3131, 3139, 3140, 3138, 3141, + 3129, 86, 3143, 3142, 3144, 86, 86, 3145, 3557, 86, + 86, 86, 3148, 86, 3136, 86, 3557, 3174, 3137, 3134, + 86, 86, 86, 3139, 3140, 3138, 3141, 3146, 3147, 3143, + 3142, 86, 3149, 3150, 3145, 86, 3153, 3151, 3152, 3148, + + 3154, 86, 86, 3155, 86, 86, 3159, 86, 3156, 86, + 86, 3161, 3157, 3162, 3146, 3147, 3163, 86, 86, 3149, + 3150, 86, 3165, 3153, 3151, 3152, 86, 3154, 3160, 86, + 3155, 3158, 86, 86, 86, 3156, 86, 3166, 86, 3157, + 3162, 3164, 3167, 86, 3168, 3169, 3557, 86, 86, 86, + 3171, 3170, 3172, 86, 3176, 3160, 86, 3173, 3158, 86, + 3177, 3175, 86, 3178, 3166, 86, 86, 3180, 3164, 3167, + 3181, 3168, 3169, 86, 3179, 86, 86, 86, 3170, 3172, + 3186, 3176, 86, 3183, 3173, 3182, 86, 3177, 3175, 3184, + 3178, 3185, 86, 3187, 86, 3190, 86, 3188, 3189, 3193, + + 3195, 3179, 86, 3192, 3199, 86, 3194, 86, 3197, 86, + 3557, 86, 3182, 86, 3191, 86, 3184, 86, 3185, 86, + 86, 3196, 86, 86, 3188, 3189, 3193, 3198, 3200, 86, + 3192, 86, 86, 3194, 86, 3197, 3201, 3202, 3557, 3203, + 86, 3191, 3204, 3205, 3206, 3207, 3209, 3208, 3196, 3557, + 86, 3557, 3212, 3210, 3198, 3200, 3215, 86, 3218, 3211, + 86, 86, 86, 3201, 3202, 86, 3203, 3213, 3557, 3204, + 3205, 86, 86, 3557, 3208, 3214, 86, 3219, 86, 86, + 3210, 86, 3222, 86, 3220, 86, 3211, 3223, 86, 86, + 3216, 3217, 86, 86, 3213, 3221, 86, 86, 3224, 3225, + + 86, 3226, 3214, 3227, 3219, 3228, 86, 3229, 3557, 3222, + 86, 3220, 3233, 3230, 86, 3232, 3231, 3216, 3217, 86, + 3234, 3235, 3221, 3236, 3237, 3224, 3225, 3239, 3226, 86, + 86, 3240, 86, 3241, 86, 86, 3242, 86, 86, 86, + 3230, 3243, 3232, 3231, 3238, 86, 3246, 86, 86, 86, + 86, 3237, 3244, 86, 86, 3248, 3245, 86, 3240, 86, + 86, 86, 3247, 86, 3249, 3250, 86, 86, 3243, 3251, + 3254, 3238, 3252, 3246, 3255, 3256, 3258, 86, 3557, 3244, + 3253, 86, 3248, 3245, 3257, 86, 3260, 86, 86, 3247, + 3261, 86, 3250, 86, 86, 3263, 3251, 3254, 3259, 3252, + + 3262, 86, 86, 3264, 3265, 86, 86, 3253, 86, 3267, + 3266, 3257, 86, 3260, 3557, 3269, 3270, 3261, 3268, 3557, + 3557, 3272, 86, 86, 3271, 3259, 86, 3262, 3273, 3274, + 86, 3265, 3275, 86, 86, 3276, 86, 3266, 3277, 86, + 3278, 86, 3269, 86, 86, 3268, 86, 3279, 3272, 3283, + 86, 3271, 3280, 86, 3291, 3273, 3274, 86, 86, 3275, + 86, 86, 3276, 3281, 3282, 3277, 86, 3278, 3557, 3284, + 86, 86, 3285, 3286, 3279, 3287, 3283, 3294, 3557, 3280, + 86, 86, 86, 3288, 3289, 3290, 86, 3292, 3293, 3295, + 3281, 3282, 86, 3296, 3297, 86, 3284, 3299, 3557, 3285, + + 3286, 86, 3287, 86, 3294, 86, 86, 3298, 3557, 86, + 3288, 3289, 3290, 3300, 3292, 3293, 3295, 3301, 3302, 3303, + 86, 86, 3304, 3305, 86, 86, 3306, 3307, 3557, 3308, + 86, 3309, 3310, 3557, 3298, 86, 3311, 3314, 3557, 3312, + 3300, 3315, 3557, 3317, 3301, 86, 86, 3313, 3557, 3316, + 86, 86, 3557, 3320, 3321, 86, 86, 3557, 3557, 86, + 86, 86, 86, 3311, 86, 86, 3312, 3324, 3315, 86, + 3317, 3318, 3319, 3325, 3313, 86, 3316, 3322, 86, 86, + 3320, 86, 3328, 3323, 86, 86, 3329, 86, 3326, 3327, + 3330, 86, 3332, 3331, 3324, 3333, 86, 3334, 3318, 3319, + + 3325, 86, 3335, 3336, 3322, 3341, 86, 3339, 86, 3328, + 3323, 86, 3340, 3329, 86, 3326, 3327, 86, 86, 3332, + 3331, 3344, 86, 3337, 86, 86, 3338, 86, 3343, 3335, + 3336, 3342, 3345, 86, 3346, 3347, 3348, 86, 3349, 86, + 86, 86, 3351, 86, 3350, 3352, 3354, 3355, 3344, 3356, + 3337, 3358, 3353, 3338, 86, 3343, 86, 3357, 3342, 3345, + 3359, 3346, 3347, 86, 86, 86, 3360, 3361, 86, 86, + 86, 3350, 86, 3354, 86, 86, 86, 3362, 86, 3353, + 3363, 3364, 3365, 3367, 3357, 3366, 86, 86, 3368, 3369, + 3371, 3372, 3373, 86, 86, 3370, 3375, 3380, 86, 3379, + + 3557, 86, 3376, 3374, 86, 86, 3377, 86, 86, 86, + 3367, 86, 3366, 86, 86, 86, 86, 3371, 3372, 86, + 86, 3378, 3370, 86, 86, 86, 3379, 3381, 3382, 3376, + 3374, 3383, 3384, 3377, 3385, 86, 86, 3386, 3387, 86, + 86, 3389, 3388, 3392, 3390, 3391, 3557, 86, 3378, 3394, + 3557, 86, 3397, 3393, 3381, 86, 86, 86, 3383, 3384, + 86, 3385, 86, 86, 3386, 3387, 86, 86, 3395, 3388, + 3392, 3390, 3391, 86, 3396, 86, 3394, 3400, 3398, 3397, + 3393, 3399, 86, 3401, 3402, 3403, 3404, 3405, 3407, 86, + 86, 3557, 86, 3406, 3408, 3395, 3409, 86, 86, 86, + + 3412, 3396, 3557, 86, 3400, 3398, 86, 86, 3399, 3410, + 3401, 3402, 86, 86, 86, 3407, 86, 86, 3413, 3414, + 3406, 3408, 86, 3409, 3411, 3415, 3418, 3412, 86, 3416, + 3419, 3420, 3425, 3417, 86, 3557, 3410, 86, 3422, 86, + 86, 3421, 86, 86, 86, 3413, 3414, 86, 3423, 3424, + 86, 3411, 3415, 3418, 86, 86, 3416, 3419, 3420, 3425, + 3417, 3426, 3427, 3428, 86, 3422, 86, 86, 3421, 3430, + 3429, 3432, 3431, 3433, 3434, 3423, 3424, 86, 86, 3435, + 3446, 3436, 3437, 3438, 86, 86, 3439, 3441, 3426, 3427, + 86, 86, 86, 3442, 86, 3440, 3430, 3429, 3432, 3431, + + 86, 3434, 86, 3443, 3448, 3445, 86, 86, 3436, 86, + 86, 86, 86, 3439, 3441, 86, 3444, 86, 86, 86, + 3442, 3447, 3440, 3449, 3450, 86, 3451, 3452, 3453, 3454, + 3443, 3448, 3445, 86, 86, 3456, 3455, 3457, 3458, 3459, + 3461, 86, 3460, 3444, 86, 86, 3463, 86, 3447, 86, + 3449, 86, 3462, 3451, 86, 86, 3454, 3464, 3465, 86, + 86, 3466, 86, 3455, 3457, 3458, 86, 3461, 86, 3460, + 3468, 86, 3467, 3469, 3470, 86, 3471, 3472, 86, 3462, + 86, 3473, 86, 3474, 86, 3465, 3475, 3476, 3466, 86, + 3477, 3478, 86, 86, 86, 3483, 3489, 3468, 86, 3467, + + 86, 86, 3479, 3471, 3472, 86, 86, 3480, 3473, 86, + 3474, 3481, 3485, 3475, 3476, 86, 86, 3477, 3478, 3482, + 3484, 86, 86, 3486, 3487, 3496, 3488, 86, 86, 3479, + 3490, 86, 3491, 86, 3480, 3557, 3492, 3494, 3481, 3485, + 3493, 86, 3495, 3497, 3498, 86, 3482, 3484, 86, 3499, + 3486, 86, 86, 3488, 86, 3501, 86, 3490, 86, 3491, + 3500, 3502, 86, 3492, 3494, 86, 3504, 3493, 86, 86, + 3497, 86, 86, 3503, 86, 86, 3499, 3505, 3506, 3557, + 3507, 86, 3501, 3508, 3557, 86, 3512, 3500, 3502, 3511, + 3509, 3513, 86, 3510, 86, 3514, 3557, 3515, 86, 86, + + 3503, 3517, 3557, 3516, 3505, 3506, 86, 3507, 86, 86, + 86, 86, 3519, 3512, 3521, 86, 3511, 3509, 3513, 3522, + 3510, 3520, 3514, 86, 3515, 86, 3518, 86, 3517, 86, + 3516, 3524, 3523, 3526, 3525, 3527, 3529, 3557, 86, 3519, + 86, 3521, 86, 3528, 3530, 86, 3522, 3531, 3520, 3535, + 3533, 86, 3557, 3518, 86, 3542, 3557, 86, 3524, 3523, + 86, 3525, 3527, 86, 86, 3532, 3537, 86, 86, 3538, + 3528, 3530, 86, 86, 3531, 3534, 86, 3533, 3536, 3539, + 3546, 3540, 86, 86, 3541, 3548, 86, 86, 86, 86, + 3543, 86, 3532, 3537, 3545, 3544, 3538, 3549, 86, 3547, + + 3555, 3551, 3534, 86, 3556, 3536, 3539, 86, 3540, 3550, + 86, 3541, 86, 3552, 3557, 3557, 3557, 3543, 3557, 86, + 86, 3545, 3544, 86, 86, 3553, 3547, 86, 3551, 86, + 3554, 86, 3557, 86, 3557, 86, 3550, 3557, 86, 3557, + 3552, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3553, 3557, 3557, 3557, 3557, 3554, 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, 3557, + 89, 89, 89, 89, 160, 160, 3557, 3557, 3557, 160, + 160, 162, 162, 3557, 3557, 162, 3557, 162, 164, 3557, + 3557, 3557, 3557, 3557, 164, 167, 167, 3557, 3557, 3557, + 167, 167, 169, 3557, 3557, 3557, 3557, 3557, 169, 171, + 171, 3557, 171, 171, 171, 171, 174, 3557, 3557, 3557, + 3557, 3557, 174, 177, 177, 3557, 3557, 3557, 177, 177, + 90, 90, 3557, 90, 90, 90, 90, 17, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557 } ; -static const flex_int16_t yy_chk[10144] = +static const flex_int16_t yy_chk[10245] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2719,13 +2739,13 @@ static const flex_int16_t yy_chk[10144] = 7, 7, 7, 33, 7, 8, 8, 8, 8, 32, 8, 9, 9, 9, 10, 10, 10, 19, 51, 51, - 1122, 19, 3531, 3, 32, 33, 4, 67, 67, 5, - 33, 6, 2871, 13, 13, 13, 13, 7, 13, 14, + 1126, 19, 3565, 3, 32, 33, 4, 67, 67, 5, + 33, 6, 2894, 13, 13, 13, 13, 7, 13, 14, 14, 14, 14, 8, 14, 15, 15, 15, 9, 25, - 1122, 10, 11, 11, 11, 11, 11, 11, 12, 12, + 1126, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 16, 16, 16, 34, 28, 84, 84, 13, 11, 45, 293, 25, 25, 14, 12, 34, - 39, 23, 15, 23, 23, 45, 23, 1134, 28, 177, + 39, 23, 15, 23, 23, 45, 23, 1138, 28, 177, 11, 28, 23, 39, 34, 28, 12, 176, 87, 11, 45, 16, 87, 293, 37, 12, 30, 39, 29, 56, 37, 174, 56, 72, 30, 28, 26, 169, 100, 23, @@ -2749,12 +2769,12 @@ static const flex_int16_t yy_chk[10144] = 38, 43, 73, 38, 73, 73, 95, 73, 111, 97, 38, 43, 38, 38, 104, 43, 43, 38, 95, 104, 79, 38, 79, 79, 58, 79, 111, 38, 219, 86, - 38, 86, 86, 97, 86, 222, 97, 38, 40, 968, + 38, 86, 86, 97, 86, 222, 97, 38, 40, 971, 86, 104, 40, 89, 96, 89, 89, 112, 89, 98, 57, 96, 40, 40, 89, 40, 112, 103, 103, 106, 105, 52, 98, 47, 40, 40, 103, 222, 105, 40, - 968, 96, 18, 98, 112, 137, 98, 106, 17, 40, + 971, 96, 18, 98, 112, 137, 98, 106, 17, 40, 40, 89, 40, 41, 103, 103, 41, 105, 102, 98, 107, 106, 109, 41, 102, 108, 102, 41, 41, 109, 224, 137, 137, 107, 106, 41, 113, 0, 108, 102, @@ -2847,983 +2867,994 @@ static const flex_int16_t yy_chk[10144] = 342, 340, 351, 343, 345, 345, 0, 0, 346, 347, 344, 353, 352, 357, 345, 354, 349, 342, 347, 348, 342, 349, 350, 350, 352, 357, 355, 362, 351, 351, - 354, 345, 345, 353, 355, 359, 356, 359, 353, 352, - 357, 361, 354, 356, 363, 364, 359, 0, 361, 362, - 371, 0, 365, 355, 362, 0, 367, 366, 365, 366, - - 369, 359, 359, 356, 359, 372, 0, 364, 361, 367, - 370, 0, 364, 359, 365, 368, 363, 377, 369, 365, - 0, 366, 371, 367, 366, 365, 366, 369, 368, 373, - 380, 368, 372, 368, 0, 377, 370, 370, 376, 368, - 378, 377, 368, 380, 377, 376, 0, 379, 382, 0, - 386, 373, 378, 383, 0, 368, 373, 380, 368, 379, - 368, 374, 377, 374, 382, 376, 383, 378, 386, 374, - 385, 387, 382, 374, 379, 382, 387, 386, 374, 0, - 383, 374, 385, 389, 0, 388, 390, 374, 374, 389, - 374, 382, 388, 393, 390, 391, 374, 385, 392, 0, - - 374, 393, 394, 387, 0, 374, 388, 391, 374, 375, - 389, 375, 388, 390, 395, 395, 392, 397, 403, 388, - 393, 396, 391, 405, 375, 392, 400, 375, 396, 375, - 397, 375, 0, 400, 394, 375, 375, 402, 375, 401, - 403, 395, 410, 398, 397, 403, 401, 0, 396, 402, - 404, 375, 398, 400, 375, 405, 375, 0, 375, 384, - 384, 407, 404, 399, 402, 406, 401, 408, 407, 384, - 384, 384, 384, 384, 410, 398, 384, 404, 412, 398, - 409, 399, 408, 0, 384, 399, 384, 384, 407, 412, - 399, 406, 406, 409, 408, 413, 384, 384, 384, 384, - - 384, 416, 411, 384, 411, 412, 415, 409, 399, 414, - 414, 0, 416, 415, 417, 419, 421, 413, 418, 420, - 420, 0, 413, 0, 423, 417, 0, 424, 416, 411, - 0, 418, 0, 415, 422, 424, 425, 420, 414, 421, - 419, 417, 419, 421, 420, 418, 420, 420, 425, 422, - 423, 423, 428, 427, 424, 426, 431, 422, 429, 429, - 432, 422, 427, 425, 420, 428, 426, 433, 434, 437, - 429, 436, 429, 0, 435, 437, 422, 429, 432, 428, - 427, 0, 426, 438, 439, 429, 429, 432, 431, 433, - 440, 434, 435, 441, 433, 434, 437, 429, 442, 429, - - 430, 435, 443, 436, 438, 442, 445, 439, 430, 430, - 438, 439, 430, 430, 440, 441, 430, 440, 444, 446, - 441, 448, 430, 447, 449, 442, 450, 430, 443, 443, - 451, 485, 444, 445, 560, 430, 430, 447, 452, 430, - 430, 446, 451, 430, 452, 444, 446, 448, 448, 450, - 447, 453, 454, 450, 455, 456, 449, 451, 458, 457, - 459, 560, 455, 485, 460, 452, 457, 458, 461, 462, - 456, 0, 465, 453, 454, 459, 464, 0, 453, 454, - 455, 455, 456, 463, 487, 458, 457, 459, 460, 455, - 461, 460, 462, 467, 465, 461, 462, 470, 463, 465, - - 466, 472, 464, 464, 468, 0, 466, 472, 474, 468, - 463, 473, 476, 484, 474, 475, 487, 479, 476, 467, - 467, 477, 478, 470, 470, 482, 484, 466, 472, 478, - 473, 468, 479, 475, 482, 474, 488, 486, 473, 476, - 484, 491, 475, 477, 479, 481, 483, 481, 477, 478, - 494, 0, 482, 483, 481, 486, 489, 490, 488, 493, - 490, 496, 492, 488, 486, 491, 498, 497, 491, 489, - 495, 493, 481, 483, 481, 492, 490, 495, 499, 498, - 502, 0, 494, 489, 490, 496, 493, 490, 496, 492, - 497, 500, 501, 498, 503, 506, 500, 495, 501, 497, - - 499, 504, 505, 502, 507, 499, 506, 502, 511, 508, - 641, 641, 507, 504, 512, 511, 503, 497, 500, 501, - 512, 503, 506, 508, 505, 0, 513, 516, 504, 505, - 0, 507, 515, 520, 514, 511, 508, 509, 513, 641, - 515, 512, 509, 518, 509, 520, 0, 517, 0, 516, - 509, 521, 509, 513, 516, 509, 509, 514, 517, 515, - 520, 514, 509, 509, 509, 524, 518, 523, 519, 509, - 518, 509, 519, 521, 517, 524, 525, 509, 521, 509, - 526, 522, 509, 509, 522, 523, 527, 0, 525, 509, - 519, 526, 522, 530, 523, 519, 528, 524, 529, 519, - - 528, 532, 524, 525, 531, 529, 531, 526, 522, 533, - 527, 522, 535, 527, 534, 0, 536, 538, 537, 530, - 530, 533, 538, 528, 535, 529, 537, 532, 532, 534, - 539, 531, 540, 543, 548, 542, 533, 545, 541, 535, - 546, 534, 536, 536, 538, 537, 541, 542, 547, 550, - 540, 555, 539, 549, 543, 545, 0, 539, 561, 540, - 543, 550, 542, 546, 545, 541, 548, 546, 549, 551, - 552, 547, 553, 554, 555, 547, 550, 551, 555, 556, - 549, 565, 554, 552, 553, 557, 558, 562, 559, 558, - 561, 563, 567, 556, 564, 568, 551, 552, 566, 553, - - 554, 0, 562, 569, 567, 565, 556, 559, 565, 564, - 557, 566, 557, 558, 562, 559, 574, 568, 571, 567, - 575, 564, 568, 563, 570, 566, 573, 569, 572, 571, - 569, 570, 576, 572, 570, 577, 578, 579, 0, 580, - 573, 582, 570, 574, 580, 571, 581, 575, 583, 0, - 0, 570, 581, 573, 584, 586, 582, 585, 570, 587, - 572, 570, 577, 578, 576, 585, 588, 591, 582, 579, - 590, 580, 583, 581, 586, 583, 584, 592, 590, 594, - 593, 584, 586, 587, 585, 589, 587, 593, 588, 589, - 591, 595, 596, 588, 591, 597, 0, 590, 598, 599, - - 595, 601, 594, 605, 600, 602, 594, 593, 597, 592, - 600, 599, 589, 602, 596, 606, 603, 607, 595, 596, - 0, 618, 597, 601, 598, 598, 599, 603, 601, 604, - 607, 600, 602, 610, 0, 605, 604, 606, 609, 613, - 608, 611, 606, 603, 607, 608, 612, 609, 608, 608, - 611, 616, 614, 618, 638, 0, 604, 612, 615, 610, - 610, 613, 619, 616, 608, 609, 613, 608, 611, 620, - 622, 615, 608, 612, 614, 608, 608, 621, 616, 614, - 619, 623, 626, 625, 624, 615, 638, 627, 628, 619, - 629, 626, 622, 620, 625, 631, 620, 622, 632, 621, - - 621, 0, 628, 649, 621, 623, 624, 627, 623, 626, - 625, 624, 629, 630, 627, 628, 632, 629, 634, 633, - 630, 635, 631, 636, 634, 632, 621, 633, 637, 640, - 639, 0, 635, 644, 642, 649, 645, 643, 651, 646, - 630, 636, 644, 637, 652, 634, 633, 647, 635, 645, - 636, 639, 646, 640, 648, 637, 640, 639, 642, 643, - 644, 642, 648, 645, 643, 650, 646, 654, 652, 647, - 651, 652, 655, 653, 647, 653, 656, 655, 0, 657, - 659, 648, 718, 658, 661, 718, 662, 650, 660, 654, - 656, 664, 650, 657, 654, 667, 660, 658, 658, 665, - - 653, 0, 661, 656, 655, 658, 657, 663, 662, 718, - 658, 661, 659, 662, 663, 660, 666, 664, 664, 665, - 668, 673, 669, 670, 658, 658, 665, 667, 670, 0, - 671, 666, 669, 674, 663, 668, 672, 675, 672, 681, - 666, 674, 676, 666, 669, 677, 673, 668, 673, 669, - 683, 676, 678, 682, 677, 670, 671, 671, 666, 669, - 674, 678, 675, 672, 675, 679, 684, 680, 683, 676, - 685, 681, 677, 679, 680, 686, 682, 683, 684, 678, - 682, 687, 685, 690, 686, 693, 688, 689, 0, 687, - 692, 691, 679, 684, 680, 688, 694, 685, 691, 689, - - 693, 695, 686, 692, 694, 0, 697, 695, 687, 699, - 688, 696, 693, 688, 689, 690, 698, 692, 691, 696, - 699, 700, 688, 694, 702, 698, 701, 701, 695, 697, - 700, 704, 702, 697, 703, 701, 699, 705, 696, 706, - 0, 708, 707, 698, 704, 711, 0, 710, 700, 708, - 727, 702, 0, 701, 701, 707, 703, 709, 704, 712, - 710, 703, 706, 705, 705, 715, 706, 711, 708, 707, - 712, 713, 711, 709, 710, 714, 717, 716, 719, 713, - 724, 721, 727, 723, 709, 715, 712, 720, 725, 714, - 721, 722, 715, 724, 728, 729, 717, 726, 713, 716, - - 719, 723, 714, 717, 716, 719, 725, 724, 721, 720, - 723, 722, 726, 730, 720, 725, 728, 731, 722, 729, - 732, 728, 729, 733, 726, 735, 734, 736, 0, 737, - 731, 735, 738, 740, 742, 733, 730, 737, 732, 734, - 730, 739, 742, 743, 731, 749, 745, 732, 0, 0, - 733, 740, 735, 734, 736, 737, 737, 746, 744, 738, - 740, 742, 748, 739, 737, 744, 0, 750, 739, 745, - 751, 748, 746, 745, 747, 743, 747, 749, 752, 753, - 757, 753, 763, 760, 746, 744, 750, 752, 754, 748, - 751, 764, 757, 760, 750, 754, 0, 751, 769, 0, - - 763, 747, 767, 766, 0, 752, 753, 757, 773, 763, - 760, 768, 764, 770, 0, 754, 755, 773, 764, 755, - 767, 769, 768, 755, 766, 769, 755, 0, 771, 767, - 766, 772, 774, 755, 755, 773, 755, 775, 768, 770, - 770, 755, 776, 755, 775, 774, 755, 772, 0, 0, - 755, 0, 0, 755, 771, 771, 781, 779, 772, 774, - 755, 755, 778, 755, 775, 781, 0, 780, 782, 778, - 789, 0, 789, 780, 776, 777, 777, 783, 777, 779, - 783, 777, 786, 781, 779, 785, 777, 0, 787, 778, - 786, 782, 777, 777, 780, 782, 792, 789, 784, 788, - - 790, 777, 777, 777, 783, 777, 793, 785, 777, 786, - 787, 788, 785, 777, 784, 787, 792, 791, 794, 777, - 777, 784, 791, 792, 790, 784, 788, 790, 795, 797, - 794, 796, 793, 793, 800, 798, 0, 0, 799, 801, - 805, 784, 0, 0, 803, 794, 804, 805, 802, 791, - 795, 797, 803, 807, 0, 795, 797, 796, 796, 798, - 799, 800, 798, 802, 801, 799, 801, 805, 806, 804, - 808, 803, 807, 804, 809, 802, 806, 810, 0, 811, - 807, 815, 812, 813, 814, 816, 809, 817, 818, 814, - 810, 812, 821, 818, 820, 806, 808, 808, 813, 823, - - 822, 809, 825, 824, 810, 811, 811, 816, 822, 812, - 813, 814, 816, 815, 817, 826, 820, 827, 828, 829, - 818, 820, 830, 832, 821, 824, 833, 822, 831, 834, - 824, 823, 832, 0, 825, 0, 0, 828, 827, 826, - 835, 839, 826, 840, 827, 828, 829, 831, 833, 830, - 832, 837, 834, 833, 836, 831, 834, 838, 841, 842, - 835, 840, 837, 836, 843, 838, 844, 835, 839, 0, - 840, 846, 847, 848, 844, 849, 848, 841, 837, 851, - 860, 836, 852, 850, 838, 841, 842, 0, 860, 846, - 847, 858, 853, 844, 855, 0, 843, 849, 846, 847, - - 848, 850, 849, 851, 852, 853, 851, 860, 856, 852, - 850, 854, 855, 854, 859, 857, 861, 858, 858, 853, - 857, 855, 856, 863, 862, 864, 859, 862, 866, 867, - 868, 0, 863, 864, 861, 856, 868, 869, 854, 870, - 0, 859, 876, 861, 880, 870, 876, 857, 877, 864, - 863, 862, 864, 866, 871, 866, 867, 868, 872, 869, - 864, 871, 873, 874, 869, 872, 870, 873, 875, 876, - 874, 877, 879, 878, 881, 877, 880, 883, 882, 884, - 879, 871, 878, 885, 887, 872, 875, 884, 883, 873, - 874, 886, 881, 882, 888, 875, 885, 889, 890, 879, - - 878, 881, 892, 887, 883, 882, 884, 888, 891, 892, - 885, 887, 886, 893, 895, 894, 891, 900, 886, 889, - 896, 888, 894, 897, 889, 890, 898, 896, 897, 892, - 899, 893, 901, 895, 898, 891, 903, 899, 902, 904, - 893, 895, 894, 0, 906, 907, 908, 896, 905, 900, - 897, 902, 904, 898, 909, 905, 911, 899, 914, 910, - 915, 913, 909, 0, 901, 902, 904, 910, 903, 908, - 918, 916, 919, 908, 910, 905, 906, 907, 911, 912, - 917, 909, 921, 911, 918, 912, 910, 913, 913, 917, - 914, 923, 915, 920, 910, 916, 922, 918, 916, 926, - - 920, 924, 0, 925, 919, 922, 912, 917, 925, 921, - 927, 926, 928, 923, 924, 0, 924, 929, 923, 935, - 920, 932, 929, 922, 930, 924, 926, 931, 924, 932, - 941, 930, 935, 927, 944, 925, 937, 927, 928, 928, - 938, 924, 934, 924, 929, 934, 935, 938, 932, 931, - 937, 930, 939, 965, 931, 0, 941, 941, 939, 0, - 942, 944, 943, 937, 945, 947, 945, 938, 951, 934, - 0, 0, 946, 951, 943, 949, 0, 947, 952, 939, - 940, 948, 940, 942, 967, 965, 940, 942, 940, 943, - 950, 945, 947, 940, 948, 946, 952, 949, 940, 946, - - 951, 953, 949, 950, 940, 952, 954, 940, 948, 940, - 955, 967, 957, 940, 953, 940, 956, 950, 954, 958, - 940, 959, 955, 961, 960, 940, 956, 957, 953, 954, - 960, 962, 964, 954, 959, 963, 961, 955, 956, 957, - 966, 958, 969, 956, 975, 954, 958, 0, 959, 962, - 961, 960, 970, 956, 964, 971, 963, 970, 962, 964, - 972, 0, 963, 971, 976, 974, 975, 979, 0, 972, - 977, 975, 966, 978, 969, 0, 0, 976, 983, 970, - 974, 0, 971, 980, 986, 977, 983, 972, 973, 979, - 982, 976, 974, 973, 979, 973, 984, 977, 981, 978, - - 978, 973, 980, 982, 984, 983, 973, 973, 985, 981, - 980, 988, 993, 973, 973, 973, 986, 982, 989, 985, - 973, 987, 973, 984, 0, 981, 988, 989, 973, 994, - 990, 997, 0, 973, 973, 985, 0, 991, 988, 993, - 973, 990, 992, 987, 998, 989, 991, 995, 987, 1002, - 999, 992, 994, 1000, 995, 0, 994, 990, 999, 1001, - 1003, 1006, 1004, 997, 991, 1007, 1009, 1008, 998, 992, - 1004, 998, 1010, 1001, 995, 1000, 1011, 999, 1008, 1006, - 1000, 1002, 1003, 1007, 1011, 1012, 1001, 1003, 1006, 1004, - 1010, 1014, 1007, 1013, 1008, 1015, 1016, 1017, 1009, 1010, - - 1013, 1018, 1015, 1011, 1014, 1019, 1020, 1012, 1021, 0, - 1023, 1016, 1012, 0, 1025, 1017, 1020, 1027, 1014, 1018, - 1013, 1023, 1015, 1016, 1017, 0, 1019, 1025, 1018, 1026, - 1028, 1031, 1019, 1020, 1029, 1037, 1026, 1023, 1028, 1027, - 1021, 1025, 1030, 1031, 1027, 1032, 1033, 1029, 1036, 1039, - 1038, 1030, 1040, 1037, 0, 1045, 1026, 1028, 1031, 1042, - 1041, 1029, 1037, 0, 0, 1043, 1045, 1032, 1033, 1030, - 1036, 1042, 1032, 1033, 1049, 1036, 1038, 1038, 1041, 1043, - 1046, 1039, 1045, 1050, 1040, 1046, 1042, 1041, 1048, 1052, - 1051, 1048, 1043, 1053, 1054, 1055, 1050, 1051, 1049, 1056, - - 1052, 1049, 1053, 1058, 0, 1060, 1057, 1055, 1054, 0, - 1050, 1059, 1046, 1057, 1048, 1048, 1052, 1051, 1048, 1063, - 1053, 1054, 1055, 1059, 1061, 1065, 1066, 1060, 1064, 1067, - 1071, 1056, 1060, 1057, 1064, 1058, 1068, 1061, 1059, 1069, - 1067, 1073, 1070, 1063, 1075, 1071, 1063, 1065, 1066, 1074, - 1076, 1061, 1065, 1066, 1068, 1064, 1067, 1071, 1077, 1078, - 1074, 1069, 1073, 1068, 1070, 1075, 1069, 1080, 1073, 1070, - 1079, 1075, 1081, 1083, 1082, 0, 1074, 1078, 1085, 1079, - 1084, 1083, 1076, 1082, 1090, 1077, 1078, 1084, 1087, 1086, - 1088, 1080, 1089, 1092, 1080, 1094, 1091, 1079, 1081, 1081, - - 1083, 1082, 1085, 1086, 1093, 1085, 1090, 1084, 1096, 1101, - 1097, 1090, 1099, 0, 1098, 1102, 1086, 0, 1091, 1097, - 1087, 1098, 1088, 1091, 1089, 1092, 1093, 1094, 1100, 1103, - 1096, 1093, 1105, 1102, 1104, 1096, 1101, 1097, 1106, 1107, - 1105, 1098, 1102, 1104, 1099, 1109, 1112, 1103, 1108, 1110, - 1100, 1113, 1114, 1111, 1112, 1100, 1103, 0, 1110, 1105, - 1116, 1104, 1106, 1107, 1108, 1106, 1107, 1109, 1111, 1115, - 1117, 1118, 1109, 1112, 1120, 1108, 1110, 1119, 1129, 1118, - 1111, 1115, 1116, 1113, 1114, 1121, 1123, 1116, 1124, 1120, - 1119, 1125, 1131, 0, 1121, 1123, 1115, 1117, 1118, 1125, - - 1126, 1120, 1126, 1128, 1119, 1129, 1124, 1130, 1135, 1132, - 1133, 1128, 1121, 1123, 1131, 1124, 1136, 1133, 1125, 1131, - 1138, 1135, 1139, 1137, 1140, 1141, 1130, 1126, 1136, 1142, - 1128, 1132, 1141, 1143, 1130, 1135, 1132, 1133, 1137, 1146, - 1139, 1145, 1138, 1136, 1144, 1147, 1148, 1138, 1150, 1139, - 1137, 1140, 1141, 0, 1157, 1144, 1149, 0, 1153, 1148, - 0, 1142, 1151, 1145, 1146, 1143, 1146, 1147, 1145, 1149, - 1150, 1144, 1147, 1148, 1151, 1150, 1152, 1158, 1153, 1154, - 1155, 1157, 1160, 1149, 1152, 1153, 1159, 1161, 1155, 1151, - 1158, 1154, 1162, 1165, 1160, 1159, 0, 0, 1166, 1162, - - 1167, 1163, 1168, 1152, 1158, 1170, 1154, 1155, 1161, 1160, - 1163, 1169, 1163, 1159, 1161, 1163, 1165, 1171, 1170, 1162, - 1165, 1173, 1167, 1163, 1166, 1166, 1172, 1167, 1163, 1168, - 1173, 1169, 1170, 1174, 1172, 1175, 1178, 1163, 1169, 1163, - 1177, 1171, 1163, 1179, 1171, 1180, 1176, 0, 1173, 1183, - 0, 1174, 1188, 1172, 1176, 1177, 1179, 1175, 1178, 1184, - 1174, 1180, 1175, 1178, 1186, 1185, 1181, 1177, 1187, 1202, - 1179, 1186, 1180, 1176, 1181, 1188, 1183, 1190, 1189, 1188, - 1192, 1184, 1191, 0, 0, 1196, 1184, 1185, 1192, 1190, - 1187, 1186, 1185, 1181, 1191, 1187, 1189, 1193, 1194, 1195, - - 1196, 1202, 1198, 1197, 1190, 1189, 1193, 1192, 1198, 1191, - 1194, 1197, 1196, 1199, 1200, 1201, 1203, 0, 1205, 1195, - 1206, 1193, 1199, 1203, 1193, 1194, 1195, 1201, 1286, 1198, - 1197, 1204, 1206, 1193, 1208, 1200, 1205, 1210, 1204, 1210, - 1199, 1200, 1201, 1203, 1207, 1205, 1209, 1206, 1211, 1208, - 1212, 1218, 1207, 1215, 1209, 1286, 1213, 1216, 1204, 1217, - 1211, 1208, 1222, 1213, 1210, 1220, 1221, 1219, 1231, 1216, - 1218, 1207, 1217, 1209, 1219, 1211, 1220, 1222, 1218, 1224, - 0, 1227, 1212, 1213, 1216, 1215, 1217, 1224, 1221, 1222, - 1223, 1225, 1220, 1221, 1219, 1223, 1226, 0, 1229, 1230, - - 1231, 0, 0, 1232, 1225, 1235, 1224, 1227, 1227, 0, - 1226, 1233, 1229, 1236, 1239, 0, 1234, 1230, 1225, 0, - 1239, 1238, 1223, 1226, 1228, 1229, 1230, 1237, 1228, 1232, - 1232, 1228, 1228, 1233, 1234, 1236, 1228, 1235, 1233, 1240, - 1236, 1239, 1228, 1234, 1243, 1242, 1228, 1238, 1238, 1237, - 1228, 1228, 1242, 1243, 1237, 1228, 1244, 0, 1228, 1228, - 1241, 1250, 1241, 1228, 1245, 1240, 1240, 1246, 1247, 1228, - 1248, 1243, 1242, 1228, 1246, 1251, 1249, 1252, 1253, 1257, - 1259, 1259, 1245, 1248, 1241, 1249, 1254, 1241, 1244, 1241, - 1247, 1245, 1257, 1250, 1246, 1247, 0, 1248, 0, 1252, - - 1254, 1253, 1256, 1249, 1252, 1253, 1257, 1251, 1258, 1259, - 1260, 0, 1265, 1254, 1255, 1262, 1263, 1266, 1264, 1255, - 0, 1255, 1266, 1255, 1256, 1255, 1260, 1264, 1263, 1256, - 1265, 1268, 1255, 1267, 1258, 1258, 1268, 1260, 1262, 1265, - 1269, 1255, 1262, 1263, 1270, 1264, 1255, 1271, 1255, 1266, - 1255, 1267, 1255, 1272, 1275, 1273, 1274, 1270, 1268, 0, - 1267, 1272, 1269, 1273, 1276, 1271, 1277, 1269, 1278, 1274, - 1279, 1270, 1288, 0, 1271, 1280, 1281, 1284, 1282, 1284, - 1272, 1278, 1273, 1274, 1285, 1277, 1275, 1283, 1280, 1287, - 1276, 1276, 1279, 1277, 1281, 1278, 1283, 1279, 1282, 1288, - - 1289, 1287, 1280, 1281, 1284, 1282, 1285, 1291, 1292, 1293, - 1294, 1285, 1295, 1296, 1283, 1297, 1287, 1293, 1298, 1299, - 1296, 1303, 0, 1300, 1308, 1289, 1301, 1289, 1294, 1300, - 1292, 1291, 1301, 1306, 1291, 1292, 1293, 1294, 1311, 1295, - 1296, 1299, 1297, 1302, 1298, 1298, 1299, 1304, 1303, 1302, - 1300, 1305, 1307, 1301, 1304, 1309, 1308, 1306, 1310, 1307, - 1306, 1305, 1312, 1311, 1314, 1311, 1321, 0, 1315, 0, - 1302, 1312, 1316, 1317, 1304, 1318, 1310, 1309, 1305, 1307, - 1315, 1323, 1309, 1320, 1319, 1310, 1317, 1322, 1314, 1312, - 1321, 1314, 1325, 1321, 1316, 1315, 1324, 1318, 1330, 1316, - - 1317, 1325, 1318, 1319, 1326, 1320, 1327, 1323, 1323, 1322, - 1320, 1319, 1331, 1328, 1322, 1332, 1333, 1334, 1324, 1325, - 1336, 1335, 0, 1324, 1338, 1326, 1327, 1328, 1336, 1337, - 1330, 1326, 1341, 1327, 1339, 1343, 1347, 1332, 1333, 1335, - 1328, 1339, 1332, 1333, 1331, 1337, 1342, 1336, 1335, 1334, - 1345, 1338, 1343, 1344, 1341, 1342, 1337, 1345, 1348, 1341, - 1346, 1339, 1343, 1351, 1346, 1344, 1352, 1349, 1347, 1353, - 1355, 1354, 1352, 1342, 1357, 0, 1353, 1345, 1354, 1352, - 1344, 1358, 0, 1357, 1359, 1355, 1363, 1346, 1349, 1356, - 1348, 1359, 1362, 1352, 1349, 1351, 1353, 1355, 1354, 1352, - - 1361, 1357, 1356, 1360, 1365, 1360, 1364, 1358, 1358, 1361, - 1364, 1359, 1367, 1363, 1362, 1369, 1356, 1368, 1370, 1362, - 1367, 1371, 1368, 1373, 1369, 1372, 1365, 1361, 1380, 1374, - 1360, 1365, 1374, 1364, 1378, 1373, 1370, 1376, 1372, 1367, - 1371, 1374, 1369, 1375, 1377, 1370, 1375, 1378, 1371, 1368, - 1373, 1381, 1372, 1383, 1384, 1376, 1374, 0, 1383, 1374, - 1380, 1378, 1384, 1382, 1376, 1375, 1385, 1385, 1386, 1377, - 1375, 1377, 1387, 1375, 1381, 1388, 1390, 1386, 1381, 1382, - 1389, 1384, 1391, 1390, 1392, 1383, 1397, 1394, 1401, 1389, - 1382, 1392, 1395, 1385, 1387, 1386, 1396, 1388, 1398, 1387, - - 1394, 1395, 1388, 1390, 1391, 1396, 1399, 1389, 1400, 1391, - 0, 1392, 1397, 1397, 1394, 1399, 1400, 1402, 1403, 1395, - 1401, 1398, 1404, 1396, 1405, 1398, 1406, 1407, 1408, 1403, - 1404, 1415, 1402, 1399, 1409, 1400, 1408, 1405, 1406, 1407, - 1410, 1411, 1413, 1412, 1402, 1403, 1414, 1416, 1413, 1404, - 1419, 1405, 1412, 1406, 1407, 1408, 1409, 1415, 1415, 1416, - 1410, 1409, 1417, 1411, 1414, 1418, 1420, 1410, 1411, 1413, - 1412, 1421, 1418, 1414, 1416, 1422, 1419, 1419, 1423, 1424, - 1417, 1427, 1426, 1429, 1430, 0, 1425, 1427, 1422, 1417, - 1428, 1431, 1418, 1426, 1432, 1435, 0, 0, 1420, 1433, - - 1437, 1436, 1422, 1421, 1423, 1423, 1424, 1425, 1427, 1426, - 1438, 1442, 1428, 1425, 1439, 1429, 1430, 1428, 1437, 1438, - 1432, 1432, 1435, 1431, 1436, 1433, 1433, 1437, 1436, 1439, - 1440, 1442, 1441, 0, 1443, 1444, 1445, 1438, 1442, 1447, - 0, 1439, 1444, 1440, 1441, 1446, 1448, 0, 1449, 1452, - 0, 1450, 1447, 1449, 1448, 1445, 1450, 1440, 1451, 1441, - 1443, 1443, 1444, 1445, 1455, 1451, 1447, 1446, 1456, 1453, - 1454, 1457, 1446, 1448, 1458, 1452, 1452, 1453, 1454, 1457, - 1449, 1458, 1455, 1450, 1459, 1451, 1460, 1461, 1463, 1463, - 1456, 1455, 1462, 1459, 1464, 1456, 1453, 1454, 1457, 1462, - - 1465, 1458, 1466, 1467, 1468, 1469, 0, 0, 1465, 1461, - 1475, 1459, 1468, 1469, 1461, 1463, 1470, 1471, 1460, 1462, - 1472, 1473, 1475, 1466, 1470, 1471, 1464, 1465, 1472, 1466, - 1474, 1468, 1469, 1476, 1473, 1467, 1474, 1475, 1477, 1480, - 1481, 1478, 1479, 1470, 1471, 1482, 0, 1472, 1473, 1478, - 1479, 1483, 1484, 1486, 1480, 1490, 1485, 1474, 0, 1476, - 1476, 0, 1477, 1487, 1490, 1477, 1480, 1481, 1478, 1479, - 1485, 1486, 1482, 1483, 1491, 1484, 1492, 1487, 1483, 1484, - 1486, 1488, 1490, 1485, 1493, 1488, 1494, 1495, 1492, 1497, - 1487, 1493, 1498, 1496, 0, 1499, 1491, 1494, 1488, 1507, - - 1501, 1491, 1500, 1492, 1498, 1502, 1488, 1504, 1488, 1499, - 1503, 1493, 1488, 1494, 1495, 1496, 1504, 1503, 1505, 1498, - 1496, 1497, 1499, 1501, 1500, 1488, 1506, 1501, 1502, 1500, - 1508, 1507, 1502, 1506, 1504, 1510, 1505, 1503, 1513, 1515, - 1512, 0, 1514, 1516, 1510, 1505, 1512, 1518, 1520, 1521, - 1516, 0, 1522, 1506, 1526, 1523, 0, 1508, 1527, 1529, - 1513, 0, 1510, 1522, 1527, 1513, 1523, 1512, 1514, 1514, - 1516, 1515, 1520, 1524, 1518, 1520, 1521, 1529, 1526, 1522, - 1528, 1526, 1523, 1530, 1524, 1527, 1529, 1528, 1531, 1532, - 1530, 1533, 1536, 1538, 1534, 1535, 0, 1533, 1537, 1539, - - 1524, 1532, 1534, 1543, 1541, 1536, 1541, 1528, 1539, 0, - 1530, 1538, 1548, 0, 1531, 1531, 1532, 1535, 1533, 1536, - 1538, 1534, 1535, 1540, 1537, 1537, 1539, 1542, 1544, 1543, - 1543, 1541, 1547, 1545, 1542, 1540, 1546, 1553, 1549, 1548, - 1550, 1544, 1545, 1551, 1547, 1553, 1552, 1550, 1555, 1556, - 1540, 1552, 1554, 1559, 1542, 1544, 1557, 1556, 1546, 1547, - 1545, 1549, 1560, 1546, 1553, 1549, 1563, 1550, 1554, 1551, - 1551, 1555, 1562, 1552, 1561, 1555, 1556, 1563, 1557, 1554, - 1559, 1564, 1565, 1557, 1566, 1566, 1560, 1567, 1561, 1560, - 1564, 1569, 1566, 1563, 1562, 1565, 1568, 1570, 1568, 1562, - - 1567, 1561, 1573, 1571, 1574, 1575, 1572, 1579, 1564, 1565, - 1571, 1566, 1566, 1572, 1567, 1577, 1578, 1569, 1569, 1570, - 1581, 1576, 1574, 1568, 1570, 0, 1584, 1575, 1576, 1573, - 1571, 1574, 1575, 1572, 1580, 1586, 1583, 1585, 1578, 1579, - 1577, 1580, 1577, 1578, 1588, 1585, 1590, 1589, 1576, 1583, - 1589, 1591, 1581, 1584, 1592, 1595, 1586, 1594, 0, 1593, - 1598, 1580, 1586, 1583, 1585, 1596, 1588, 1592, 1593, 1594, - 1601, 1588, 1590, 1590, 1589, 1598, 1597, 1591, 1591, 1595, - 1605, 1592, 1595, 1599, 1594, 1597, 1593, 1598, 1603, 1602, - 1599, 1596, 1596, 1600, 1608, 1609, 1600, 1606, 1605, 1607, - - 1610, 1607, 1601, 1597, 1603, 1611, 1612, 1605, 1600, 1615, - 1599, 1602, 1603, 1613, 0, 1603, 1602, 1600, 1608, 1606, - 1600, 1608, 1609, 1600, 1606, 1614, 1607, 1616, 1612, 1617, - 1619, 1603, 1610, 1612, 1621, 1600, 1618, 1611, 1619, 1613, - 1613, 1615, 1622, 1617, 1623, 1618, 1620, 1624, 1625, 1616, - 1626, 1614, 1614, 1620, 1616, 0, 1617, 1619, 1621, 1628, - 1627, 1621, 1629, 1618, 1627, 1632, 1630, 1635, 1631, 0, - 1625, 1634, 1632, 1620, 1622, 1625, 1623, 1631, 1634, 1624, - 1635, 1628, 1626, 1633, 1636, 1640, 1628, 1627, 1630, 1629, - 1637, 1633, 1632, 1630, 1635, 1631, 1638, 1636, 1634, 1639, - - 1641, 1639, 1643, 1637, 1645, 1638, 1642, 1647, 1640, 1646, - 1633, 1636, 1640, 1648, 1642, 1655, 0, 1637, 0, 1645, - 0, 1647, 1643, 1638, 1646, 1641, 1639, 1641, 1649, 1643, - 1650, 1645, 1651, 1642, 1647, 1649, 1646, 1652, 1653, 1651, - 1656, 1650, 1655, 1658, 1653, 1648, 1657, 1656, 1659, 1660, - 1652, 1662, 1666, 1661, 1662, 1649, 0, 1650, 1658, 1651, - 1663, 1660, 0, 1664, 1652, 1653, 1661, 1656, 1657, 1663, - 1658, 1665, 1666, 1657, 1659, 1659, 1660, 1668, 1662, 1666, - 1661, 1664, 1667, 1665, 1670, 1667, 1673, 1663, 1668, 1670, - 1664, 1672, 1674, 1672, 1675, 1679, 1670, 1677, 1665, 1676, - - 1667, 1678, 0, 1680, 1668, 1682, 1677, 1681, 1691, 1667, - 1673, 1670, 1667, 1673, 1676, 1681, 1670, 1680, 1672, 1674, - 1683, 1675, 1679, 1684, 1677, 1678, 1676, 1682, 1678, 1685, - 1680, 1686, 1682, 1687, 1681, 1688, 1689, 1685, 1692, 1689, - 1691, 1690, 1686, 1688, 1683, 1684, 1694, 1683, 0, 1693, - 1684, 1687, 1696, 1694, 1689, 0, 1685, 1695, 1686, 1690, - 1687, 1696, 1688, 1689, 1697, 1692, 1689, 1698, 1690, 1693, - 1699, 1695, 1701, 1694, 1700, 1699, 1693, 1697, 1698, 1696, - 1704, 1705, 1704, 1706, 1695, 1708, 1707, 1701, 0, 1709, - 1705, 1697, 1710, 1712, 1698, 1713, 1700, 1707, 0, 1701, - - 0, 1700, 1699, 1708, 1713, 0, 1710, 1704, 1705, 1706, - 1706, 1709, 1708, 1707, 1711, 1712, 1709, 1711, 1710, 1710, - 1712, 1714, 1713, 1716, 1718, 1715, 1719, 1714, 1716, 1722, - 1720, 0, 1711, 1710, 1715, 1720, 1721, 1718, 1719, 1724, - 1723, 1711, 1725, 1726, 1711, 1728, 1727, 1733, 1714, 1723, - 0, 1718, 1715, 1719, 1729, 1716, 1736, 1720, 1721, 1727, - 0, 1722, 1731, 1721, 1734, 1726, 1724, 1723, 1738, 1731, - 1726, 1732, 1740, 1727, 1725, 1729, 1735, 1728, 1734, 1733, - 1740, 1729, 1735, 1743, 1732, 1741, 1742, 1738, 1736, 1731, - 1745, 1734, 1744, 1741, 1742, 1738, 0, 1746, 1732, 1740, - - 1735, 1748, 1743, 1735, 1747, 1749, 1751, 1750, 1745, 1735, - 1743, 1746, 1741, 1742, 1744, 1748, 1752, 1745, 1749, 1744, - 1750, 1753, 1747, 1754, 1746, 1755, 1761, 1751, 1748, 1756, - 1757, 1747, 1749, 1751, 1750, 1758, 1756, 1754, 1759, 1757, - 1762, 1760, 1764, 1758, 1766, 1762, 0, 1768, 1752, 1763, - 1754, 1764, 1755, 1753, 1751, 1760, 1756, 1757, 1761, 1767, - 1763, 1769, 1758, 1771, 1773, 1759, 1767, 1762, 1760, 1764, - 1768, 1766, 1770, 1772, 1768, 1777, 1763, 1774, 1776, 1770, - 0, 1774, 1773, 1769, 1778, 1771, 1767, 1781, 1769, 1780, - 1771, 1773, 1779, 1777, 1776, 1772, 1785, 1783, 1782, 1770, - - 1772, 1780, 1777, 0, 1774, 1776, 1782, 1779, 1778, 1784, - 1787, 1778, 1783, 1786, 1781, 1792, 1780, 1784, 1788, 1779, - 1789, 1791, 1792, 1785, 1783, 1782, 1786, 1793, 1794, 1791, - 1787, 1796, 0, 1788, 1797, 1789, 1784, 1787, 1798, 1799, - 1786, 1795, 1792, 1794, 0, 1788, 1802, 1789, 1791, 1801, - 1795, 1803, 1796, 1804, 1805, 1794, 0, 1806, 1796, 1793, - 0, 1797, 1798, 1807, 1802, 1798, 1799, 1808, 1795, 1805, - 1809, 1801, 0, 1802, 1808, 1809, 1801, 1810, 1812, 1811, - 1804, 1805, 1806, 1803, 1806, 1813, 1810, 1807, 1811, 1816, - 1807, 1814, 1817, 1815, 1808, 1819, 0, 1809, 1823, 1821, - - 1812, 1816, 1819, 1822, 1810, 1812, 1811, 1813, 1815, 1814, - 1818, 1824, 1813, 0, 1817, 1822, 1816, 1820, 1814, 1817, - 1815, 1821, 1819, 1818, 1820, 1823, 1821, 1825, 1818, 1830, - 1822, 0, 1827, 1825, 1828, 1829, 1830, 1818, 1831, 1820, - 1827, 1833, 1828, 1824, 1820, 1832, 1829, 1832, 1834, 1835, - 1818, 1820, 1837, 1836, 1825, 1838, 1830, 1844, 1832, 1827, - 1836, 1828, 1829, 1831, 1839, 1831, 1842, 1833, 1833, 1843, - 1839, 1840, 1832, 1845, 1832, 1834, 1835, 1840, 1841, 1837, - 1836, 1838, 1838, 1847, 1841, 1848, 1849, 1850, 0, 1844, - 1853, 1839, 1843, 1842, 1848, 1852, 1843, 1845, 1840, 1851, - - 1845, 1851, 1855, 1854, 1856, 1841, 1859, 1858, 1857, 1850, - 1854, 0, 1848, 1858, 1850, 1847, 1860, 1853, 1849, 1852, - 1857, 1861, 1852, 1862, 1855, 1863, 1851, 1868, 1859, 1855, - 1854, 1856, 0, 1859, 1858, 1857, 0, 1865, 1860, 1864, - 1864, 1864, 1866, 1860, 1865, 1862, 1864, 1861, 1861, 1867, - 1862, 1866, 1872, 1869, 1864, 1875, 1867, 1863, 1871, 1868, - 1869, 1874, 1873, 1871, 1865, 1872, 1864, 1864, 1864, 1866, - 1877, 1875, 1876, 1864, 1873, 0, 1867, 1878, 1879, 1872, - 1869, 1880, 1875, 1881, 1876, 1879, 1874, 1880, 1874, 1873, - 1871, 1882, 1882, 1883, 1884, 1878, 1886, 1887, 1885, 1876, - - 1888, 1884, 1877, 1885, 1878, 1879, 1891, 1888, 1880, 1892, - 1881, 1892, 1893, 1895, 1897, 1899, 0, 1898, 1882, 1883, - 1883, 1884, 1886, 1886, 1887, 1885, 1896, 1888, 1898, 1900, - 1893, 1895, 1896, 1891, 1902, 1900, 1892, 1901, 1910, 1893, - 1895, 1903, 1899, 1905, 1898, 0, 1897, 1904, 1904, 1901, - 1906, 1906, 1907, 1896, 1902, 1909, 1900, 1911, 1913, 1903, - 1910, 1902, 1914, 1907, 1901, 1910, 1912, 0, 1903, 1905, - 1905, 1915, 1917, 1912, 1904, 1918, 1919, 1906, 1913, 1907, - 1917, 1922, 1920, 1921, 1923, 1913, 1926, 1909, 1922, 1911, - 1924, 1925, 1923, 1912, 1914, 1926, 1915, 1928, 1915, 1917, - - 1929, 1921, 1930, 1919, 1920, 1924, 1933, 1918, 1922, 1920, - 1921, 1923, 1938, 1926, 1931, 1925, 1932, 1924, 1925, 1927, - 1927, 1931, 1933, 1928, 1928, 1937, 1936, 1939, 1932, 1933, - 1935, 1936, 1929, 1933, 1930, 1939, 1940, 1935, 1943, 1938, - 1944, 1931, 1942, 1932, 1946, 1958, 1927, 1937, 1940, 1933, - 1942, 1945, 1937, 1936, 1939, 1947, 1948, 1935, 1950, 1949, - 1952, 1943, 1946, 1940, 1949, 1943, 1944, 1944, 1951, 1942, - 1954, 1946, 1945, 1952, 1951, 1949, 1953, 1958, 1945, 1948, - 1961, 1955, 1947, 1948, 1953, 1950, 1949, 1952, 1955, 1956, - 1959, 1949, 1954, 1957, 1960, 1951, 1956, 1954, 1962, 1959, - - 1957, 1963, 1961, 1953, 1964, 0, 1960, 1961, 1955, 1965, - 1968, 1967, 1962, 1970, 1972, 1968, 1956, 1959, 1973, 1974, - 1957, 1960, 1983, 1973, 1976, 1962, 1968, 1969, 1963, 1967, - 1964, 1964, 1965, 1978, 1969, 1980, 1965, 1968, 1967, 1985, - 1970, 1972, 1968, 1977, 1977, 1983, 1979, 1982, 1984, 1983, - 1973, 1974, 1990, 1987, 1969, 1978, 1976, 1986, 1989, 1986, - 1978, 1979, 1982, 1984, 1988, 1985, 1985, 1980, 1991, 1988, - 1977, 1992, 1993, 1979, 1982, 1984, 1991, 1994, 1992, 1990, - 1997, 1996, 2000, 1998, 1986, 1987, 2001, 2002, 1997, 2003, - 1989, 1988, 1994, 2004, 1993, 1991, 1996, 2005, 1992, 1993, - - 2004, 2006, 0, 2007, 1994, 1998, 2000, 1997, 1996, 2000, - 1998, 2008, 2001, 2001, 2002, 2009, 2003, 2011, 2019, 2013, - 2004, 2014, 2006, 2015, 2020, 2007, 2017, 2025, 2006, 2005, - 2007, 2024, 2008, 2009, 2022, 2023, 2014, 2018, 2008, 2011, - 2019, 2017, 2009, 2013, 2011, 2019, 2013, 2021, 2014, 2015, - 2015, 2020, 2018, 2017, 2025, 2024, 2022, 2023, 2024, 2026, - 2027, 2022, 2023, 2028, 2018, 2021, 2026, 2029, 2030, 2032, - 2031, 2033, 2028, 2035, 2021, 2029, 2036, 2041, 2027, 2039, - 2033, 2034, 2035, 2042, 2041, 2038, 2026, 2027, 2039, 2036, - 2028, 2030, 2031, 0, 2029, 2030, 2038, 2031, 2033, 2034, - - 2035, 2032, 2040, 2036, 2041, 2046, 2039, 2043, 2034, 2042, - 2042, 2038, 2038, 2044, 2050, 2045, 2047, 0, 2058, 0, - 2040, 2045, 2052, 2038, 2053, 2043, 2054, 2046, 2044, 2040, - 2047, 2058, 2046, 2055, 2043, 2053, 2057, 2054, 2059, 2061, - 2044, 2050, 2045, 2047, 2055, 2058, 2052, 2060, 2057, 2052, - 2062, 2053, 2063, 2054, 2064, 2067, 2072, 2060, 2068, 2065, - 2055, 2063, 2071, 2057, 2070, 2061, 2061, 2073, 2070, 2077, - 2059, 2075, 2074, 0, 2060, 2062, 2075, 2062, 2065, 2063, - 2073, 2064, 2067, 2071, 2068, 2068, 2065, 2078, 2072, 2071, - 2076, 2070, 2074, 2080, 2073, 2077, 2077, 2076, 2075, 2074, - - 2079, 2081, 0, 2082, 2083, 2078, 2079, 2091, 2080, 2084, - 2084, 2085, 2086, 0, 2078, 2082, 2081, 2076, 2094, 2083, - 2080, 0, 2088, 2085, 2095, 2086, 2092, 2079, 2081, 2088, - 2082, 2083, 2090, 2086, 2091, 2092, 2084, 2089, 2085, 2086, - 2098, 2089, 2094, 2093, 2099, 2094, 2095, 2090, 2096, 2088, - 2093, 2095, 2086, 2092, 2100, 2096, 2101, 2102, 2104, 2090, - 0, 2107, 2098, 2100, 2089, 2106, 2109, 2098, 2111, 2099, - 2093, 2099, 2108, 0, 2106, 2096, 2104, 2102, 2101, 2107, - 2113, 2100, 2110, 2101, 2102, 2104, 2115, 2108, 2107, 2114, - 2110, 2109, 2106, 2109, 2116, 2116, 2117, 2118, 2119, 2108, - - 2111, 2121, 2114, 2122, 2120, 2113, 2124, 2113, 2123, 2110, - 2121, 0, 2122, 2115, 2125, 2123, 2114, 2127, 2117, 2126, - 2119, 2116, 2118, 2117, 2118, 2119, 2120, 2132, 2121, 2128, - 2122, 2120, 2127, 2126, 2128, 2123, 2125, 2129, 2124, 2131, - 2132, 2125, 2133, 2135, 2127, 2134, 2126, 2131, 2137, 2139, - 2136, 2138, 0, 0, 2132, 2135, 2129, 2136, 2140, 2142, - 2141, 2128, 2144, 0, 2129, 2145, 2131, 2140, 2141, 2133, - 2135, 2134, 2134, 2138, 2139, 2143, 2139, 2136, 2138, 2141, - 2137, 2146, 2147, 2165, 2148, 2140, 2142, 2141, 2144, 2144, - 2143, 2145, 2145, 2148, 2150, 2141, 2153, 2150, 2151, 2146, - - 2152, 2153, 2143, 2154, 2147, 2156, 2152, 2158, 2146, 2147, - 2165, 2148, 2150, 2155, 2159, 2160, 0, 2164, 2154, 2162, - 2156, 2150, 2158, 2151, 2150, 2151, 0, 2152, 2153, 0, - 2154, 2155, 2156, 2162, 2158, 2164, 2159, 2160, 2163, 2166, - 2155, 2159, 2160, 2167, 2164, 2163, 2162, 2168, 2166, 2169, - 2171, 2170, 2167, 2170, 2175, 2172, 2168, 2173, 2176, 0, - 2169, 2177, 2180, 2171, 2178, 2163, 2166, 2172, 2177, 2175, - 2167, 2179, 0, 2176, 2168, 2191, 2169, 2171, 2170, 2173, - 2180, 2175, 2172, 2183, 2173, 2176, 2178, 2185, 2177, 2180, - 2186, 2178, 2188, 2179, 2186, 2187, 2183, 2189, 2179, 2189, - - 2190, 2188, 2191, 2192, 2183, 2193, 2194, 2187, 2185, 2197, - 2183, 2196, 2195, 2201, 2185, 2194, 2204, 2186, 2190, 2188, - 2195, 2192, 2187, 2183, 2189, 2205, 2198, 2190, 2206, 2200, - 2192, 2197, 2193, 2194, 2196, 2207, 2197, 2200, 2196, 2195, - 2198, 2202, 2203, 2208, 2211, 2201, 2202, 2203, 2204, 0, - 2208, 2212, 2206, 2198, 2207, 2206, 2200, 2205, 2214, 2218, - 2215, 2213, 2207, 2217, 0, 2212, 2216, 2219, 2202, 2220, - 2208, 2211, 2217, 2221, 2203, 2222, 2212, 2212, 2212, 2213, - 2223, 2216, 2225, 0, 2227, 2214, 2215, 2215, 2213, 2219, - 2217, 2218, 2212, 2216, 2219, 2220, 2220, 2222, 2231, 2226, - - 2221, 2228, 2222, 2212, 2233, 2225, 2226, 2227, 2228, 2225, - 2232, 2227, 2223, 2230, 2232, 2230, 2233, 2234, 2235, 2236, - 2231, 2238, 2237, 2240, 2241, 2231, 2226, 2235, 2228, 2237, - 2236, 2233, 2243, 2239, 2244, 2244, 2251, 2232, 2239, 2234, - 2230, 2242, 2246, 2238, 2234, 2235, 2236, 2241, 2238, 2237, - 2240, 2241, 2248, 2242, 2243, 2245, 2249, 2246, 2247, 2243, - 2239, 2244, 2250, 2251, 2245, 2253, 2247, 2254, 2242, 2246, - 2249, 2250, 2255, 2256, 2248, 2254, 2263, 0, 2261, 2248, - 2255, 2256, 2245, 2249, 2253, 2247, 2257, 2259, 2258, 2250, - 2257, 2258, 2253, 2261, 2254, 2259, 2260, 2262, 2265, 2255, - - 2256, 2269, 2260, 2262, 2267, 2261, 2268, 2270, 2263, 2271, - 2265, 2272, 0, 2257, 2259, 2258, 2271, 2273, 2267, 2268, - 2278, 2274, 2269, 2260, 2262, 2265, 2275, 2277, 2269, 2276, - 2279, 2267, 2270, 2268, 2270, 2280, 2271, 2281, 2272, 2273, - 2275, 2277, 2276, 2282, 2273, 2274, 2278, 2278, 2274, 2283, - 0, 2284, 2286, 2275, 2277, 2282, 2276, 2279, 2287, 2288, - 2280, 0, 2280, 2283, 2281, 2285, 2290, 2291, 2285, 2293, - 2282, 2294, 2295, 2292, 2291, 2297, 2283, 2284, 2284, 2286, - 2292, 2288, 2296, 2285, 2293, 2287, 2288, 2299, 2290, 2300, - 2296, 2301, 2285, 2290, 2291, 2285, 2293, 2298, 2294, 2295, - - 2292, 2300, 2297, 2302, 2303, 2305, 2298, 2304, 2311, 2296, - 0, 2306, 2307, 2301, 2299, 2310, 2300, 2313, 2301, 2308, - 2304, 2306, 0, 2305, 2298, 2307, 2315, 2308, 2312, 2316, - 2302, 2303, 2305, 2317, 2304, 2311, 2312, 2310, 2306, 2307, - 2314, 2319, 2310, 2318, 2313, 0, 2308, 2322, 2315, 2314, - 2316, 2320, 2321, 2315, 2324, 2312, 2316, 2317, 2318, 2320, - 2317, 2326, 2332, 2325, 2321, 2330, 2324, 2314, 2319, 2318, - 2318, 2325, 2322, 2328, 2322, 2331, 2333, 2330, 2320, 2321, - 2328, 2324, 2329, 2334, 2333, 2318, 2329, 2335, 2326, 2332, - 2325, 2338, 2330, 2340, 2336, 2341, 0, 2339, 2331, 2335, - - 2328, 2345, 2331, 2333, 2339, 2334, 2336, 2342, 2341, 2329, - 2334, 2344, 2344, 2340, 2335, 2346, 2342, 2343, 2338, 2350, - 2340, 2336, 2341, 2347, 2339, 2351, 2343, 2345, 2345, 2355, - 2348, 2352, 0, 2346, 2342, 2358, 2358, 2353, 2344, 2354, - 2351, 2354, 2346, 2355, 2343, 2348, 2357, 2348, 2347, 2356, - 2347, 2350, 2351, 2352, 2348, 2356, 2355, 2348, 2352, 2353, - 2360, 2361, 2358, 2362, 2353, 2363, 2354, 2364, 2357, 2365, - 2372, 2368, 2348, 2357, 2348, 2366, 2356, 2363, 2369, 2367, - 2373, 2366, 2360, 2361, 2372, 2362, 2370, 2360, 2361, 0, - 2362, 2367, 2363, 2371, 2374, 2371, 2375, 2372, 2376, 2364, - - 2369, 2365, 2366, 2368, 2373, 2369, 2367, 2373, 2370, 2377, - 2379, 2378, 2374, 2370, 2375, 2380, 2376, 2381, 2388, 2383, - 2371, 2374, 2385, 2375, 2378, 2376, 2383, 2377, 2387, 2385, - 2386, 2392, 0, 2389, 2390, 0, 2377, 2391, 2378, 0, - 2381, 2389, 2379, 2397, 2381, 0, 2383, 2380, 2386, 2385, - 2388, 2395, 2390, 2392, 2387, 2387, 2399, 2386, 2392, 2389, - 2389, 2390, 2395, 2391, 2391, 2393, 2396, 2393, 2389, 2398, - 2397, 2401, 2393, 2402, 2399, 2403, 2404, 2396, 2395, 2407, - 2406, 2398, 2408, 2399, 2402, 2410, 2401, 2403, 2411, 2408, - 2409, 2404, 2393, 2396, 2393, 2413, 2398, 2414, 2401, 2416, - - 2402, 2407, 2403, 2404, 2406, 2409, 2407, 2406, 2415, 2408, - 2417, 2418, 2410, 2419, 2411, 2411, 2426, 2409, 2421, 2420, - 2423, 2414, 2413, 2425, 2414, 0, 2422, 2431, 2424, 2418, - 2415, 2416, 2420, 2423, 2428, 2415, 2424, 2430, 2418, 2427, - 2419, 2422, 2417, 2432, 2421, 2421, 2420, 2423, 2426, 2425, - 2425, 2431, 2427, 2422, 2431, 2424, 2428, 2433, 2434, 2435, - 2430, 2428, 2436, 2438, 2430, 2437, 2427, 2439, 2442, 2436, - 2432, 2441, 0, 2443, 2445, 2442, 2434, 2435, 2449, 2433, - 2443, 2439, 2446, 0, 2433, 2434, 2435, 2445, 2437, 2436, - 2438, 2448, 2437, 2441, 2439, 2442, 2444, 2447, 2441, 2450, - - 2443, 2445, 2451, 2444, 2447, 2446, 2452, 0, 2453, 2446, - 2449, 2454, 2455, 2448, 2457, 2452, 2453, 2459, 2448, 2454, - 2450, 2456, 2462, 2444, 2447, 2460, 2450, 2456, 2451, 2451, - 2463, 2461, 2459, 2452, 2455, 2453, 2460, 2464, 2454, 2455, - 2469, 2457, 2466, 2468, 2459, 2471, 2471, 2470, 2456, 2463, - 2472, 2476, 2460, 2461, 2462, 2475, 2468, 2463, 2461, 2478, - 2466, 2479, 2464, 2482, 2464, 2477, 2469, 2469, 2486, 2466, - 2468, 2470, 2471, 2495, 2470, 2484, 2472, 2472, 2475, 2479, - 2477, 2486, 2475, 2476, 2484, 2487, 2478, 2490, 2479, 2493, - 2482, 2492, 2477, 2491, 2491, 2486, 2487, 2492, 2497, 2494, - - 2495, 2499, 2484, 2500, 2513, 2501, 0, 2504, 2502, 2490, - 2500, 2493, 2487, 2507, 2490, 2506, 2493, 2503, 2492, 2502, - 2491, 2494, 2503, 2506, 2508, 2497, 2494, 2510, 2509, 2504, - 2500, 2501, 2501, 2499, 2504, 2502, 2513, 2507, 2512, 2508, - 2507, 2514, 2506, 2509, 2503, 2515, 2517, 2518, 2523, 2520, - 2514, 2508, 2519, 2525, 2510, 2509, 2512, 2515, 2520, 2522, - 2519, 2524, 2525, 2526, 0, 2512, 2528, 2527, 2514, 2529, - 0, 2518, 2515, 2517, 2518, 2523, 2520, 2531, 2532, 2519, - 2525, 2526, 2529, 2524, 2530, 2522, 2522, 2535, 2524, 2527, - 2526, 2528, 2531, 2528, 2527, 2533, 2529, 2530, 2536, 2534, - - 2532, 2537, 2533, 2538, 2531, 2532, 2534, 2539, 2540, 2535, - 2541, 2530, 0, 2543, 2535, 2544, 2542, 0, 2545, 2541, - 2547, 2546, 2533, 2540, 0, 2536, 2534, 2547, 2537, 0, - 2538, 2548, 2552, 0, 2539, 2540, 2546, 2541, 2542, 2543, - 2543, 2544, 2544, 2542, 2545, 2545, 2548, 2547, 2546, 2549, - 2551, 2550, 2553, 2554, 2555, 2556, 2549, 2550, 2548, 2552, - 2553, 2551, 2560, 2564, 2558, 2561, 2562, 2563, 2557, 2560, - 2559, 2556, 2566, 2562, 2563, 0, 2549, 2551, 2550, 2553, - 2554, 2555, 2556, 2557, 2558, 2559, 2565, 2561, 2569, 2560, - 2564, 2558, 2561, 2562, 2563, 2557, 2568, 2559, 2571, 2566, - - 2567, 2567, 2569, 2568, 2565, 2570, 2573, 2572, 2570, 2574, - 2576, 2571, 2572, 2565, 2575, 2569, 2581, 2577, 2578, 0, - 0, 2581, 2583, 2568, 2574, 2571, 2580, 2567, 2576, 2577, - 2578, 2573, 2570, 2573, 2572, 2580, 2574, 2576, 2582, 2584, - 2575, 2575, 2582, 2581, 2577, 2578, 2583, 2585, 2586, 2583, - 2587, 2588, 2584, 2580, 2589, 0, 2591, 0, 2593, 2594, - 2595, 2597, 0, 2596, 0, 2582, 2584, 0, 2594, 2585, - 2586, 2596, 2599, 2597, 2585, 2586, 2595, 2587, 2588, 2599, - 2589, 2589, 2591, 2591, 2593, 2593, 2594, 2595, 2597, 2600, - 2596, 2601, 2603, 2602, 2604, 0, 2601, 2605, 2600, 2599, - - 2602, 2604, 2606, 2607, 2608, 0, 2609, 2611, 2614, 2606, - 2603, 2615, 2607, 2608, 2612, 2618, 2600, 0, 2601, 2603, - 2602, 2604, 2605, 2613, 2605, 2617, 2614, 2612, 2613, 2606, - 2607, 2608, 2609, 2609, 2611, 2614, 2619, 2620, 2615, 2621, - 2622, 2612, 2618, 2617, 2623, 2619, 2620, 2627, 2621, 2624, - 2613, 2629, 2617, 2625, 2626, 2627, 2623, 2628, 2624, 2630, - 2622, 2631, 2625, 2619, 2620, 2626, 2621, 2622, 2631, 2633, - 2632, 2623, 2635, 2636, 2627, 2637, 2624, 2628, 2629, 2632, - 2625, 2626, 2638, 2639, 2628, 2640, 2630, 0, 2631, 2641, - 2633, 2638, 2642, 2640, 2643, 2639, 2633, 2632, 2644, 2635, - - 2636, 2643, 2641, 2646, 2645, 2644, 2647, 2637, 2649, 2638, - 2639, 2648, 2640, 0, 2642, 2651, 2641, 0, 0, 2642, - 2656, 2643, 2653, 2651, 2654, 2644, 2645, 2656, 2646, 2655, - 2646, 2645, 2654, 2647, 0, 2649, 2648, 2657, 2648, 2658, - 2653, 2659, 2651, 2663, 2655, 2660, 2664, 2656, 2659, 2653, - 2663, 2654, 2665, 2660, 2666, 2664, 2655, 2667, 2668, 2657, - 2669, 2658, 2670, 2671, 2657, 2672, 2658, 2668, 2659, 2667, - 2663, 2674, 2660, 2664, 2675, 2671, 2665, 2676, 2670, 2665, - 2677, 2666, 2682, 2674, 2667, 2668, 2680, 2669, 2672, 2670, - 2671, 2679, 2672, 2680, 2677, 2681, 2684, 2675, 2674, 2685, - - 2687, 2675, 2681, 2679, 2676, 2686, 2688, 2677, 2689, 2682, - 0, 2684, 2690, 2680, 2688, 2693, 2695, 2685, 2679, 2691, - 2692, 2702, 2681, 2684, 2700, 0, 2685, 2687, 2686, 2694, - 2693, 2692, 2686, 2688, 2690, 2689, 2694, 2691, 2703, 2690, - 2701, 2704, 2693, 2695, 2705, 2701, 2691, 2692, 2702, 2709, - 2700, 2700, 2703, 2710, 2706, 2704, 2694, 2707, 2705, 2708, - 2710, 2711, 2713, 2716, 0, 2703, 2718, 2701, 2704, 2717, - 2719, 2705, 2706, 2711, 0, 2707, 2709, 2708, 2727, 2718, - 2710, 2706, 2720, 2723, 2707, 2716, 2708, 2721, 2711, 2713, - 2716, 2717, 2719, 2718, 2722, 2721, 2717, 2719, 2728, 2725, - - 2727, 2720, 2723, 2729, 2730, 2727, 2731, 2732, 2733, 2720, - 2723, 2725, 2722, 2734, 2721, 2729, 2733, 2735, 2737, 2736, - 2728, 2722, 2739, 2738, 0, 2728, 2725, 2737, 2744, 2732, - 2729, 2730, 2738, 2731, 2732, 2733, 2740, 2735, 2741, 2742, - 2734, 2736, 0, 2745, 2735, 2737, 2736, 2743, 2748, 2749, - 2738, 2742, 2751, 2750, 2739, 2744, 2752, 2751, 2740, 2753, - 2754, 2755, 2748, 2740, 2741, 2741, 2742, 2756, 2762, 2743, - 2745, 2758, 2760, 2754, 2743, 2748, 2749, 2750, 2752, 2757, - 2750, 2753, 2761, 2752, 2751, 2759, 2753, 2754, 2761, 2758, - 2756, 2760, 2763, 2755, 2756, 2764, 2765, 2759, 2758, 2760, - - 2762, 2757, 0, 2769, 2768, 2767, 2757, 2773, 0, 2761, - 0, 2765, 2759, 2771, 2774, 2775, 0, 2764, 0, 2777, - 2778, 2779, 2764, 2765, 2763, 2767, 2768, 2769, 2771, 2773, - 2769, 2768, 2767, 2777, 2773, 2776, 2774, 2775, 2778, 2779, - 2771, 2774, 2775, 2780, 2776, 2781, 2777, 2778, 2779, 2782, - 2785, 2786, 2787, 2790, 2793, 2794, 0, 2791, 2792, 2785, - 2795, 2790, 2776, 2781, 2791, 0, 2792, 2798, 2795, 2780, - 2780, 2782, 2781, 2787, 2796, 2794, 2782, 2785, 2797, 2787, - 2790, 2793, 2794, 2786, 2791, 2792, 2801, 2795, 2799, 2804, - 2797, 2805, 2796, 2803, 2798, 2806, 2799, 2806, 2801, 2807, - - 2803, 2796, 2808, 2811, 2810, 2797, 2812, 2819, 2809, 0, - 2814, 2816, 2804, 2801, 2817, 2799, 2804, 2809, 2805, 2813, - 2803, 2813, 2806, 2820, 2827, 2812, 2821, 2822, 2817, 2816, - 2811, 2807, 2814, 2812, 2808, 2809, 2810, 2814, 2816, 2819, - 2822, 2817, 2825, 2823, 2828, 2830, 2813, 2820, 2826, 2821, - 2820, 2827, 0, 2821, 2822, 2823, 2831, 2826, 2832, 2834, - 2836, 2838, 2837, 0, 0, 2843, 2840, 2836, 2825, 2825, - 2823, 2828, 2830, 2839, 2845, 2826, 2838, 2846, 2839, 2831, - 2832, 2840, 2847, 2831, 2837, 2832, 2834, 2836, 2838, 2837, - 2842, 2843, 2843, 2840, 2848, 2852, 2849, 2842, 2850, 2853, - - 2855, 2845, 2856, 2858, 2846, 2839, 2857, 2855, 2853, 2847, - 2849, 2860, 2850, 2864, 2865, 2862, 2859, 2842, 2848, 2869, - 2861, 2848, 2852, 2849, 2862, 2850, 2853, 2855, 2859, 2856, - 2858, 2863, 2857, 2857, 2861, 2870, 2866, 2877, 2860, 2876, - 0, 2865, 2862, 2859, 2863, 2864, 2873, 2861, 2872, 2874, - 2873, 2869, 2879, 2872, 2875, 2880, 2874, 2870, 2863, 2866, - 2876, 2875, 2870, 2866, 2883, 2878, 2876, 2878, 2885, 2877, - 2886, 0, 2888, 2873, 2888, 2879, 2874, 2889, 2892, 2879, - 2872, 2875, 2880, 2890, 2893, 2896, 2883, 2885, 2891, 2891, - 2973, 2883, 2878, 2893, 2886, 2885, 2894, 2886, 2891, 2888, - - 2892, 2889, 2905, 2894, 2889, 2892, 2895, 2897, 0, 2890, - 2890, 2893, 2896, 2898, 2899, 2891, 2891, 2900, 0, 2895, - 2897, 2898, 2973, 2894, 2901, 2900, 2902, 2899, 2904, 2905, - 2903, 2902, 2912, 2895, 2897, 2903, 2904, 2898, 2906, 2911, - 2898, 2899, 2907, 2901, 2900, 2908, 0, 2909, 2898, 2910, - 2911, 2901, 0, 2913, 2912, 2904, 2914, 2914, 2902, 2912, - 2913, 2923, 2903, 0, 2906, 2906, 2911, 2916, 2907, 2907, - 2917, 2908, 2908, 2909, 2909, 2910, 2910, 2915, 2917, 2918, - 2913, 2919, 2924, 2914, 2920, 2921, 2925, 2926, 2923, 2916, - 2915, 2920, 2921, 2928, 2916, 2929, 2926, 2917, 2930, 2919, - - 2933, 2918, 2931, 2934, 2915, 2935, 2918, 0, 2919, 2924, - 2925, 2920, 2921, 2925, 2926, 2929, 2936, 2937, 2940, 2939, - 2928, 2934, 2929, 2935, 2931, 2930, 2941, 2933, 2939, 2931, - 2934, 2942, 2935, 2943, 2936, 2937, 2945, 2946, 2950, 2944, - 2954, 2949, 2948, 2936, 2937, 2940, 2939, 2944, 2955, 2946, - 2947, 2943, 2945, 2941, 2942, 2947, 2948, 2957, 2942, 2949, - 2943, 2950, 2954, 2945, 2946, 2950, 2944, 2954, 2949, 2948, - 2958, 2959, 2960, 2959, 2962, 2955, 2963, 2964, 2968, 0, - 2968, 2960, 2947, 2958, 2957, 2969, 2972, 2975, 2970, 2977, - 0, 0, 2964, 2972, 2963, 2977, 2979, 2958, 2959, 2960, - - 2980, 2962, 2975, 2963, 2964, 2968, 2970, 2969, 2981, 2984, - 2982, 2985, 2969, 2972, 2975, 2970, 2977, 2986, 2979, 2989, - 2997, 2987, 2980, 2979, 2987, 2985, 2990, 2980, 2982, 2991, - 2986, 2984, 2992, 2993, 2981, 2981, 2984, 2982, 2985, 2995, - 2993, 2994, 2998, 2999, 2986, 3000, 2989, 2987, 2987, 2994, - 2992, 2987, 2997, 2990, 3001, 3006, 2991, 3004, 3002, 2992, - 2993, 2995, 3008, 3001, 2998, 2999, 2995, 3005, 2994, 2998, - 2999, 3003, 3000, 3002, 3010, 3014, 3005, 3003, 3007, 3004, - 3007, 3001, 3011, 3014, 3004, 3002, 3012, 3006, 3013, 3008, - 3020, 3015, 3018, 0, 3005, 3016, 3022, 3010, 3003, 3018, - - 3036, 3010, 3014, 3015, 3011, 3007, 3023, 3016, 3012, 3011, - 3022, 3024, 3025, 3012, 3013, 3013, 3026, 3020, 3015, 3018, - 3023, 3027, 3016, 3022, 3030, 3024, 3029, 3036, 3028, 3033, - 3031, 0, 3027, 3023, 3026, 3025, 3028, 3031, 3024, 3025, - 3032, 3034, 3040, 3026, 3037, 3029, 3030, 3033, 3027, 3041, - 3034, 3030, 3037, 3029, 3043, 3028, 3033, 3031, 3035, 3035, - 3043, 3045, 3047, 3048, 3049, 3051, 3032, 3032, 3034, 3040, - 3054, 3037, 3050, 3047, 3048, 3055, 3041, 3056, 3057, 3061, - 3058, 3043, 3055, 3050, 3058, 3035, 3049, 3051, 3045, 3047, - 3048, 3049, 3051, 3059, 3064, 3056, 3062, 3054, 3068, 3050, - - 3063, 3059, 3055, 3080, 3056, 3061, 3061, 3058, 3063, 3062, - 3057, 3067, 3069, 3072, 3071, 3073, 3074, 3075, 3067, 3071, - 3059, 3064, 3079, 3062, 3075, 3081, 3076, 3063, 3074, 3079, - 3068, 3077, 3078, 3081, 3069, 3080, 3082, 3084, 3067, 3069, - 3072, 3071, 3073, 3074, 3075, 3076, 3086, 3077, 3083, 3079, - 3078, 3082, 3081, 3076, 3085, 3083, 3087, 3095, 3077, 3078, - 3088, 3092, 3093, 3082, 3084, 3094, 3085, 3096, 3097, 3093, - 3086, 3100, 3076, 3086, 3101, 3083, 3092, 0, 3104, 0, - 3087, 3085, 3102, 3087, 3095, 3106, 3088, 3088, 3092, 3093, - 3098, 3096, 3108, 3100, 3096, 3103, 3112, 3094, 3100, 3098, - - 3097, 3101, 3109, 3103, 3102, 3105, 3105, 3108, 3117, 3102, - 3104, 3109, 3106, 3111, 3110, 3105, 3110, 3098, 3113, 3108, - 3114, 3115, 3103, 3112, 3118, 3119, 3113, 3111, 3120, 3109, - 3121, 3114, 3105, 3105, 3122, 3117, 3123, 3124, 3125, 3115, - 3111, 3110, 3126, 3121, 3127, 3113, 3129, 3114, 3115, 3132, - 3120, 3118, 3119, 3128, 3128, 3120, 3122, 3121, 3127, 3130, - 3135, 3122, 3137, 3123, 3124, 3125, 3139, 3137, 3135, 3126, - 3138, 3127, 3140, 3143, 3139, 3138, 3132, 3140, 3129, 3141, - 3128, 3130, 3144, 3144, 3145, 3146, 3130, 3135, 3147, 3137, - 3148, 3149, 3145, 3139, 3150, 3147, 3152, 3138, 3146, 3140, - - 3143, 3164, 3155, 3153, 3159, 3141, 3141, 3158, 3148, 3144, - 3153, 3145, 3146, 3158, 3154, 3147, 3161, 3148, 3149, 3163, - 3162, 3150, 3154, 3165, 3155, 3166, 3167, 3168, 3152, 3155, - 3153, 3159, 3163, 3164, 3158, 3170, 0, 3171, 3165, 3174, - 0, 3154, 3162, 3161, 3166, 3175, 3163, 3162, 3172, 3168, - 3165, 0, 3166, 3167, 3168, 3172, 3173, 3176, 3170, 3171, - 3175, 3174, 3170, 3173, 3171, 3179, 3174, 3178, 3184, 3180, - 3181, 3183, 3175, 3179, 0, 3172, 3180, 3181, 3176, 3184, - 3183, 3185, 3185, 3173, 3176, 3187, 3178, 3186, 3189, 3191, - 3200, 3185, 3179, 3186, 3178, 3184, 3180, 3181, 3183, 3190, - - 3192, 3195, 3196, 3201, 3194, 3207, 3190, 3187, 3185, 3185, - 3189, 3194, 3187, 3202, 3186, 3189, 3196, 3200, 3210, 3208, - 3212, 3191, 3192, 3213, 3213, 3195, 3190, 3192, 3195, 3196, - 3201, 3194, 3207, 3215, 3209, 3217, 3202, 3214, 3214, 0, - 3202, 3208, 3209, 3216, 3216, 3210, 3208, 3212, 3219, 3220, - 3221, 3223, 3213, 0, 3222, 3229, 0, 3233, 3217, 3233, - 3215, 3209, 3217, 3222, 3223, 3228, 3214, 3220, 3234, 3240, - 3219, 3235, 3216, 3226, 0, 3219, 3220, 3221, 3223, 3227, - 3226, 3222, 3229, 3230, 3233, 3236, 3227, 3228, 3234, 3237, - 3230, 3240, 3228, 3239, 3235, 3234, 3240, 3241, 3235, 3242, - - 3226, 3237, 3239, 3236, 3243, 3244, 3227, 3245, 3249, 3246, - 3230, 3247, 3236, 3249, 0, 3250, 3237, 3242, 3257, 3248, - 3239, 3246, 3248, 3251, 3241, 3251, 3242, 3252, 3258, 3253, - 3243, 3243, 3244, 3247, 3245, 3253, 3246, 3248, 3247, 3252, - 3249, 3254, 3255, 3256, 3259, 3257, 3248, 3250, 3260, 3248, - 3251, 3256, 3261, 0, 3252, 3262, 3253, 3266, 3263, 3268, - 3258, 3272, 3273, 3254, 3255, 3259, 3274, 3262, 3254, 3255, - 3256, 3259, 3269, 3275, 3277, 3260, 3278, 3279, 3280, 3261, - 3263, 3284, 3262, 3286, 3266, 3263, 3268, 3289, 3272, 3273, - 3269, 3281, 3281, 3274, 3283, 3285, 3291, 3293, 3286, 3269, - - 3275, 3277, 3287, 3278, 3279, 3280, 3296, 3290, 3284, 3287, - 3286, 3293, 3283, 3285, 3289, 3290, 3292, 3294, 3281, 3295, - 3299, 3283, 3285, 3291, 3293, 3298, 3302, 3303, 3292, 3287, - 3304, 3304, 3294, 3296, 3290, 3302, 3305, 3298, 3309, 3306, - 3308, 0, 3310, 3292, 3294, 3295, 3295, 3299, 3306, 3311, - 3312, 3303, 3298, 3302, 3303, 3310, 3313, 3304, 3312, 3316, - 3317, 3314, 3305, 3305, 3308, 3313, 3306, 3308, 3320, 3310, - 3309, 3311, 3314, 3321, 3324, 3324, 3311, 3312, 3317, 0, - 3316, 3333, 3334, 3313, 3336, 3321, 3316, 3317, 3314, 3337, - 3338, 3320, 3340, 3342, 3343, 3320, 0, 3342, 3336, 3344, - - 3321, 3324, 3347, 3333, 3357, 0, 3334, 3345, 3333, 3334, - 3351, 3336, 3343, 3357, 3345, 3347, 3337, 3338, 3352, 3340, - 3342, 3343, 3344, 3349, 3350, 3355, 3344, 3349, 3354, 3347, - 3353, 3357, 3351, 3356, 3345, 3358, 3359, 3351, 3359, 3355, - 3350, 3356, 3353, 3352, 3360, 3352, 3358, 3361, 3363, 3362, - 3349, 3350, 3355, 3364, 3354, 3354, 3360, 3353, 3366, 3364, - 3356, 3365, 3358, 3359, 3362, 3361, 3367, 3368, 3372, 3374, - 3363, 3360, 3373, 3367, 3361, 3363, 3362, 3376, 3378, 3373, - 3364, 3372, 3375, 3365, 3377, 3366, 3379, 0, 3365, 3368, - 3380, 3382, 3383, 3367, 3368, 3372, 3374, 0, 3380, 3373, - - 3375, 3381, 3384, 3387, 3376, 3378, 0, 3391, 3381, 3375, - 3377, 3377, 3388, 3379, 3383, 3382, 3389, 3380, 3382, 3383, - 3385, 3386, 3385, 3390, 3384, 3388, 3393, 3395, 3381, 3384, - 3392, 3389, 3396, 3386, 3391, 3387, 3398, 3392, 3397, 3388, - 3400, 3405, 3402, 3389, 3396, 3390, 3397, 3385, 3386, 3406, - 3390, 3402, 3400, 3393, 3395, 3407, 3408, 3392, 3409, 3396, - 3410, 3415, 3417, 3398, 3408, 3397, 3411, 3400, 3405, 3402, - 3412, 3420, 3413, 3414, 3407, 3406, 3406, 3420, 3421, 3411, - 3413, 3423, 3407, 3408, 3412, 3421, 3424, 3429, 3415, 3417, - 3409, 3434, 3410, 3411, 3423, 3414, 3426, 3412, 3420, 3413, - - 3414, 3429, 3427, 3426, 3428, 3421, 3430, 3431, 3423, 3424, - 3432, 0, 3428, 3424, 3429, 3431, 3433, 3439, 3434, 3437, - 3430, 3438, 3440, 3426, 3427, 3439, 3437, 3442, 3441, 3427, - 3438, 3428, 3432, 3430, 3431, 3443, 3444, 3432, 3433, 3447, - 0, 3448, 3445, 3433, 3439, 3446, 3437, 3447, 3438, 3440, - 3441, 3450, 3451, 3452, 3454, 3441, 3456, 3455, 3444, 3442, - 3457, 3443, 3443, 3444, 3445, 3455, 3447, 3446, 3457, 3445, - 3459, 3463, 3446, 3448, 3451, 0, 3456, 3454, 3450, 3451, - 3452, 3454, 3458, 3456, 3455, 3460, 3461, 3457, 3465, 3466, - 3458, 3468, 3466, 3460, 3470, 3467, 3469, 3463, 3463, 3468, - - 3461, 3471, 3459, 3472, 3469, 3476, 3473, 3466, 3470, 3458, - 3475, 3475, 3460, 3461, 3478, 3465, 3466, 3467, 3468, 3466, - 3473, 3470, 3467, 3469, 3479, 3472, 3477, 3471, 3471, 3481, - 3472, 3476, 3476, 3473, 3477, 3480, 3482, 3475, 3483, 3484, - 3478, 3478, 3485, 3486, 3482, 0, 3489, 3493, 3487, 3481, - 3479, 3479, 3488, 3477, 3489, 3490, 3481, 3480, 3496, 0, - 0, 3484, 3480, 3482, 0, 3483, 3484, 3485, 3487, 3485, - 3486, 3497, 3488, 3489, 3493, 3487, 3491, 3490, 3494, 3488, - 3496, 3498, 3490, 3499, 3491, 3496, 3494, 3500, 3502, 3498, - 3505, 3499, 3503, 3497, 3504, 3506, 3509, 0, 3497, 3510, - - 3503, 0, 3504, 3491, 3507, 3494, 3513, 3511, 3498, 3519, - 3499, 3520, 3517, 3500, 3500, 3502, 3505, 3505, 3516, 3503, - 3517, 3504, 3506, 3509, 3507, 0, 3510, 3511, 3513, 3518, - 0, 3507, 0, 3513, 3511, 0, 3519, 3518, 3520, 3517, - 3516, 0, 0, 0, 0, 3516, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3518, 3524, 3524, 3524, - 3524, 3524, 3524, 3524, 3525, 3525, 3525, 3525, 3525, 3525, - 3525, 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3527, 3527, - 3527, 3527, 3527, 3527, 3527, 3528, 3528, 3528, 3528, 3528, - 3528, 3528, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3530, - - 3530, 3530, 3530, 3530, 3530, 3530, 3532, 3532, 0, 3532, - 3532, 3532, 3532, 3533, 3533, 0, 0, 0, 3533, 3533, - 3534, 3534, 0, 0, 3534, 0, 3534, 3535, 0, 0, - 0, 0, 0, 3535, 3536, 3536, 0, 0, 0, 3536, - 3536, 3537, 0, 0, 0, 0, 0, 3537, 3538, 3538, - 0, 3538, 3538, 3538, 3538, 3539, 0, 0, 0, 0, - 0, 3539, 3540, 3540, 0, 0, 0, 3540, 3540, 3541, - 3541, 0, 3541, 3541, 3541, 3541, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, - 3523, 3523, 3523 + 354, 345, 345, 353, 355, 363, 356, 364, 353, 352, + 357, 361, 354, 356, 359, 0, 359, 0, 361, 362, + 365, 369, 367, 355, 362, 359, 365, 0, 370, 364, + + 371, 0, 359, 356, 364, 367, 0, 363, 361, 369, + 359, 359, 365, 359, 366, 368, 366, 365, 369, 367, + 372, 0, 359, 365, 370, 370, 373, 376, 368, 359, + 0, 368, 371, 368, 376, 0, 0, 378, 366, 368, + 379, 366, 368, 366, 377, 0, 0, 372, 373, 378, + 382, 0, 379, 373, 376, 368, 0, 380, 368, 383, + 368, 374, 377, 374, 378, 386, 382, 379, 377, 374, + 380, 377, 383, 374, 382, 387, 389, 382, 374, 385, + 387, 374, 389, 386, 380, 391, 383, 374, 374, 377, + 374, 385, 386, 382, 388, 392, 374, 391, 394, 0, + + 374, 388, 405, 389, 0, 374, 385, 387, 374, 375, + 390, 375, 391, 392, 0, 388, 396, 393, 390, 395, + 395, 388, 392, 396, 375, 393, 397, 375, 388, 375, + 394, 375, 398, 0, 405, 375, 375, 390, 375, 397, + 400, 398, 0, 396, 393, 0, 395, 400, 401, 0, + 402, 375, 0, 397, 375, 401, 375, 0, 375, 384, + 384, 399, 402, 403, 398, 406, 404, 400, 398, 384, + 384, 384, 384, 384, 407, 401, 384, 402, 404, 399, + 408, 407, 410, 399, 384, 403, 384, 384, 399, 409, + 403, 406, 406, 404, 412, 408, 384, 384, 384, 384, + + 384, 407, 409, 384, 413, 412, 399, 408, 411, 416, + 411, 414, 414, 0, 410, 415, 409, 417, 419, 418, + 416, 412, 415, 420, 420, 0, 413, 423, 417, 421, + 0, 413, 418, 431, 422, 411, 416, 434, 436, 424, + 414, 420, 415, 419, 417, 419, 418, 424, 420, 422, + 420, 420, 421, 423, 423, 425, 421, 422, 426, 428, + 434, 422, 427, 0, 434, 431, 424, 425, 420, 426, + 436, 427, 428, 432, 433, 435, 422, 437, 429, 429, + 439, 0, 425, 437, 0, 426, 428, 438, 440, 427, + 429, 432, 429, 435, 441, 444, 433, 429, 443, 445, + + 432, 433, 435, 439, 437, 429, 429, 439, 438, 444, + 0, 442, 440, 446, 438, 440, 441, 429, 442, 429, + 430, 441, 444, 447, 443, 443, 445, 448, 430, 430, + 449, 451, 430, 430, 450, 446, 430, 447, 442, 452, + 446, 0, 430, 451, 457, 452, 453, 430, 454, 485, + 447, 457, 456, 448, 448, 430, 430, 450, 451, 430, + 430, 450, 449, 430, 455, 458, 452, 456, 453, 459, + 454, 457, 455, 453, 458, 454, 460, 466, 462, 456, + 461, 485, 463, 466, 459, 464, 465, 0, 467, 468, + 455, 455, 458, 470, 468, 0, 459, 463, 0, 455, + + 460, 462, 461, 460, 466, 462, 473, 461, 465, 463, + 475, 464, 464, 465, 467, 467, 468, 472, 474, 470, + 470, 476, 487, 472, 474, 473, 479, 476, 475, 477, + 481, 478, 481, 473, 482, 483, 484, 475, 478, 481, + 495, 479, 483, 482, 472, 474, 486, 488, 476, 484, + 0, 477, 489, 479, 487, 492, 477, 481, 478, 481, + 491, 482, 483, 484, 486, 489, 493, 490, 492, 488, + 490, 494, 495, 486, 488, 497, 496, 498, 493, 489, + 0, 0, 492, 496, 491, 500, 490, 491, 499, 494, + 501, 503, 0, 493, 490, 501, 505, 490, 494, 497, + + 498, 499, 497, 496, 502, 507, 504, 500, 505, 498, + 502, 508, 500, 506, 503, 499, 507, 501, 503, 508, + 509, 0, 512, 505, 513, 514, 0, 498, 504, 512, + 513, 502, 507, 504, 509, 506, 0, 514, 508, 0, + 506, 515, 516, 517, 0, 518, 549, 509, 510, 512, + 516, 513, 514, 510, 519, 510, 518, 0, 524, 521, + 0, 510, 522, 510, 515, 517, 510, 510, 515, 516, + 517, 521, 518, 510, 510, 510, 524, 519, 549, 520, + 510, 519, 510, 520, 522, 524, 521, 526, 510, 522, + 510, 527, 523, 510, 510, 523, 528, 525, 530, 526, + + 510, 520, 527, 523, 529, 530, 520, 525, 529, 531, + 520, 532, 534, 532, 526, 533, 536, 535, 527, 523, + 528, 537, 523, 528, 534, 530, 0, 540, 536, 525, + 0, 529, 535, 562, 525, 531, 531, 538, 532, 534, + 541, 533, 533, 536, 535, 538, 539, 537, 537, 540, + 543, 539, 542, 544, 540, 547, 550, 546, 541, 0, + 542, 0, 543, 548, 538, 562, 0, 541, 552, 551, + 556, 550, 553, 539, 544, 546, 552, 543, 547, 542, + 544, 551, 547, 550, 546, 553, 548, 557, 554, 555, + 548, 559, 558, 556, 559, 552, 551, 556, 555, 553, + + 554, 557, 560, 561, 564, 563, 569, 565, 0, 0, + 567, 566, 568, 577, 557, 554, 555, 558, 559, 558, + 563, 560, 565, 567, 568, 570, 0, 575, 569, 560, + 561, 580, 563, 569, 565, 566, 564, 567, 566, 568, + 571, 573, 572, 574, 576, 577, 573, 571, 578, 570, + 571, 579, 570, 572, 575, 581, 582, 574, 571, 585, + 581, 583, 582, 580, 586, 584, 587, 571, 589, 572, + 574, 576, 586, 573, 571, 578, 583, 571, 579, 588, + 590, 585, 592, 582, 590, 587, 585, 581, 583, 584, + 589, 586, 584, 587, 591, 589, 593, 594, 597, 595, + + 598, 606, 591, 588, 594, 592, 588, 590, 596, 592, + 599, 600, 601, 598, 0, 0, 0, 596, 601, 602, + 597, 591, 595, 600, 594, 597, 595, 598, 593, 607, + 0, 604, 603, 606, 608, 596, 599, 599, 600, 601, + 603, 602, 604, 605, 609, 610, 602, 608, 611, 609, + 605, 607, 609, 609, 610, 612, 607, 617, 604, 603, + 0, 608, 613, 614, 612, 615, 619, 0, 609, 617, + 605, 609, 610, 613, 611, 611, 609, 620, 616, 609, + 609, 0, 612, 621, 617, 614, 622, 615, 0, 613, + 614, 616, 615, 623, 624, 620, 628, 625, 619, 631, + + 626, 0, 632, 627, 620, 616, 631, 621, 622, 622, + 621, 626, 627, 622, 629, 623, 628, 630, 624, 625, + 623, 624, 633, 628, 625, 634, 631, 626, 629, 632, + 627, 635, 636, 634, 639, 622, 637, 635, 638, 630, + 633, 629, 0, 636, 630, 641, 640, 642, 642, 633, + 643, 0, 634, 638, 637, 645, 644, 646, 635, 636, + 650, 652, 647, 637, 645, 638, 639, 640, 648, 641, + 646, 649, 641, 640, 643, 647, 642, 643, 644, 649, + 651, 653, 645, 644, 646, 654, 656, 654, 655, 647, + 648, 656, 650, 652, 0, 648, 661, 657, 649, 658, + + 660, 0, 651, 663, 661, 653, 659, 651, 653, 662, + 655, 657, 654, 658, 665, 655, 0, 666, 656, 667, + 659, 659, 664, 661, 657, 663, 658, 662, 659, 664, + 663, 669, 660, 659, 673, 668, 662, 666, 670, 667, + 665, 665, 671, 674, 666, 674, 667, 659, 659, 664, + 668, 672, 671, 670, 0, 675, 672, 683, 676, 668, + 673, 673, 668, 669, 671, 670, 676, 677, 681, 671, + 674, 0, 678, 684, 0, 679, 681, 668, 680, 671, + 675, 678, 675, 672, 679, 676, 682, 680, 685, 683, + 0, 686, 677, 682, 677, 681, 684, 687, 688, 678, + + 684, 692, 679, 686, 689, 680, 685, 688, 690, 687, + 691, 695, 689, 682, 693, 685, 694, 690, 686, 696, + 0, 693, 691, 0, 687, 688, 695, 696, 697, 694, + 699, 689, 690, 692, 697, 690, 700, 691, 695, 698, + 701, 693, 704, 694, 690, 700, 696, 698, 705, 702, + 704, 701, 706, 699, 707, 697, 711, 699, 702, 703, + 703, 708, 0, 700, 709, 706, 698, 701, 703, 704, + 705, 0, 711, 713, 710, 705, 702, 709, 714, 706, + 707, 707, 710, 711, 708, 712, 703, 703, 708, 714, + 716, 709, 718, 717, 715, 713, 719, 0, 712, 723, + + 713, 710, 715, 720, 716, 714, 720, 721, 723, 722, + 725, 726, 712, 717, 718, 724, 719, 716, 728, 718, + 717, 715, 727, 719, 726, 729, 723, 0, 725, 721, + 720, 722, 730, 728, 721, 724, 722, 725, 726, 731, + 727, 732, 724, 733, 734, 728, 735, 736, 738, 727, + 0, 740, 745, 0, 730, 737, 733, 729, 735, 730, + 736, 737, 734, 731, 732, 741, 731, 742, 732, 739, + 733, 734, 744, 735, 736, 738, 746, 739, 740, 747, + 744, 752, 737, 746, 745, 742, 748, 741, 749, 750, + 749, 751, 741, 0, 742, 739, 739, 753, 750, 744, + + 752, 748, 747, 746, 739, 754, 747, 755, 752, 755, + 759, 756, 0, 748, 754, 749, 750, 753, 756, 0, + 762, 0, 759, 751, 753, 765, 769, 766, 778, 0, + 762, 0, 754, 0, 755, 0, 0, 759, 756, 757, + 768, 0, 757, 765, 769, 771, 757, 762, 766, 757, + 0, 770, 765, 769, 766, 772, 757, 757, 774, 757, + 778, 768, 770, 773, 757, 782, 757, 768, 771, 757, + 775, 782, 771, 757, 774, 776, 757, 781, 770, 775, + 777, 772, 772, 757, 757, 774, 757, 777, 776, 773, + 773, 780, 782, 784, 783, 0, 0, 775, 780, 781, + + 787, 786, 776, 783, 781, 0, 0, 777, 779, 779, + 785, 779, 0, 785, 779, 788, 784, 786, 780, 779, + 784, 783, 787, 788, 786, 779, 779, 787, 786, 789, + 791, 790, 791, 795, 779, 779, 779, 785, 779, 792, + 793, 779, 788, 790, 786, 793, 779, 794, 797, 796, + 0, 789, 779, 779, 798, 799, 789, 791, 790, 795, + 795, 796, 800, 792, 802, 801, 792, 794, 803, 804, + 797, 805, 793, 810, 794, 797, 796, 799, 806, 805, + 798, 798, 799, 807, 804, 809, 800, 801, 813, 800, + 807, 802, 801, 803, 808, 803, 804, 811, 805, 810, + + 810, 806, 808, 812, 809, 806, 816, 815, 814, 811, + 807, 816, 809, 817, 813, 813, 812, 814, 820, 818, + 819, 808, 815, 820, 811, 823, 822, 825, 824, 826, + 812, 827, 0, 816, 815, 814, 824, 828, 831, 829, + 832, 818, 0, 830, 0, 817, 818, 819, 822, 833, + 820, 826, 835, 822, 836, 824, 826, 823, 841, 825, + 829, 828, 830, 827, 828, 831, 829, 832, 833, 834, + 830, 837, 839, 838, 835, 842, 833, 836, 834, 835, + 840, 836, 838, 839, 843, 841, 844, 845, 840, 846, + 848, 837, 0, 842, 849, 0, 834, 846, 837, 839, + + 838, 850, 842, 843, 850, 851, 852, 840, 848, 854, + 853, 843, 849, 844, 883, 858, 846, 848, 856, 845, + 856, 849, 855, 857, 852, 859, 860, 851, 850, 858, + 859, 854, 851, 852, 853, 855, 854, 853, 861, 860, + 862, 857, 858, 863, 864, 856, 883, 866, 869, 855, + 857, 863, 862, 860, 870, 865, 866, 859, 865, 0, + 867, 872, 864, 871, 861, 861, 873, 862, 867, 871, + 863, 864, 873, 869, 866, 869, 879, 880, 874, 875, + 879, 870, 865, 872, 867, 874, 875, 867, 872, 876, + 871, 877, 878, 873, 876, 867, 884, 885, 877, 881, + + 880, 882, 886, 879, 880, 874, 875, 887, 881, 882, + 878, 889, 885, 886, 884, 887, 876, 888, 877, 878, + 890, 892, 891, 884, 885, 893, 881, 896, 882, 886, + 888, 0, 889, 894, 887, 891, 898, 900, 889, 890, + 903, 894, 900, 892, 888, 896, 895, 890, 892, 891, + 897, 899, 893, 895, 896, 898, 905, 897, 899, 901, + 894, 902, 904, 898, 900, 906, 907, 901, 902, 905, + 909, 910, 903, 895, 908, 0, 917, 897, 899, 907, + 0, 908, 911, 905, 912, 914, 901, 916, 902, 915, + 918, 913, 912, 907, 904, 915, 919, 906, 922, 913, + + 924, 908, 909, 910, 0, 911, 913, 914, 917, 911, + 920, 912, 914, 916, 916, 921, 915, 923, 913, 920, + 919, 926, 918, 919, 923, 925, 913, 924, 928, 921, + 922, 930, 927, 928, 925, 931, 932, 920, 929, 933, + 0, 932, 921, 926, 923, 927, 933, 927, 926, 934, + 929, 938, 925, 947, 930, 940, 927, 0, 930, 927, + 928, 931, 931, 932, 938, 929, 933, 935, 945, 940, + 937, 934, 927, 937, 927, 935, 934, 941, 938, 942, + 947, 946, 940, 955, 941, 942, 0, 948, 0, 948, + 944, 945, 0, 946, 935, 945, 949, 937, 954, 950, + + 952, 955, 970, 954, 941, 951, 942, 943, 946, 943, + 955, 950, 0, 943, 948, 943, 944, 944, 951, 949, + 943, 957, 952, 949, 953, 943, 950, 952, 956, 970, + 954, 943, 951, 957, 943, 959, 943, 953, 958, 960, + 943, 956, 943, 962, 957, 959, 961, 943, 957, 965, + 958, 953, 943, 963, 960, 956, 962, 959, 964, 963, + 957, 966, 959, 968, 967, 958, 960, 965, 961, 969, + 962, 964, 959, 961, 972, 975, 965, 977, 973, 0, + 963, 974, 966, 973, 975, 964, 967, 0, 966, 974, + 978, 967, 977, 981, 979, 968, 980, 0, 0, 983, + + 989, 969, 975, 982, 977, 973, 972, 979, 974, 976, + 0, 980, 978, 984, 976, 0, 976, 978, 983, 981, + 981, 979, 976, 980, 984, 982, 983, 976, 976, 985, + 982, 986, 989, 988, 976, 976, 976, 987, 991, 986, + 984, 976, 985, 976, 988, 987, 990, 996, 992, 976, + 994, 993, 1000, 991, 976, 976, 985, 992, 986, 994, + 988, 976, 993, 995, 987, 991, 997, 1001, 990, 998, + 1003, 1002, 995, 990, 996, 992, 998, 994, 993, 1002, + 1005, 1004, 1006, 1009, 1000, 1012, 0, 1010, 1013, 997, + 995, 1001, 1003, 997, 1001, 1004, 998, 1003, 1002, 1007, + + 1011, 1009, 1015, 1024, 1006, 1010, 1013, 1007, 1004, 1006, + 1009, 1011, 1005, 1014, 1010, 1013, 1016, 1012, 1017, 1019, + 1020, 1014, 0, 1016, 1015, 1018, 1007, 1011, 1022, 1015, + 1021, 1017, 1018, 1026, 1019, 1024, 1030, 1028, 1020, 0, + 1014, 1023, 0, 1016, 1026, 1017, 1019, 1020, 1021, 1022, + 1028, 1023, 1018, 1032, 1029, 1022, 1033, 1021, 1030, 1031, + 1026, 1029, 1034, 1030, 1028, 1033, 1032, 1031, 1023, 1035, + 1036, 1039, 1040, 1042, 1034, 1041, 1043, 1044, 0, 1049, + 1032, 1029, 1045, 1033, 1049, 0, 1031, 0, 1052, 1034, + 1040, 1035, 1036, 1039, 1045, 1044, 1035, 1036, 1039, 1040, + + 1046, 1041, 1041, 1053, 1044, 1042, 1048, 1057, 1043, 1045, + 1051, 1049, 1052, 1051, 1046, 1052, 1053, 1048, 1054, 1056, + 1055, 1057, 1059, 1058, 1061, 1054, 1062, 1046, 1056, 0, + 1053, 1055, 1060, 1048, 1057, 1058, 1051, 1051, 1062, 1060, + 1051, 1063, 1064, 0, 1066, 1054, 1056, 1055, 1067, 1071, + 1058, 1068, 1069, 1062, 1059, 1064, 1061, 1068, 1070, 1060, + 1071, 1073, 1074, 1063, 1072, 1077, 1075, 1080, 1063, 1064, + 1066, 1066, 1067, 1079, 1069, 1067, 1071, 1081, 1068, 1069, + 1070, 1075, 1072, 1073, 1074, 1070, 1077, 1078, 1073, 1074, + 1082, 1072, 1077, 1075, 1079, 1084, 1083, 1086, 1078, 1080, + + 1079, 1085, 1087, 1091, 1081, 1083, 1086, 1089, 1082, 1088, + 1087, 1090, 1092, 1093, 1078, 1094, 1088, 1082, 1096, 1084, + 1105, 1095, 1084, 1083, 1086, 1090, 1098, 1085, 1085, 1087, + 1097, 1089, 1100, 1103, 1089, 1091, 1088, 1094, 1090, 1102, + 1101, 1104, 1094, 1095, 1092, 1093, 1102, 1105, 1095, 1101, + 1096, 1106, 1097, 1107, 1100, 1108, 1112, 1097, 1098, 1100, + 1110, 1111, 1109, 1104, 1108, 1103, 1102, 1101, 1104, 1106, + 1109, 1107, 1112, 1113, 1117, 1115, 1118, 1114, 1106, 0, + 1107, 0, 1108, 1112, 1110, 1111, 1114, 1110, 1111, 1109, + 1115, 1116, 1120, 1119, 1121, 1113, 1124, 1123, 1125, 1116, + + 1113, 1122, 1115, 1127, 1114, 1119, 1117, 1125, 1118, 1122, + 1123, 1124, 1127, 1128, 1120, 1130, 1133, 1130, 1116, 1120, + 1119, 1121, 1134, 1124, 1123, 1125, 1129, 1132, 1122, 1135, + 1127, 1128, 1137, 1136, 1129, 1132, 1140, 1139, 1146, 1137, + 1128, 1134, 1130, 1133, 1142, 1144, 1141, 1143, 1140, 1134, + 1139, 1135, 1147, 1129, 1132, 1136, 1135, 0, 1149, 1137, + 1136, 1141, 1145, 1140, 1139, 1143, 1142, 1148, 1150, 1145, + 1146, 1142, 1144, 1141, 1143, 1151, 1154, 1152, 1148, 1153, + 1149, 1157, 1161, 1156, 1147, 1149, 1206, 1155, 1158, 1145, + 1152, 1156, 1153, 1150, 1148, 1150, 0, 1151, 1154, 1155, + + 1158, 1157, 1151, 1154, 1152, 1159, 1153, 1162, 1157, 1161, + 1156, 1164, 1163, 1159, 1155, 1158, 1165, 1166, 1206, 1167, + 1162, 1163, 1169, 1164, 1166, 1170, 1171, 1172, 1167, 0, + 1167, 0, 1159, 1167, 1162, 1175, 1173, 1165, 1164, 1163, + 0, 1167, 1176, 1165, 1166, 1169, 1167, 1178, 1171, 1169, + 1176, 1170, 1170, 1171, 1172, 1167, 1173, 1167, 1174, 1175, + 1167, 1177, 1175, 1173, 1179, 1178, 1181, 1180, 1182, 1176, + 1177, 1174, 1187, 0, 1178, 1180, 1183, 0, 1188, 1185, + 1184, 1181, 1189, 0, 1193, 1174, 1179, 1185, 1177, 1183, + 1182, 1179, 1191, 1181, 1180, 1182, 1184, 1192, 1194, 1187, + + 1188, 1190, 1193, 1183, 1189, 1188, 1185, 1184, 1190, 1189, + 1194, 1193, 1199, 1196, 1191, 1195, 1200, 1197, 1198, 1191, + 1192, 1196, 1205, 0, 1192, 1194, 1197, 1195, 1190, 1201, + 1198, 1200, 1199, 1204, 1205, 0, 0, 1201, 1203, 1199, + 1196, 1197, 1195, 1200, 1197, 1198, 1202, 1203, 1207, 1205, + 1208, 1209, 1202, 1197, 1204, 1207, 1201, 1208, 1210, 1211, + 1204, 1212, 1214, 1213, 1214, 1203, 1216, 1211, 1215, 1209, + 1210, 1213, 1217, 1202, 1219, 1207, 1212, 1208, 1209, 1217, + 1215, 1220, 1222, 1221, 1223, 1210, 1211, 1226, 1212, 1214, + 1213, 1223, 1224, 1220, 1225, 1215, 1221, 1231, 1216, 1217, + + 1227, 1222, 1226, 1224, 1228, 1227, 1219, 1229, 1220, 1222, + 1221, 1223, 1228, 1230, 1226, 1233, 1225, 1234, 1235, 1224, + 1229, 1225, 1239, 1231, 1231, 1236, 1248, 1230, 0, 1233, + 0, 1228, 1227, 1237, 1229, 1234, 0, 1243, 1238, 1240, + 1230, 1232, 1233, 1243, 1234, 1232, 0, 1241, 1232, 1232, + 1235, 1236, 1236, 1232, 1239, 1237, 1238, 1242, 1248, 1232, + 1237, 1240, 1244, 1232, 1243, 1238, 1240, 1232, 1232, 1241, + 1246, 1245, 1232, 1245, 1241, 1232, 1232, 1246, 1247, 1251, + 1232, 1249, 1254, 1242, 1242, 1250, 1232, 1247, 1244, 1244, + 1232, 1252, 1250, 1253, 1255, 1245, 1257, 1246, 1245, 1249, + + 1245, 1251, 1253, 1256, 1252, 1247, 1251, 1258, 1249, 1260, + 1266, 1261, 1250, 0, 1254, 0, 1263, 1263, 1252, 1257, + 1253, 1258, 1262, 1257, 1261, 1256, 1255, 1264, 0, 1267, + 1256, 1260, 0, 1266, 1258, 1259, 1260, 1266, 1261, 1269, + 1259, 1267, 1259, 1264, 1259, 1263, 1259, 1270, 1262, 1262, + 1268, 1274, 1270, 1259, 1264, 1272, 1267, 1269, 1271, 1268, + 1272, 1273, 1259, 1275, 1274, 1279, 1269, 1259, 1280, 1259, + 0, 1259, 1276, 1259, 1278, 0, 1271, 1268, 1274, 1270, + 1276, 1275, 1272, 1273, 1277, 1271, 1282, 1278, 1273, 1281, + 1275, 0, 1277, 1283, 1280, 1280, 1284, 1279, 1289, 1276, + + 1289, 1278, 1285, 1286, 1281, 1282, 1283, 1287, 1288, 1290, + 1291, 1277, 1292, 1282, 1293, 1285, 1281, 1288, 1284, 1294, + 1283, 1286, 1300, 1284, 1292, 1289, 1296, 1287, 1302, 1285, + 1286, 1290, 1297, 1299, 1287, 1288, 1290, 1291, 1301, 1292, + 1298, 1293, 1303, 1308, 1294, 1301, 1294, 0, 1298, 1300, + 1296, 1299, 1304, 1296, 1297, 1302, 1305, 1306, 1307, 1297, + 1299, 1310, 1305, 1306, 1307, 1301, 1309, 1298, 1303, 1303, + 1308, 1310, 1311, 1309, 1304, 1312, 1313, 1315, 1314, 1304, + 1317, 0, 1312, 1305, 1306, 1307, 1316, 0, 1310, 1317, + 1319, 1320, 0, 1309, 1321, 1315, 1311, 1322, 1323, 1311, + + 1314, 0, 1312, 1320, 1315, 1314, 1326, 1317, 1313, 1324, + 1322, 1316, 1325, 1316, 1319, 1327, 1321, 1319, 1320, 1328, + 1323, 1321, 1329, 1330, 1322, 1323, 1331, 1333, 1324, 1335, + 1326, 1332, 1330, 1326, 1325, 1336, 1324, 1327, 1337, 1325, + 1339, 1333, 1327, 0, 1329, 1328, 1328, 1331, 1338, 1329, + 1330, 1332, 1342, 1331, 1333, 1340, 1341, 1343, 1332, 1344, + 1337, 1335, 1347, 1346, 1341, 1337, 1344, 1336, 1342, 1349, + 1338, 1347, 1339, 1340, 1348, 1338, 1352, 1353, 1354, 1342, + 1350, 1349, 1340, 1341, 1343, 1346, 1344, 1350, 1351, 1347, + 1346, 1348, 1351, 1356, 0, 1358, 1349, 1357, 0, 1354, + + 1361, 1348, 1358, 1357, 1359, 1354, 1360, 1350, 1352, 1353, + 1357, 1359, 1363, 1361, 1362, 1351, 1365, 1368, 1365, 1364, + 1366, 1360, 1358, 1362, 1357, 1356, 1364, 1361, 1367, 1366, + 1357, 1359, 1369, 1360, 1370, 1373, 1369, 1372, 1363, 1363, + 1373, 1362, 1374, 1365, 1368, 1372, 1364, 1366, 1375, 1376, + 1367, 1374, 1377, 0, 0, 1367, 1370, 1382, 1378, 1369, + 1379, 1370, 1381, 1379, 1372, 1377, 1375, 1373, 1376, 1374, + 1378, 1380, 1379, 1383, 1380, 1375, 1376, 1385, 1387, 1377, + 1381, 1386, 1382, 1388, 1382, 1378, 1383, 1379, 1388, 1381, + 1379, 1389, 1392, 1380, 1387, 1390, 1390, 1391, 1380, 1389, + + 1383, 1380, 1394, 1393, 1386, 1387, 1391, 0, 1386, 1385, + 1395, 1394, 1396, 1397, 1392, 1388, 1402, 1395, 1389, 1392, + 1397, 1403, 1390, 1399, 1391, 1393, 1400, 0, 1406, 1394, + 1393, 0, 1401, 0, 1396, 1400, 1399, 1395, 1404, 1396, + 1397, 1401, 1402, 1402, 1403, 1408, 1405, 1404, 1403, 1407, + 1399, 0, 0, 1400, 1405, 1409, 1408, 1410, 1414, 1401, + 1406, 1413, 1411, 1409, 1407, 1404, 1412, 1415, 1416, 1413, + 1410, 0, 1408, 1405, 1411, 1418, 1407, 1417, 1412, 1419, + 1414, 1418, 1409, 1420, 1410, 1414, 1417, 1415, 1413, 1411, + 1416, 1421, 1423, 1412, 1415, 1416, 1422, 1419, 1424, 1423, + + 1425, 1426, 1418, 1421, 1417, 0, 1419, 1427, 1429, 1420, + 1420, 1428, 0, 1434, 1422, 1430, 1431, 1433, 1421, 1423, + 1427, 1435, 1432, 1422, 1424, 1424, 1436, 1431, 1432, 1437, + 1440, 0, 1425, 1426, 1427, 1429, 1430, 1428, 1428, 1433, + 1438, 1441, 1430, 1431, 1433, 1434, 1444, 1442, 0, 1432, + 1443, 1446, 1447, 1435, 1448, 1437, 1437, 1440, 1436, 1443, + 1451, 1444, 1445, 1446, 1441, 1442, 1438, 1438, 1441, 1449, + 1452, 1450, 1447, 1444, 1442, 1445, 1449, 1443, 1446, 1447, + 1448, 1448, 1451, 1452, 1453, 1461, 1454, 1451, 1455, 1445, + 1450, 1454, 1453, 1455, 1456, 1458, 1449, 1452, 1450, 1457, + + 1459, 1456, 1462, 1458, 1465, 1460, 1463, 1461, 1459, 1469, + 1462, 1453, 1461, 1463, 0, 1464, 1466, 1472, 1454, 1471, + 1455, 1456, 1458, 1460, 1464, 1457, 1457, 1459, 1467, 1462, + 1468, 1468, 1460, 1463, 1481, 1467, 1465, 1470, 1466, 1473, + 1471, 1469, 1464, 1466, 1474, 1470, 1471, 1473, 1475, 1472, + 1476, 1477, 1474, 1480, 1478, 1467, 1475, 1468, 1476, 1477, + 1481, 1481, 1479, 1482, 1470, 1480, 1473, 1478, 1479, 1486, + 1485, 1474, 1487, 1488, 1483, 1475, 1484, 1476, 1477, 1489, + 1480, 1478, 1483, 1495, 1484, 1485, 1491, 1482, 0, 1479, + 1482, 1490, 1495, 1492, 1493, 1488, 1486, 1485, 1493, 1487, + + 1488, 1483, 1489, 1484, 1491, 1490, 1489, 1492, 1496, 1498, + 1495, 1493, 1497, 1491, 1500, 1499, 1498, 0, 1490, 1493, + 1492, 1493, 1501, 1502, 1497, 1493, 1499, 1507, 1505, 1506, + 1496, 1503, 1504, 1513, 1508, 1496, 1498, 1521, 1493, 1497, + 1509, 1500, 1499, 1503, 1501, 1511, 1504, 1509, 1514, 1501, + 1507, 1506, 1519, 1510, 1507, 1502, 1506, 1508, 1503, 1504, + 1505, 1508, 1510, 1511, 1512, 1513, 1520, 1509, 1516, 1521, + 1518, 1512, 1511, 1524, 1519, 1514, 1518, 1516, 1522, 1519, + 1510, 1527, 1526, 1528, 1533, 1522, 0, 1529, 1530, 1532, + 1533, 1512, 1520, 1520, 1528, 1516, 1534, 1518, 1529, 1530, + + 1524, 1535, 0, 1534, 1537, 1522, 1526, 1543, 1527, 1526, + 1528, 1533, 1539, 1532, 1529, 1530, 1532, 1536, 1539, 1535, + 1538, 1540, 0, 1534, 1536, 1542, 0, 1541, 1535, 1540, + 1537, 1537, 1538, 1543, 1543, 1544, 1545, 0, 1542, 1539, + 1547, 1554, 1547, 1546, 1536, 1545, 1549, 1538, 1540, 1541, + 1548, 1550, 1542, 1544, 1541, 1546, 1551, 1548, 1552, 1553, + 0, 1555, 1544, 1545, 1550, 1551, 1557, 1547, 1554, 1556, + 1546, 1553, 1549, 1549, 1558, 1560, 1556, 1548, 1550, 1558, + 1552, 1559, 1561, 1551, 1555, 1552, 1553, 1562, 1555, 1559, + 1563, 1560, 1557, 1557, 1565, 1562, 1556, 1567, 1566, 0, + + 1571, 1558, 1560, 1573, 1568, 1561, 1570, 1569, 1559, 1561, + 0, 1567, 1563, 1571, 1562, 1570, 1573, 1563, 1569, 1575, + 1576, 1565, 1566, 1579, 1567, 1566, 1568, 1571, 1572, 1572, + 1573, 1568, 1577, 1570, 1569, 1574, 1572, 1574, 1581, 1577, + 1580, 1578, 1576, 1590, 1582, 1575, 1575, 1576, 1578, 1583, + 1579, 1582, 1585, 1584, 1586, 1572, 1572, 1587, 1580, 1577, + 1581, 1586, 1574, 1594, 1589, 1581, 1592, 1580, 1578, 1595, + 1590, 1582, 1595, 1596, 1583, 1584, 1583, 1589, 1591, 1598, + 1584, 1586, 1597, 1600, 1585, 1594, 1591, 1592, 1599, 1587, + 1594, 1589, 1598, 1592, 1601, 1600, 1595, 1599, 1602, 1596, + + 1596, 1604, 1603, 1607, 1608, 1591, 1598, 1605, 1597, 1597, + 1600, 1603, 1611, 0, 1605, 1599, 1604, 1606, 1601, 0, + 1606, 1601, 1609, 1612, 1602, 1602, 1608, 1614, 1604, 1603, + 1611, 1608, 1606, 1615, 1605, 1607, 1616, 1617, 1609, 1611, + 1613, 1606, 1613, 0, 1606, 1612, 1609, 1606, 1618, 1609, + 1612, 1614, 1619, 1621, 1614, 1620, 0, 1623, 0, 1606, + 1615, 1622, 1627, 1624, 1628, 1609, 1625, 1613, 1616, 1617, + 1618, 1623, 1624, 1626, 1625, 1618, 1629, 1630, 1619, 1619, + 1626, 1620, 1620, 1622, 1623, 1621, 1627, 1632, 1622, 1627, + 1624, 1631, 0, 1625, 1633, 1634, 1628, 1635, 1633, 1638, + + 1626, 1636, 1637, 1640, 1639, 0, 1638, 1641, 1629, 1630, + 1640, 1637, 1639, 1631, 1642, 1654, 1646, 1634, 1631, 1632, + 1641, 1633, 1634, 1636, 1635, 1643, 1638, 1642, 1636, 1637, + 1640, 1639, 1647, 1644, 1641, 1645, 1648, 1645, 1643, 1646, + 1651, 1642, 1644, 1646, 1648, 1649, 1652, 1654, 0, 1655, + 1653, 0, 1643, 1658, 1661, 1651, 1655, 1647, 1656, 1647, + 1644, 1652, 1645, 1648, 1653, 1649, 1658, 1651, 1657, 1656, + 1663, 1666, 1649, 1652, 1664, 1657, 1655, 1653, 1659, 1662, + 1658, 1661, 1665, 1666, 1659, 1656, 1662, 1667, 1668, 1664, + 1669, 1668, 1663, 1670, 0, 1657, 0, 1663, 1666, 1669, + + 1667, 1664, 1672, 1697, 1671, 1659, 1662, 1673, 1665, 1665, + 1673, 1670, 1674, 1680, 1667, 1668, 1671, 1669, 1679, 1681, + 1670, 1676, 1672, 1674, 1685, 1673, 1676, 1683, 1678, 1672, + 1678, 1671, 1682, 1676, 1673, 1697, 1683, 1673, 1684, 1674, + 1680, 1687, 1679, 1686, 1688, 1679, 1681, 1682, 1676, 1687, + 1689, 1685, 1691, 1676, 1683, 1678, 1690, 1686, 1692, 1682, + 1691, 1698, 1684, 1693, 1694, 1684, 1688, 0, 1687, 1692, + 1686, 1688, 1694, 1699, 1689, 0, 1696, 1689, 1690, 1691, + 0, 1693, 1700, 1690, 1695, 1692, 1702, 1695, 1698, 1700, + 1693, 1694, 1701, 1699, 1696, 1702, 1704, 1703, 1706, 1705, + + 1699, 1707, 1695, 1696, 1705, 1729, 1701, 1704, 1712, 1700, + 1703, 1695, 1711, 1702, 1695, 1710, 1707, 1710, 1713, 1701, + 1706, 1711, 1714, 1704, 1703, 1706, 1715, 0, 1707, 1713, + 1715, 1705, 1716, 1717, 1712, 1712, 1717, 1729, 0, 1711, + 1714, 1719, 1710, 1718, 0, 1713, 1716, 1721, 1720, 1714, + 1719, 1717, 1715, 1715, 1720, 1725, 1721, 1715, 1716, 1716, + 1717, 1722, 1727, 1717, 1724, 1718, 1722, 1725, 1719, 1730, + 1718, 1726, 1728, 1716, 1721, 1720, 1726, 1724, 1730, 1731, + 1732, 1733, 1725, 1735, 1727, 1728, 1736, 1734, 1740, 1727, + 1738, 1724, 1739, 1722, 1743, 1741, 1730, 1738, 1726, 1728, + + 1734, 0, 1745, 1733, 1742, 1739, 1731, 1736, 1733, 1741, + 1742, 1750, 1732, 1736, 1734, 1735, 1747, 1738, 1751, 1739, + 1740, 1745, 1741, 1752, 1747, 1748, 1743, 1749, 1742, 1745, + 1750, 1742, 1753, 1748, 1755, 1749, 1756, 1742, 1750, 1754, + 1751, 1752, 1757, 1747, 1758, 1751, 1753, 1759, 1755, 1756, + 1752, 1760, 1748, 1761, 1749, 1757, 1768, 1754, 1762, 1753, + 1766, 1755, 1765, 1756, 1764, 1758, 1754, 1761, 1763, 1757, + 1765, 1758, 1767, 1764, 1773, 1763, 1769, 1774, 0, 1759, + 1761, 1769, 1770, 1760, 1774, 1762, 1767, 1766, 1768, 1765, + 1775, 1764, 1758, 1770, 1776, 1763, 1771, 1778, 1779, 1767, + + 1777, 1773, 1781, 1769, 1774, 1771, 1781, 1777, 1780, 1770, + 1785, 1788, 1783, 1775, 1784, 1786, 1776, 1775, 1790, 1778, + 1779, 1776, 1792, 1771, 1778, 1779, 1780, 1777, 1783, 1781, + 1786, 1787, 1784, 1790, 1785, 1780, 1789, 1785, 1788, 1783, + 1791, 1784, 1786, 1787, 1789, 1790, 1793, 1795, 1791, 1792, + 1794, 1796, 1798, 1800, 1799, 1802, 1801, 1804, 1787, 1793, + 1798, 1799, 1795, 1789, 1802, 1803, 1796, 1791, 1806, 1805, + 1794, 1801, 1808, 1793, 1795, 1811, 1810, 1794, 1796, 1798, + 1809, 1799, 1802, 1801, 1804, 1800, 1803, 1813, 1812, 1814, + 1815, 1831, 1803, 1805, 1808, 1806, 1805, 1815, 1809, 1808, + + 1816, 1817, 1811, 1812, 1819, 1816, 0, 1809, 1810, 1818, + 1817, 1820, 1813, 1814, 1813, 1812, 1814, 1815, 1818, 1821, + 1822, 1824, 1823, 1831, 0, 0, 1819, 1816, 1817, 1829, + 1828, 1819, 1825, 1820, 1823, 1822, 1818, 1821, 1820, 1830, + 0, 1829, 0, 1824, 1826, 1825, 1821, 1822, 1824, 1823, + 1825, 1826, 1828, 1827, 1834, 1832, 1829, 1828, 1836, 1825, + 1827, 1832, 1834, 1837, 1838, 1835, 1830, 1840, 1841, 1836, + 1837, 1826, 1825, 1835, 1842, 1827, 1843, 1844, 1851, 1845, + 1827, 1834, 1832, 1843, 1839, 1836, 1839, 1827, 1854, 1838, + 1837, 1838, 1835, 1840, 1840, 1841, 1846, 1839, 1849, 1850, + + 1852, 1842, 1846, 1843, 1844, 1845, 1845, 1855, 1847, 1848, + 1851, 1839, 1856, 1839, 1847, 1848, 1855, 1870, 1857, 1858, + 1854, 1858, 1850, 1846, 1852, 1849, 1850, 1852, 1859, 1860, + 1861, 1862, 1863, 1865, 1855, 1847, 1848, 1861, 1864, 1865, + 1857, 1866, 1867, 0, 1856, 1857, 1858, 1868, 1869, 1870, + 1864, 0, 1859, 1862, 1872, 1859, 1860, 1861, 1862, 1863, + 1865, 1872, 1873, 1866, 1867, 1864, 1875, 1881, 1866, 1867, + 1869, 1873, 1874, 1868, 1868, 1869, 1871, 1871, 1871, 1874, + 1876, 1872, 1879, 1871, 1880, 1878, 1882, 1876, 1883, 1873, + 1878, 1871, 1881, 1884, 1881, 1879, 1880, 1888, 1875, 1874, + + 1883, 1885, 1882, 1871, 1871, 1871, 1887, 1876, 1890, 1879, + 1871, 1880, 1887, 1882, 1886, 1883, 1893, 1878, 1894, 1885, + 1891, 1886, 1889, 1889, 1888, 1884, 1892, 1891, 1885, 1895, + 1898, 1892, 1900, 1887, 1890, 1890, 1895, 1899, 1903, 1899, + 1902, 1886, 1893, 1893, 1903, 1894, 1904, 1891, 1906, 1889, + 1900, 1916, 1905, 1892, 1907, 1918, 1895, 1898, 1902, 1900, + 1907, 1908, 1909, 1905, 1899, 1903, 1910, 1902, 1911, 1911, + 1912, 1913, 1913, 1908, 1914, 1906, 1921, 1917, 1904, 1905, + 1925, 1907, 1909, 1916, 1910, 1914, 1920, 1918, 1908, 1909, + 1922, 1926, 1927, 1910, 1924, 1911, 1912, 1912, 1913, 1917, + + 1919, 1914, 1924, 1929, 1917, 1928, 1920, 1919, 1921, 1931, + 1929, 1932, 1925, 1920, 1927, 1922, 1930, 1922, 1926, 1927, + 1933, 1924, 1934, 1928, 1930, 1936, 1932, 1919, 1935, 1935, + 1929, 1934, 1928, 1931, 1937, 1938, 1931, 1941, 1932, 0, + 0, 1939, 1940, 1930, 1933, 1946, 1949, 1933, 1939, 1934, + 1943, 1936, 1936, 1941, 1940, 1935, 1944, 1943, 1949, 1945, + 1941, 1944, 1947, 1948, 1941, 1947, 1937, 1938, 1939, 1940, + 1951, 1948, 1946, 1949, 1953, 1952, 0, 1943, 1951, 1956, + 1941, 1945, 1954, 1944, 1957, 1959, 1945, 1955, 1958, 1947, + 1948, 1962, 0, 1958, 0, 1961, 0, 1951, 1952, 1962, + + 1953, 1953, 1952, 1954, 1958, 1955, 1956, 1957, 1961, 1954, + 1960, 1957, 1959, 1963, 1955, 1958, 1960, 1964, 1962, 1965, + 1958, 1966, 1961, 1967, 1964, 1968, 1965, 1969, 1966, 1970, + 1972, 1971, 1983, 1973, 1968, 1963, 0, 1960, 1974, 1969, + 1963, 1985, 1979, 1978, 1964, 1971, 1965, 1981, 1966, 1976, + 1978, 1970, 1968, 1987, 1969, 1967, 1970, 1972, 1971, 1973, + 1973, 1974, 1989, 1977, 1983, 1974, 1982, 1976, 1977, 1979, + 1978, 1982, 1988, 1985, 1981, 1987, 1976, 1986, 1986, 1977, + 1987, 1991, 1992, 1996, 1994, 1993, 1995, 1988, 1995, 1998, + 1977, 1999, 1997, 2000, 1989, 1977, 1991, 1997, 1982, 1988, + + 1993, 2000, 2002, 0, 1986, 1992, 2007, 2001, 1991, 1992, + 1994, 1994, 1993, 1995, 2001, 1996, 2003, 2005, 1999, 1997, + 2000, 1998, 2006, 2009, 2002, 2010, 2011, 2012, 2007, 2002, + 2006, 2003, 2005, 2007, 2001, 2013, 2014, 2015, 2016, 2018, + 2017, 0, 2013, 2003, 2005, 2022, 0, 2009, 2020, 2006, + 2009, 2010, 2010, 2011, 2012, 2024, 2023, 2018, 2015, 2026, + 2016, 2017, 2013, 2027, 2015, 2016, 2018, 2017, 2014, 2022, + 2020, 2023, 2022, 2028, 2026, 2020, 2029, 2031, 2027, 2030, + 2032, 2024, 2024, 2023, 2033, 2034, 2026, 2035, 2038, 2037, + 2027, 2036, 0, 2041, 2035, 2028, 2038, 2030, 2037, 2031, + + 2028, 2039, 2032, 2029, 2031, 2040, 2030, 2032, 2033, 2036, + 2042, 2033, 2034, 2043, 2035, 2038, 2037, 2044, 2036, 2042, + 2045, 2048, 2068, 2047, 2039, 2041, 2044, 2040, 2039, 2050, + 2048, 2043, 2040, 2045, 2047, 2049, 2050, 2042, 2051, 2052, + 2043, 2055, 2059, 2053, 2044, 2054, 2056, 2045, 2048, 2047, + 2047, 2054, 2061, 2049, 2068, 0, 2050, 2052, 2053, 2071, + 2056, 2047, 2049, 2055, 2051, 2051, 2052, 2062, 2055, 2059, + 2053, 2063, 2054, 2056, 2064, 2066, 2061, 2067, 2062, 2061, + 2070, 2069, 2063, 2072, 2071, 2064, 2071, 2066, 2073, 2076, + 2067, 2069, 2072, 2074, 2062, 2077, 2079, 2080, 2063, 2081, + + 2079, 2064, 2066, 2086, 2067, 2083, 2070, 2070, 2069, 2084, + 2072, 0, 2074, 2082, 2084, 2073, 2076, 2087, 2080, 2120, + 2074, 2077, 2077, 2079, 2080, 2083, 2082, 2085, 2089, 2086, + 2086, 2081, 2083, 2088, 2085, 2087, 2084, 2090, 2091, 2088, + 2082, 2092, 2097, 2089, 2087, 2093, 2093, 2094, 2099, 2097, + 2091, 2120, 2090, 2095, 2085, 2089, 2092, 2095, 2098, 2094, + 2088, 2100, 2098, 2099, 2090, 2091, 2102, 2101, 2092, 2097, + 2095, 2103, 2093, 2102, 2094, 2099, 2101, 2104, 2095, 2105, + 2095, 2107, 2108, 2109, 2095, 2098, 2105, 2113, 2100, 2110, + 0, 0, 2109, 2102, 2101, 2103, 0, 2095, 2103, 2104, + + 2111, 2116, 2117, 2107, 2104, 2113, 2105, 2108, 2107, 2108, + 2109, 2110, 2115, 2118, 2113, 2119, 2110, 2117, 2122, 2116, + 2111, 2115, 2123, 2119, 2124, 2125, 2125, 2111, 2116, 2117, + 2127, 2126, 2128, 2133, 2129, 2123, 0, 2130, 2118, 2115, + 2118, 2131, 2119, 2122, 2134, 2122, 2130, 0, 2135, 2123, + 2131, 2124, 2125, 2126, 2128, 2127, 2129, 2127, 2126, 2128, + 2132, 2129, 2135, 2136, 2130, 2133, 2134, 2132, 2131, 2137, + 2138, 2134, 2140, 2141, 2137, 2135, 2142, 2144, 2136, 2143, + 2140, 2146, 2145, 2147, 0, 2148, 2141, 2132, 2146, 2138, + 2136, 2149, 2152, 2144, 2145, 2153, 2156, 2138, 2154, 2140, + + 2141, 2137, 2150, 2142, 2144, 2143, 2143, 2148, 2146, 2145, + 2153, 2150, 2148, 2151, 2156, 2147, 2149, 2155, 2149, 2152, + 2157, 2151, 2153, 2156, 2154, 2154, 2158, 2160, 2161, 2150, + 2163, 2161, 2151, 2164, 2162, 2158, 2163, 2165, 2164, 0, + 2151, 2167, 2157, 2155, 2155, 2166, 2161, 2157, 2151, 2170, + 2160, 2169, 2165, 2158, 2160, 2161, 2167, 2163, 2161, 2162, + 2171, 2162, 2174, 2166, 2165, 2164, 2169, 2173, 2167, 2174, + 2175, 2170, 2166, 2176, 2177, 2178, 2170, 2179, 2169, 2180, + 2183, 2173, 2171, 2177, 2178, 2182, 2179, 2171, 2175, 2174, + 2180, 2181, 2183, 2181, 2173, 2184, 2186, 2175, 2182, 2187, + + 2176, 2177, 2178, 2188, 2179, 2189, 2180, 2183, 2194, 2190, + 2188, 2186, 2182, 2196, 2187, 2191, 2197, 2184, 2181, 2199, + 2197, 2194, 2184, 2186, 2202, 2198, 2187, 2189, 2199, 2194, + 2188, 2190, 2189, 2191, 2196, 2194, 2190, 2198, 2201, 2200, + 2196, 2200, 2191, 2197, 2203, 2204, 2199, 2206, 2194, 2205, + 2207, 2202, 2198, 2208, 2209, 2206, 2201, 2212, 2205, 2211, + 2215, 2216, 2203, 2217, 2213, 2201, 2200, 2211, 2209, 2213, + 2222, 2203, 2204, 2207, 2206, 2208, 2205, 2207, 2214, 2218, + 2208, 2209, 2223, 2214, 2224, 2225, 2211, 2217, 2219, 2212, + 2217, 2213, 2215, 2216, 2226, 2219, 2223, 2222, 2218, 2227, + + 2229, 2231, 2224, 2230, 2228, 2234, 2218, 2223, 2223, 2223, + 2214, 2224, 2225, 2228, 2227, 2219, 2232, 2233, 2236, 2238, + 2226, 2226, 2237, 2223, 0, 2230, 2227, 2231, 2231, 2237, + 2230, 2228, 2229, 2239, 2223, 2242, 2241, 2234, 2241, 2233, + 2239, 2236, 2238, 2232, 2233, 2236, 2238, 2243, 2245, 2237, + 2246, 2243, 2244, 2250, 2247, 2251, 2249, 2242, 2250, 2246, + 2239, 2248, 2242, 2241, 2244, 2247, 2252, 2256, 2248, 2254, + 2245, 0, 2253, 2259, 2243, 2245, 2256, 2246, 2249, 2244, + 2250, 2247, 2251, 2249, 2253, 2255, 2255, 2257, 2248, 2252, + 2258, 2254, 2260, 2252, 2256, 2259, 2254, 2262, 2258, 2253, + + 2259, 2261, 2257, 2264, 2274, 2265, 2260, 2266, 2267, 2364, + 2261, 0, 2255, 2265, 2257, 2266, 2267, 2258, 2270, 2260, + 2269, 2268, 2264, 2269, 2262, 2268, 2270, 2271, 2261, 2272, + 2264, 2273, 2265, 2271, 2266, 2267, 2274, 2273, 2276, 2278, + 2280, 2364, 2279, 2281, 2272, 2270, 2283, 2269, 2268, 2284, + 2276, 2285, 2282, 2278, 2271, 2279, 2272, 2289, 2273, 2282, + 2286, 2280, 2290, 2291, 2287, 2276, 2278, 2280, 2281, 2279, + 2281, 2284, 2288, 2283, 2286, 2285, 2284, 2287, 2285, 2282, + 2292, 2293, 2294, 2289, 2289, 2295, 2288, 2286, 2291, 2290, + 2291, 2287, 2296, 2293, 2298, 2297, 2294, 2299, 2297, 2288, + + 0, 2300, 2305, 2303, 2302, 2306, 2307, 2292, 2293, 2294, + 2303, 2295, 2295, 2297, 2309, 0, 2311, 2305, 2296, 2296, + 2304, 2298, 2297, 2300, 2299, 2297, 2302, 2304, 2300, 2305, + 2303, 2302, 2306, 2307, 2308, 2310, 2312, 2313, 2314, 2315, + 2316, 2309, 2308, 2311, 2310, 2318, 2320, 2304, 2312, 2322, + 2317, 2323, 2324, 2316, 2320, 2318, 2319, 2325, 2329, 2313, + 2324, 2308, 2310, 2312, 2313, 2314, 2315, 2316, 2317, 2319, + 2327, 2322, 2318, 2320, 2328, 0, 2322, 2317, 2323, 2324, + 2326, 2331, 2329, 2319, 2325, 2329, 0, 2330, 2332, 2326, + 2337, 2333, 2327, 2336, 2334, 2328, 2332, 2327, 2337, 2338, + + 2341, 2328, 2330, 2333, 2340, 2336, 2342, 2326, 2331, 2344, + 2342, 2340, 2341, 2330, 2330, 2332, 2343, 2337, 2333, 2334, + 2336, 2334, 2345, 2347, 2351, 2348, 2338, 2341, 2343, 2330, + 2346, 2340, 2344, 2342, 2349, 2352, 2344, 2348, 2346, 2353, + 2354, 0, 2352, 2343, 2359, 2347, 2349, 2355, 2357, 2345, + 2347, 2351, 2348, 2354, 2356, 2360, 2355, 2346, 2361, 2353, + 2357, 2349, 2352, 2356, 2358, 2358, 2353, 2354, 2366, 2362, + 2359, 2359, 2365, 2360, 2355, 2357, 2367, 2368, 2369, 2368, + 2371, 2356, 2360, 2361, 2362, 2361, 2362, 2365, 2370, 0, + 2366, 2358, 2369, 2362, 2370, 2366, 2362, 2374, 2367, 2365, + + 2372, 2372, 2371, 2367, 2368, 2369, 2375, 2371, 2376, 2377, + 2378, 2362, 2379, 2362, 2380, 2370, 2382, 0, 2383, 2374, + 2380, 2377, 2381, 2386, 2374, 2384, 2393, 2372, 2375, 2385, + 2376, 2385, 2395, 2375, 2381, 2376, 2377, 2386, 2387, 2388, + 2383, 2380, 2378, 2389, 2379, 2383, 2390, 2384, 2382, 2381, + 2386, 2391, 2384, 2394, 2392, 2395, 2385, 2388, 2393, 2395, + 2401, 2389, 2387, 0, 2390, 2387, 2388, 2392, 2397, 2391, + 2389, 2400, 2399, 2390, 2402, 2397, 2403, 0, 2391, 2399, + 2409, 2392, 2404, 2406, 2403, 2394, 2401, 2401, 2405, 2400, + 2407, 2409, 2407, 2410, 2411, 2397, 2412, 2407, 2400, 2399, + + 2404, 2415, 2403, 2403, 2410, 2406, 2402, 2409, 2412, 2404, + 2406, 2403, 2413, 2416, 2405, 2405, 2415, 2407, 2418, 2407, + 2410, 2411, 2417, 2412, 2416, 2421, 2420, 2423, 2415, 2422, + 2413, 2424, 2427, 2418, 2417, 2425, 2422, 2430, 2431, 2413, + 2416, 2428, 2423, 0, 2429, 2418, 2432, 2421, 2433, 2417, + 2420, 2435, 2421, 2420, 2423, 0, 2422, 2436, 2424, 2427, + 2439, 2425, 2425, 2434, 2432, 2428, 2429, 2437, 2428, 2430, + 2431, 2429, 2436, 2432, 2438, 2433, 2434, 2435, 2435, 2440, + 2437, 2442, 2438, 2441, 2436, 0, 2439, 2439, 0, 2444, + 2434, 2445, 2446, 0, 2437, 2447, 2441, 2450, 2451, 2452, + + 2453, 2438, 2448, 2442, 2450, 2449, 2455, 0, 2442, 0, + 2441, 2440, 2444, 2460, 2453, 2445, 2444, 2447, 2445, 2446, + 2448, 2451, 2447, 2449, 2450, 2451, 2452, 2453, 2455, 2448, + 2456, 2457, 2449, 2455, 2458, 2459, 2460, 2456, 2457, 2461, + 2460, 2458, 2462, 2463, 2464, 2466, 2461, 2465, 2459, 0, + 0, 2467, 2468, 2471, 2466, 2469, 2476, 2456, 2457, 2467, + 2468, 2458, 2459, 2475, 2462, 2464, 2461, 2477, 2473, 2462, + 2470, 2464, 2466, 2465, 2465, 2463, 2470, 2469, 2467, 2468, + 2471, 2474, 2469, 2473, 2478, 2475, 2477, 2480, 2476, 2482, + 2475, 2483, 2474, 0, 2477, 2473, 2484, 2470, 2485, 2486, + + 2486, 2487, 2482, 2491, 2492, 2480, 2490, 2493, 2474, 2478, + 2497, 2478, 2494, 0, 2480, 2499, 2482, 2483, 2483, 2492, + 2484, 2505, 2485, 2484, 2499, 2485, 2486, 2487, 2487, 2490, + 2494, 2492, 2501, 2490, 2493, 2491, 2502, 2497, 2507, 2494, + 2506, 2506, 2499, 2505, 2507, 2501, 2508, 2502, 2505, 2509, + 2510, 2512, 2514, 2515, 0, 2516, 2518, 0, 2517, 2501, + 2515, 2518, 2521, 2502, 2519, 2507, 2522, 2506, 2508, 2517, + 2521, 2509, 2523, 2508, 2525, 2528, 2509, 2510, 2512, 2524, + 2515, 2516, 2516, 2518, 2514, 2517, 2519, 2523, 2529, 2521, + 2522, 2519, 2527, 2522, 2524, 2530, 2528, 2531, 2533, 2523, + + 0, 2525, 2528, 2534, 2530, 2535, 2524, 2536, 2539, 2531, + 2527, 2538, 2541, 2535, 2540, 2542, 2536, 2543, 2544, 2527, + 2529, 2541, 2530, 2545, 2531, 2533, 0, 2534, 0, 0, + 2534, 2543, 2535, 2542, 2536, 2539, 2540, 2538, 2538, 2541, + 2544, 2540, 2542, 2546, 2543, 2544, 2547, 2548, 2545, 2549, + 2545, 2550, 2553, 2551, 2554, 2552, 2546, 2555, 2550, 2547, + 2551, 2556, 2548, 2558, 2559, 0, 2560, 0, 2557, 0, + 2546, 2549, 2558, 2547, 2548, 2561, 2549, 2552, 2550, 2553, + 2551, 2554, 2552, 2557, 2555, 2562, 2559, 2564, 2556, 2563, + 2558, 2559, 2560, 2560, 2564, 2557, 2566, 2568, 2565, 2567, + + 2569, 2561, 2561, 2566, 2563, 2567, 2571, 2570, 2568, 2572, + 2575, 2562, 2562, 2565, 2564, 2570, 2563, 2574, 2578, 2573, + 2581, 0, 2577, 2566, 2568, 2565, 2567, 2569, 2576, 2577, + 2575, 2579, 2574, 2571, 2570, 2573, 2572, 2575, 2579, 2582, + 2578, 2580, 2583, 2576, 2574, 2578, 2573, 2581, 2580, 2577, + 2584, 2584, 2585, 2586, 0, 2576, 2590, 2582, 2579, 2585, + 2587, 2588, 0, 2587, 2592, 2589, 2582, 2586, 2580, 2583, + 2589, 2591, 2594, 2595, 2588, 2593, 0, 2584, 2599, 2585, + 2586, 2590, 2599, 2590, 2594, 2595, 2591, 2587, 2588, 2600, + 2592, 2592, 2589, 2593, 2597, 2601, 2598, 2602, 2591, 2594, + + 2595, 2598, 2593, 2597, 2603, 2599, 2604, 2605, 2601, 2606, + 0, 2608, 2612, 2600, 2610, 0, 2600, 2613, 2611, 2602, + 2614, 2597, 2601, 2598, 2602, 2613, 2603, 2611, 2612, 2622, + 0, 2603, 2614, 2604, 2605, 2606, 2606, 2608, 2608, 2612, + 2610, 2610, 2616, 2617, 2613, 2611, 2618, 2614, 2619, 2616, + 2620, 2618, 2617, 2621, 2622, 2619, 2622, 2623, 2624, 2628, + 2621, 2626, 2625, 2629, 2623, 2631, 2632, 2624, 2620, 2616, + 2617, 2625, 2635, 2618, 2630, 2619, 2629, 2620, 2634, 2630, + 2621, 0, 2636, 2631, 2623, 2624, 2628, 2626, 2626, 2625, + 2629, 2636, 2631, 2632, 2637, 2638, 2634, 2639, 2640, 2635, + + 2644, 2630, 2641, 2637, 2638, 2634, 2642, 2643, 2644, 2636, + 2640, 2641, 2645, 2646, 2647, 2642, 2648, 2639, 2643, 2649, + 2654, 2637, 2638, 2648, 2639, 2640, 2650, 2644, 2649, 2641, + 2652, 2653, 2645, 2642, 2643, 2655, 2656, 2657, 2658, 2645, + 2646, 2647, 2665, 2648, 2655, 2657, 2649, 2650, 2656, 2659, + 2661, 2658, 2654, 2650, 2660, 2664, 2663, 2652, 2653, 2666, + 2662, 2660, 2655, 2656, 2657, 2658, 2661, 2662, 2667, 2665, + 2671, 2659, 2674, 0, 2673, 0, 2659, 2661, 2663, 2674, + 2664, 2660, 2664, 2663, 2666, 2669, 2666, 2662, 2671, 2673, + 2672, 2675, 2676, 2669, 2678, 2667, 2677, 2671, 2672, 2674, + + 2681, 2673, 2678, 2677, 2683, 2684, 2682, 2681, 2685, 2687, + 2688, 0, 2669, 2675, 2676, 2682, 2686, 2672, 2675, 2676, + 2685, 2678, 2689, 2677, 2690, 2686, 2688, 2681, 2683, 2692, + 2694, 2683, 2684, 2682, 2689, 2685, 2687, 2688, 2693, 2695, + 2696, 2692, 2701, 2686, 2704, 2699, 2698, 2690, 2700, 2689, + 2707, 2690, 2699, 2694, 2696, 2700, 2692, 2694, 2698, 2693, + 2705, 2703, 2704, 2706, 2709, 2693, 2695, 2696, 2711, 2701, + 2708, 2704, 2699, 2698, 2710, 2700, 2703, 2707, 2708, 2713, + 2715, 2712, 2722, 2705, 2720, 2723, 2711, 2705, 2703, 2706, + 2706, 2709, 2712, 2714, 2713, 2711, 2710, 2708, 2721, 2723, + + 2714, 2710, 2724, 2721, 2725, 2726, 2713, 2715, 2712, 2722, + 2720, 2720, 2723, 2729, 2730, 2727, 2724, 2728, 2725, 2733, + 2714, 2730, 2731, 2726, 2738, 2721, 2736, 0, 2737, 2724, + 2739, 2725, 2726, 2727, 2731, 2728, 0, 2738, 2742, 2740, + 2729, 2730, 2727, 2750, 2728, 2743, 2733, 2745, 2736, 2731, + 2737, 2738, 2739, 2736, 2741, 2737, 2742, 2739, 2740, 2745, + 2747, 2748, 2741, 2749, 2743, 2742, 2740, 2751, 2753, 2752, + 2750, 2754, 2743, 2755, 2745, 2749, 2753, 2756, 2759, 0, + 2757, 2741, 2747, 2748, 2760, 2775, 2761, 2747, 2748, 2757, + 2749, 2752, 2758, 2755, 2751, 2753, 2752, 2762, 2754, 2756, + + 2755, 2758, 2764, 2763, 2756, 2765, 2760, 2757, 2768, 2762, + 2759, 2760, 2761, 2761, 2769, 2770, 2771, 2775, 2772, 2758, + 2774, 2771, 2768, 2776, 2762, 2763, 0, 2773, 2782, 2764, + 2763, 2777, 2765, 2774, 2778, 2768, 2783, 2780, 2781, 2770, + 2772, 2769, 2770, 2779, 2781, 2772, 2776, 2774, 2771, 2773, + 2776, 2784, 2778, 2777, 2773, 2779, 2780, 2785, 2777, 2787, + 2782, 2778, 2791, 2788, 2780, 2781, 2793, 2789, 2783, 0, + 2779, 2796, 2785, 2784, 2794, 2795, 0, 2791, 2784, 2787, + 2796, 2797, 2798, 2806, 2785, 2788, 2787, 2799, 2793, 2791, + 2788, 2789, 2800, 2793, 2789, 2797, 2794, 2795, 2796, 2801, + + 2798, 2794, 2795, 2802, 2805, 2799, 2807, 2813, 2797, 2798, + 2816, 0, 2810, 2805, 2799, 2806, 2811, 2801, 2800, 2800, + 2810, 2812, 2814, 2811, 2815, 2802, 2801, 2807, 2816, 2812, + 2802, 2805, 2815, 2807, 2813, 2817, 2819, 2816, 2818, 2810, + 2826, 2822, 2814, 2811, 2820, 2828, 2825, 2817, 2812, 2814, + 2818, 2815, 2820, 2822, 2824, 2827, 2829, 2827, 2831, 2832, + 2833, 2824, 2817, 2819, 2838, 2818, 2830, 2826, 2822, 2825, + 2834, 2820, 2834, 2825, 2835, 2830, 2837, 2828, 2838, 2833, + 2840, 2824, 2827, 2841, 2844, 0, 2832, 2833, 2829, 2843, + 2831, 2838, 2842, 2830, 2837, 2847, 2835, 2834, 2849, 2848, + + 2850, 2835, 2843, 2837, 2852, 2845, 2853, 2841, 2848, 0, + 2841, 2844, 2840, 2854, 2857, 2842, 2843, 2845, 2855, 2842, + 2860, 2847, 2847, 2859, 2861, 2849, 2848, 2850, 2866, 2853, + 2859, 2852, 2845, 2853, 2863, 2854, 2855, 2865, 2862, 2861, + 2854, 2857, 2860, 2862, 2865, 2855, 2868, 2860, 2869, 2863, + 2859, 2861, 2870, 2871, 2866, 2866, 2875, 2872, 2873, 2876, + 2878, 2863, 2879, 2881, 2865, 2880, 2882, 2878, 2876, 2883, + 2862, 2872, 2873, 2868, 2884, 2869, 2887, 2871, 2882, 2870, + 2871, 2892, 2886, 2875, 2872, 2873, 2876, 2878, 2884, 2879, + 2881, 2880, 2880, 2882, 2885, 2886, 2883, 2888, 2893, 2889, + + 2895, 2884, 2896, 2885, 2897, 2895, 2896, 2898, 2887, 2886, + 2900, 2897, 2899, 2892, 2898, 0, 2901, 2902, 2901, 2903, + 2893, 2885, 2889, 2906, 2888, 2893, 2889, 2909, 2908, 2896, + 2913, 2897, 2895, 2899, 2898, 2911, 2912, 2911, 2919, 2899, + 2902, 0, 2900, 2901, 2902, 2906, 2903, 2908, 2914, 2914, + 2906, 2909, 2915, 2918, 2909, 2908, 2913, 2913, 2914, 2916, + 2912, 2928, 2911, 2912, 2917, 2919, 2918, 0, 2916, 2920, + 2921, 2917, 2922, 2923, 2915, 2914, 2914, 2929, 2921, 2915, + 2918, 2923, 2920, 2924, 2925, 2922, 2916, 2926, 2928, 2925, + 2927, 2917, 2926, 0, 2921, 2930, 2920, 2921, 2927, 2922, + + 2923, 2931, 2924, 2929, 2929, 2921, 2932, 0, 2933, 2934, + 2924, 2936, 2937, 2937, 2946, 2935, 2925, 2927, 2936, 2926, + 2934, 2930, 2930, 2939, 2941, 2947, 2942, 2931, 2931, 0, + 2938, 2948, 2932, 2932, 2933, 2933, 2934, 2935, 2936, 2937, + 2940, 2946, 2935, 2938, 2942, 2939, 2941, 2943, 2940, 2944, + 2939, 2941, 2947, 2942, 2943, 2948, 2944, 2938, 2948, 2949, + 2950, 2952, 2953, 2954, 2957, 0, 2958, 2940, 0, 2950, + 2955, 2964, 0, 2965, 2943, 0, 2944, 2959, 2960, 2966, + 2949, 2961, 2953, 2967, 2958, 2963, 2949, 2950, 2952, 2953, + 2954, 2957, 2955, 2958, 2963, 2959, 2960, 2955, 2964, 2961, + + 2965, 2967, 2966, 2968, 2959, 2960, 2966, 2969, 2961, 2970, + 2967, 2968, 2963, 2971, 2973, 2974, 2975, 0, 2971, 2980, + 2983, 2970, 2979, 2969, 2981, 2984, 2986, 2985, 2973, 2985, + 2968, 2988, 2989, 2974, 2969, 2986, 2970, 2981, 2984, 2975, + 2990, 2973, 2974, 2975, 2979, 2971, 2980, 2983, 2995, 2979, + 2989, 2981, 2984, 2986, 2985, 2990, 2996, 2998, 2988, 2989, + 2994, 2999, 2994, 3001, 2998, 3003, 0, 2990, 3008, 3005, + 2995, 3003, 3006, 3015, 2996, 2995, 3007, 0, 3001, 3010, + 0, 3016, 3017, 2996, 2998, 3012, 3008, 2994, 3023, 0, + 3001, 3005, 3003, 2999, 3006, 3008, 3005, 3011, 3012, 3006, + + 3015, 3010, 3007, 3007, 3013, 3018, 3010, 3013, 3016, 3017, + 3019, 3011, 3012, 3020, 3021, 3026, 3024, 3019, 3027, 3029, + 3023, 3020, 3025, 3018, 3011, 3029, 3031, 3027, 3030, 3032, + 3013, 3013, 3018, 3028, 3013, 3031, 3021, 3019, 3024, 3034, + 3020, 3021, 3026, 3024, 3025, 3027, 3029, 3036, 3028, 3025, + 3030, 3037, 3033, 3031, 3033, 3030, 3039, 3040, 3038, 3041, + 3028, 3032, 3044, 3042, 3046, 3040, 3034, 3048, 0, 3044, + 3036, 3041, 3051, 3037, 3036, 3042, 0, 3084, 3037, 3033, + 3038, 3048, 3039, 3039, 3040, 3038, 3041, 3049, 3050, 3044, + 3042, 3046, 3052, 3053, 3048, 3051, 3056, 3054, 3055, 3051, + + 3057, 3049, 3050, 3058, 3053, 3054, 3062, 3057, 3059, 3084, + 3052, 3066, 3060, 3067, 3049, 3050, 3068, 3055, 3056, 3052, + 3053, 3060, 3072, 3056, 3054, 3055, 3059, 3057, 3063, 3058, + 3058, 3061, 3061, 3062, 3067, 3059, 3063, 3074, 3066, 3060, + 3067, 3070, 3075, 3068, 3076, 3077, 0, 3070, 3074, 3072, + 3081, 3078, 3082, 3075, 3086, 3063, 3077, 3083, 3061, 3082, + 3088, 3085, 3086, 3089, 3074, 3085, 3076, 3091, 3070, 3075, + 3093, 3076, 3077, 3078, 3090, 3083, 3089, 3081, 3078, 3082, + 3100, 3086, 3090, 3096, 3083, 3095, 3088, 3088, 3085, 3097, + 3089, 3099, 3095, 3101, 3091, 3104, 3099, 3102, 3103, 3106, + + 3108, 3090, 3093, 3105, 3112, 3103, 3107, 3100, 3110, 3102, + 0, 3097, 3095, 3107, 3104, 3096, 3097, 3106, 3099, 3105, + 3101, 3109, 3104, 3110, 3102, 3103, 3106, 3111, 3113, 3109, + 3105, 3112, 3108, 3107, 3111, 3110, 3114, 3115, 0, 3116, + 3113, 3104, 3120, 3121, 3122, 3123, 3125, 3124, 3109, 0, + 3121, 0, 3129, 3126, 3111, 3113, 3132, 3120, 3134, 3128, + 3114, 3115, 3126, 3114, 3115, 3116, 3116, 3130, 0, 3120, + 3121, 3124, 3123, 0, 3124, 3131, 3122, 3136, 3125, 3129, + 3126, 3128, 3139, 3131, 3137, 3134, 3128, 3140, 3132, 3130, + 3133, 3133, 3136, 3137, 3130, 3138, 3139, 3138, 3141, 3142, + + 3133, 3143, 3131, 3145, 3136, 3146, 3141, 3147, 0, 3139, + 3142, 3137, 3151, 3148, 3140, 3150, 3149, 3133, 3133, 3143, + 3152, 3153, 3138, 3154, 3155, 3141, 3142, 3157, 3143, 3149, + 3145, 3158, 3146, 3160, 3147, 3148, 3162, 3150, 3155, 3151, + 3148, 3164, 3150, 3149, 3156, 3156, 3168, 3152, 3153, 3164, + 3154, 3155, 3166, 3158, 3168, 3170, 3167, 3166, 3158, 3157, + 3160, 3167, 3169, 3162, 3172, 3173, 3173, 3169, 3164, 3174, + 3177, 3156, 3175, 3168, 3178, 3179, 3182, 3174, 0, 3166, + 3176, 3170, 3170, 3167, 3181, 3175, 3184, 3176, 3177, 3169, + 3185, 3172, 3173, 3181, 3184, 3189, 3174, 3177, 3183, 3175, + + 3188, 3178, 3179, 3191, 3192, 3183, 3188, 3176, 3182, 3194, + 3193, 3181, 3185, 3184, 0, 3196, 3197, 3185, 3195, 0, + 0, 3200, 3189, 3193, 3198, 3183, 3192, 3188, 3201, 3202, + 3191, 3192, 3203, 3195, 3196, 3204, 3202, 3193, 3205, 3203, + 3206, 3194, 3196, 3197, 3200, 3195, 3198, 3208, 3200, 3213, + 3201, 3198, 3209, 3205, 3221, 3201, 3202, 3204, 3213, 3203, + 3209, 3206, 3204, 3210, 3211, 3205, 3208, 3206, 0, 3214, + 3210, 3211, 3215, 3215, 3208, 3216, 3213, 3225, 0, 3209, + 3214, 3216, 3215, 3217, 3219, 3220, 3221, 3222, 3224, 3226, + 3210, 3211, 3220, 3230, 3231, 3224, 3214, 3237, 0, 3215, + + 3215, 3225, 3216, 3226, 3225, 3217, 3219, 3232, 0, 3222, + 3217, 3219, 3220, 3238, 3222, 3224, 3226, 3239, 3240, 3243, + 3230, 3231, 3244, 3244, 3237, 3239, 3245, 3245, 0, 3246, + 3232, 3247, 3247, 0, 3232, 3238, 3248, 3252, 0, 3250, + 3238, 3253, 0, 3257, 3239, 3240, 3243, 3251, 0, 3254, + 3253, 3244, 0, 3260, 3261, 3245, 3246, 0, 0, 3248, + 3247, 3250, 3254, 3248, 3252, 3251, 3250, 3266, 3253, 3257, + 3257, 3258, 3259, 3267, 3251, 3260, 3254, 3262, 3258, 3259, + 3260, 3261, 3271, 3265, 3262, 3265, 3272, 3266, 3268, 3269, + 3273, 3271, 3275, 3274, 3266, 3276, 3267, 3277, 3258, 3259, + + 3267, 3269, 3278, 3279, 3262, 3282, 3268, 3281, 3272, 3271, + 3265, 3274, 3281, 3272, 3278, 3268, 3269, 3273, 3275, 3275, + 3274, 3285, 3276, 3280, 3277, 3279, 3280, 3285, 3284, 3278, + 3279, 3283, 3286, 3283, 3287, 3288, 3289, 3282, 3290, 3281, + 3284, 3280, 3292, 3288, 3291, 3293, 3295, 3298, 3285, 3300, + 3280, 3304, 3294, 3280, 3286, 3284, 3287, 3301, 3283, 3286, + 3305, 3287, 3288, 3289, 3294, 3291, 3306, 3307, 3295, 3292, + 3290, 3291, 3293, 3295, 3298, 3301, 3300, 3309, 3304, 3294, + 3310, 3311, 3312, 3315, 3301, 3313, 3313, 3305, 3316, 3317, + 3319, 3320, 3322, 3306, 3307, 3318, 3324, 3329, 3320, 3328, + + 0, 3315, 3325, 3323, 3309, 3319, 3326, 3310, 3311, 3312, + 3315, 3323, 3313, 3318, 3325, 3316, 3317, 3319, 3320, 3322, + 3326, 3327, 3318, 3324, 3329, 3328, 3328, 3331, 3332, 3325, + 3323, 3335, 3336, 3326, 3337, 3337, 3327, 3338, 3339, 3331, + 3335, 3342, 3341, 3345, 3343, 3344, 0, 3339, 3327, 3347, + 0, 3345, 3353, 3346, 3331, 3332, 3336, 3343, 3335, 3336, + 3347, 3337, 3346, 3338, 3338, 3339, 3341, 3344, 3349, 3341, + 3345, 3343, 3344, 3342, 3350, 3353, 3347, 3366, 3354, 3353, + 3346, 3357, 3357, 3367, 3370, 3371, 3372, 3374, 3377, 3349, + 3354, 0, 3350, 3376, 3378, 3349, 3379, 3376, 3370, 3366, + + 3384, 3350, 0, 3379, 3366, 3354, 3377, 3367, 3357, 3381, + 3367, 3370, 3371, 3372, 3374, 3377, 3384, 3378, 3385, 3386, + 3376, 3378, 3381, 3379, 3383, 3387, 3390, 3384, 3383, 3388, + 3391, 3392, 3397, 3389, 3390, 0, 3381, 3387, 3394, 3391, + 3385, 3393, 3392, 3393, 3386, 3385, 3386, 3389, 3395, 3396, + 3394, 3383, 3387, 3390, 3397, 3388, 3388, 3391, 3392, 3397, + 3389, 3398, 3399, 3400, 3396, 3394, 3395, 3398, 3393, 3402, + 3401, 3407, 3406, 3408, 3409, 3395, 3396, 3401, 3407, 3410, + 3421, 3411, 3412, 3413, 3399, 3406, 3414, 3416, 3398, 3399, + 3400, 3402, 3409, 3417, 3414, 3415, 3402, 3401, 3407, 3406, + + 3408, 3409, 3415, 3418, 3423, 3420, 3410, 3411, 3411, 3412, + 3413, 3416, 3421, 3414, 3416, 3417, 3419, 3420, 3419, 3423, + 3417, 3422, 3415, 3424, 3425, 3418, 3426, 3427, 3429, 3430, + 3418, 3423, 3420, 3426, 3422, 3432, 3431, 3434, 3436, 3439, + 3441, 3430, 3440, 3419, 3431, 3424, 3443, 3436, 3422, 3434, + 3424, 3425, 3442, 3426, 3427, 3429, 3430, 3444, 3445, 3441, + 3442, 3446, 3432, 3431, 3434, 3436, 3439, 3441, 3440, 3440, + 3448, 3445, 3447, 3449, 3451, 3446, 3454, 3455, 3443, 3442, + 3447, 3457, 3454, 3458, 3455, 3445, 3460, 3461, 3446, 3444, + 3462, 3463, 3448, 3460, 3457, 3468, 3476, 3448, 3462, 3447, + + 3449, 3451, 3464, 3454, 3455, 3463, 3458, 3465, 3457, 3461, + 3458, 3466, 3472, 3460, 3461, 3465, 3464, 3462, 3463, 3467, + 3471, 3472, 3468, 3473, 3474, 3484, 3475, 3471, 3476, 3464, + 3477, 3473, 3478, 3466, 3465, 0, 3479, 3481, 3466, 3472, + 3480, 3467, 3482, 3485, 3486, 3481, 3467, 3471, 3475, 3488, + 3473, 3474, 3484, 3475, 3478, 3490, 3477, 3477, 3479, 3478, + 3489, 3491, 3480, 3479, 3481, 3485, 3493, 3480, 3489, 3491, + 3485, 3486, 3488, 3492, 3482, 3490, 3488, 3494, 3495, 0, + 3497, 3492, 3490, 3499, 0, 3494, 3502, 3489, 3491, 3501, + 3500, 3503, 3495, 3500, 3502, 3504, 0, 3505, 3493, 3503, + + 3492, 3507, 0, 3506, 3494, 3495, 3497, 3497, 3500, 3504, + 3499, 3501, 3510, 3502, 3512, 3507, 3501, 3500, 3503, 3513, + 3500, 3511, 3504, 3505, 3505, 3506, 3509, 3509, 3507, 3511, + 3506, 3515, 3514, 3517, 3516, 3518, 3520, 0, 3510, 3510, + 3512, 3512, 3516, 3519, 3521, 3513, 3513, 3522, 3511, 3527, + 3524, 3515, 0, 3509, 3514, 3536, 0, 3518, 3515, 3514, + 3517, 3516, 3518, 3520, 3521, 3523, 3530, 3522, 3519, 3531, + 3519, 3521, 3524, 3523, 3522, 3525, 3527, 3524, 3528, 3532, + 3540, 3533, 3536, 3525, 3534, 3543, 3528, 3532, 3530, 3533, + 3537, 3531, 3523, 3530, 3539, 3538, 3531, 3544, 3537, 3541, + + 3553, 3547, 3525, 3538, 3554, 3528, 3532, 3540, 3533, 3545, + 3534, 3534, 3543, 3550, 0, 0, 0, 3537, 0, 3541, + 3539, 3539, 3538, 3547, 3544, 3551, 3541, 3553, 3547, 3545, + 3552, 3554, 0, 3551, 0, 3550, 3545, 0, 3552, 0, + 3550, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3551, 0, 0, 0, 0, 3552, 3558, 3558, + 3558, 3558, 3558, 3558, 3558, 3559, 3559, 3559, 3559, 3559, + 3559, 3559, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3561, + 3561, 3561, 3561, 3561, 3561, 3561, 3562, 3562, 3562, 3562, + 3562, 3562, 3562, 3563, 3563, 3563, 3563, 3563, 3563, 3563, + + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3566, 3566, 0, + 3566, 3566, 3566, 3566, 3567, 3567, 0, 0, 0, 3567, + 3567, 3568, 3568, 0, 0, 3568, 0, 3568, 3569, 0, + 0, 0, 0, 0, 3569, 3570, 3570, 0, 0, 0, + 3570, 3570, 3571, 0, 0, 0, 0, 0, 3571, 3572, + 3572, 0, 3572, 3572, 3572, 3572, 3573, 0, 0, 0, + 0, 0, 3573, 3574, 3574, 0, 0, 0, 3574, 3574, + 3575, 3575, 0, 3575, 3575, 3575, 3575, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, + 3557, 3557, 3557, 3557 } ; static yy_state_type yy_last_accepting_state; @@ -4029,7 +4060,7 @@ static void config_end_include(void) } #endif -#line 4030 "" +#line 4061 "" #define YY_NO_INPUT 1 #line 191 "util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -4038,9 +4069,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 4039 "" +#line 4070 "" -#line 4041 "" +#line 4072 "" #define INITIAL 0 #define quotedstring 1 @@ -4264,7 +4295,7 @@ YY_DECL { #line 211 "util/configlexer.lex" -#line 4265 "" +#line 4296 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -4297,13 +4328,13 @@ YY_DECL 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 >= 3524 ) + if ( yy_current_state >= 3558 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 10077 ); + while ( yy_base[yy_current_state] != 10178 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -5008,12 +5039,12 @@ YY_RULE_SETUP case 136: YY_RULE_SETUP #line 350 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) } YY_BREAK case 137: YY_RULE_SETUP #line 351 "util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 138: YY_RULE_SETUP @@ -5023,989 +5054,1004 @@ YY_RULE_SETUP case 139: YY_RULE_SETUP #line 353 "util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 140: YY_RULE_SETUP #line 354 "util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 141: YY_RULE_SETUP #line 355 "util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 142: YY_RULE_SETUP #line 356 "util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 143: YY_RULE_SETUP #line 357 "util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 144: YY_RULE_SETUP #line 358 "util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 145: YY_RULE_SETUP #line 359 "util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 146: YY_RULE_SETUP #line 360 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 147: YY_RULE_SETUP #line 361 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 148: YY_RULE_SETUP #line 362 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 149: YY_RULE_SETUP #line 363 "util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 150: YY_RULE_SETUP #line 364 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 151: YY_RULE_SETUP #line 365 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 152: YY_RULE_SETUP #line 366 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 153: YY_RULE_SETUP #line 367 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "util/configlexer.lex" -{ YDVAR(1, VAR_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HTTP_USER_AGENT) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_MAX_RESTART) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_MAX_RESTART) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 185: YY_RULE_SETUP #line 399 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 186: YY_RULE_SETUP #line 400 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 187: YY_RULE_SETUP #line 401 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 188: YY_RULE_SETUP #line 402 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 189: YY_RULE_SETUP #line 403 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 190: YY_RULE_SETUP #line 404 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 191: YY_RULE_SETUP #line 405 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 192: YY_RULE_SETUP #line 406 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 193: YY_RULE_SETUP #line 407 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 194: YY_RULE_SETUP #line 408 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 195: YY_RULE_SETUP #line 409 "util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 196: YY_RULE_SETUP #line 410 "util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 197: YY_RULE_SETUP -#line 412 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +#line 411 "util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_CHECK) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } +{ YDVAR(1, VAR_ZONEMD_CHECK) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 256: YY_RULE_SETUP #line 471 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 257: YY_RULE_SETUP #line 472 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 258: YY_RULE_SETUP #line 473 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 259: YY_RULE_SETUP -#line 475 "util/configlexer.lex" +#line 474 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 260: YY_RULE_SETUP -#line 477 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 476 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 261: YY_RULE_SETUP #line 478 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 262: YY_RULE_SETUP #line 479 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 263: YY_RULE_SETUP #line 480 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 264: YY_RULE_SETUP #line 481 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 265: YY_RULE_SETUP -#line 483 "util/configlexer.lex" +#line 482 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 266: YY_RULE_SETUP -#line 485 "util/configlexer.lex" +#line 484 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 267: YY_RULE_SETUP -#line 487 "util/configlexer.lex" +#line 486 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 268: YY_RULE_SETUP -#line 489 "util/configlexer.lex" +#line 488 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 269: YY_RULE_SETUP -#line 491 "util/configlexer.lex" +#line 490 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 270: YY_RULE_SETUP -#line 493 "util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 492 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 271: YY_RULE_SETUP #line 494 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 272: YY_RULE_SETUP #line 495 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 273: YY_RULE_SETUP #line 496 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 274: YY_RULE_SETUP #line 497 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 275: YY_RULE_SETUP #line 498 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "util/configlexer.lex" -{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } YY_BREAK case 285: YY_RULE_SETUP #line 508 "util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 286: YY_RULE_SETUP #line 509 "util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 287: YY_RULE_SETUP #line 510 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 288: YY_RULE_SETUP #line 511 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 289: YY_RULE_SETUP #line 512 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 290: YY_RULE_SETUP #line 513 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 291: YY_RULE_SETUP #line 514 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 292: YY_RULE_SETUP #line 515 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 293: YY_RULE_SETUP #line 516 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 294: YY_RULE_SETUP #line 517 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 295: YY_RULE_SETUP #line 518 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 296: YY_RULE_SETUP #line 519 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 297: YY_RULE_SETUP #line 520 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 298: YY_RULE_SETUP -#line 522 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 521 "util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 299: YY_RULE_SETUP -#line 524 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 522 "util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 300: YY_RULE_SETUP -#line 525 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 523 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 301: YY_RULE_SETUP -#line 526 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES) } +#line 525 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 308: YY_RULE_SETUP #line 533 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 309: YY_RULE_SETUP #line 534 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 310: YY_RULE_SETUP #line 535 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 311: YY_RULE_SETUP #line 536 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 312: YY_RULE_SETUP #line 537 "util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 313: YY_RULE_SETUP #line 538 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 314: YY_RULE_SETUP #line 539 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 315: YY_RULE_SETUP #line 540 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 316: YY_RULE_SETUP #line 541 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 317: YY_RULE_SETUP #line 542 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 318: YY_RULE_SETUP #line 543 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 319: YY_RULE_SETUP #line 544 "util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 320: YY_RULE_SETUP #line 545 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 321: YY_RULE_SETUP #line 546 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 322: YY_RULE_SETUP #line 547 "util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 323: YY_RULE_SETUP #line 548 "util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 324: YY_RULE_SETUP #line 549 "util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 325: YY_RULE_SETUP #line 550 "util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 326: YY_RULE_SETUP #line 551 "util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 327: -/* rule 327 can match eol */ YY_RULE_SETUP #line 552 "util/configlexer.lex" +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } + YY_BREAK +case 328: +YY_RULE_SETUP +#line 553 "util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } + YY_BREAK +case 329: +YY_RULE_SETUP +#line 554 "util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 330: +/* rule 330 can match eol */ +YY_RULE_SETUP +#line 555 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 328: +case 331: YY_RULE_SETUP -#line 555 "util/configlexer.lex" +#line 558 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 556 "util/configlexer.lex" +#line 559 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 329: +case 332: YY_RULE_SETUP -#line 561 "util/configlexer.lex" +#line 564 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 330: -/* rule 330 can match eol */ +case 333: +/* rule 333 can match eol */ YY_RULE_SETUP -#line 562 "util/configlexer.lex" +#line 565 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 331: +case 334: YY_RULE_SETUP -#line 564 "util/configlexer.lex" +#line 567 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -6018,34 +6064,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 332: +case 335: YY_RULE_SETUP -#line 576 "util/configlexer.lex" +#line 579 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 577 "util/configlexer.lex" +#line 580 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 333: +case 336: YY_RULE_SETUP -#line 582 "util/configlexer.lex" +#line 585 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 334: -/* rule 334 can match eol */ +case 337: +/* rule 337 can match eol */ YY_RULE_SETUP -#line 583 "util/configlexer.lex" +#line 586 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 335: +case 338: YY_RULE_SETUP -#line 585 "util/configlexer.lex" +#line 588 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -6058,38 +6104,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 336: +case 339: YY_RULE_SETUP -#line 597 "util/configlexer.lex" +#line 600 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 599 "util/configlexer.lex" +#line 602 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 337: -YY_RULE_SETUP -#line 603 "util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 338: -/* rule 338 can match eol */ -YY_RULE_SETUP -#line 604 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK -case 339: -YY_RULE_SETUP -#line 605 "util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } - YY_BREAK case 340: YY_RULE_SETUP #line 606 "util/configlexer.lex" +{ LEXOUT(("ISP ")); /* ignore */ } + YY_BREAK +case 341: +/* rule 341 can match eol */ +YY_RULE_SETUP +#line 607 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 342: +YY_RULE_SETUP +#line 608 "util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 343: +YY_RULE_SETUP +#line 609 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -6097,27 +6143,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 611 "util/configlexer.lex" +#line 614 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 341: +case 344: YY_RULE_SETUP -#line 615 "util/configlexer.lex" +#line 618 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 342: -/* rule 342 can match eol */ +case 345: +/* rule 345 can match eol */ YY_RULE_SETUP -#line 616 "util/configlexer.lex" +#line 619 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 343: +case 346: YY_RULE_SETUP -#line 618 "util/configlexer.lex" +#line 621 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -6127,7 +6173,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 624 "util/configlexer.lex" +#line 627 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -6142,39 +6188,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 344: +case 347: YY_RULE_SETUP -#line 638 "util/configlexer.lex" +#line 641 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 641 "util/configlexer.lex" +#line 644 "util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 345: -YY_RULE_SETUP -#line 645 "util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK -case 346: -/* rule 346 can match eol */ -YY_RULE_SETUP -#line 646 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } - YY_BREAK -case 347: -YY_RULE_SETUP -#line 647 "util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } - YY_BREAK case 348: YY_RULE_SETUP #line 648 "util/configlexer.lex" +{ LEXOUT(("ITSP ")); /* ignore */ } + YY_BREAK +case 349: +/* rule 349 can match eol */ +YY_RULE_SETUP +#line 649 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +case 350: +YY_RULE_SETUP +#line 650 "util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 351: +YY_RULE_SETUP +#line 651 "util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -6183,29 +6229,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 654 "util/configlexer.lex" +#line 657 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 349: +case 352: YY_RULE_SETUP -#line 658 "util/configlexer.lex" +#line 661 "util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 350: -/* rule 350 can match eol */ +case 353: +/* rule 353 can match eol */ YY_RULE_SETUP -#line 659 "util/configlexer.lex" +#line 662 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 351: +case 354: YY_RULE_SETUP -#line 663 "util/configlexer.lex" +#line 666 "util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -6214,33 +6260,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 352: +case 355: YY_RULE_SETUP -#line 671 "util/configlexer.lex" +#line 674 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 353: +case 356: YY_RULE_SETUP -#line 675 "util/configlexer.lex" +#line 678 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 354: +case 357: YY_RULE_SETUP -#line 679 "util/configlexer.lex" +#line 682 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 355: +case 358: YY_RULE_SETUP -#line 683 "util/configlexer.lex" +#line 686 "util/configlexer.lex" ECHO; YY_BREAK -#line 6241 "" +#line 6287 "" case YY_END_OF_BUFFER: { @@ -6535,7 +6581,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 >= 3524 ) + if ( yy_current_state >= 3558 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -6563,11 +6609,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 >= 3524 ) + if ( yy_current_state >= 3558 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3523); + yy_is_jam = (yy_current_state == 3557); return yy_is_jam ? 0 : yy_current_state; } @@ -7206,6 +7252,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 683 "util/configlexer.lex" +#line 686 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 71da92422f30..34a0e5dd9cb0 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -347,6 +347,7 @@ rpz-action-override{COLON} { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } rpz-cname-override{COLON} { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } rpz-log{COLON} { YDVAR(1, VAR_RPZ_LOG) } rpz-log-name{COLON} { YDVAR(1, VAR_RPZ_LOG_NAME) } +rpz-signal-nxdomain-ra{COLON} { YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) } zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } master{COLON} { YDVAR(1, VAR_MASTER) } primary{COLON} { YDVAR(1, VAR_MASTER) } @@ -501,6 +502,8 @@ ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) } +ip-ratelimit-backoff{COLON} { YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } +ratelimit-backoff{COLON} { YDVAR(1, VAR_RATELIMIT_BACKOFF) } outbound-msg-retry{COLON} { YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } low-rtt{COLON} { YDVAR(1, VAR_LOW_RTT) } fast-server-num{COLON} { YDVAR(1, VAR_FAST_SERVER_NUM) } diff --git a/util/configparser.c b/util/configparser.c index d03e52fa1f0d..6635b2d63e3a 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -343,121 +343,124 @@ extern int yydebug; VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN */ VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR */ VAR_RATELIMIT_FACTOR = 460, /* VAR_RATELIMIT_FACTOR */ - VAR_SEND_CLIENT_SUBNET = 461, /* VAR_SEND_CLIENT_SUBNET */ - VAR_CLIENT_SUBNET_ZONE = 462, /* VAR_CLIENT_SUBNET_ZONE */ - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 463, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ - VAR_CLIENT_SUBNET_OPCODE = 464, /* VAR_CLIENT_SUBNET_OPCODE */ - VAR_MAX_CLIENT_SUBNET_IPV4 = 465, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ - VAR_MAX_CLIENT_SUBNET_IPV6 = 466, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ - VAR_MIN_CLIENT_SUBNET_IPV4 = 467, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ - VAR_MIN_CLIENT_SUBNET_IPV6 = 468, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ - VAR_MAX_ECS_TREE_SIZE_IPV4 = 469, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ - VAR_MAX_ECS_TREE_SIZE_IPV6 = 470, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ - VAR_CAPS_WHITELIST = 471, /* VAR_CAPS_WHITELIST */ - VAR_CACHE_MAX_NEGATIVE_TTL = 472, /* VAR_CACHE_MAX_NEGATIVE_TTL */ - VAR_PERMIT_SMALL_HOLDDOWN = 473, /* VAR_PERMIT_SMALL_HOLDDOWN */ - VAR_QNAME_MINIMISATION = 474, /* VAR_QNAME_MINIMISATION */ - VAR_QNAME_MINIMISATION_STRICT = 475, /* VAR_QNAME_MINIMISATION_STRICT */ - VAR_IP_FREEBIND = 476, /* VAR_IP_FREEBIND */ - VAR_DEFINE_TAG = 477, /* VAR_DEFINE_TAG */ - VAR_LOCAL_ZONE_TAG = 478, /* VAR_LOCAL_ZONE_TAG */ - VAR_ACCESS_CONTROL_TAG = 479, /* VAR_ACCESS_CONTROL_TAG */ - VAR_LOCAL_ZONE_OVERRIDE = 480, /* VAR_LOCAL_ZONE_OVERRIDE */ - VAR_ACCESS_CONTROL_TAG_ACTION = 481, /* VAR_ACCESS_CONTROL_TAG_ACTION */ - VAR_ACCESS_CONTROL_TAG_DATA = 482, /* VAR_ACCESS_CONTROL_TAG_DATA */ - VAR_VIEW = 483, /* VAR_VIEW */ - VAR_ACCESS_CONTROL_VIEW = 484, /* VAR_ACCESS_CONTROL_VIEW */ - VAR_VIEW_FIRST = 485, /* VAR_VIEW_FIRST */ - VAR_SERVE_EXPIRED = 486, /* VAR_SERVE_EXPIRED */ - VAR_SERVE_EXPIRED_TTL = 487, /* VAR_SERVE_EXPIRED_TTL */ - VAR_SERVE_EXPIRED_TTL_RESET = 488, /* VAR_SERVE_EXPIRED_TTL_RESET */ - VAR_SERVE_EXPIRED_REPLY_TTL = 489, /* VAR_SERVE_EXPIRED_REPLY_TTL */ - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 490, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ - VAR_SERVE_ORIGINAL_TTL = 491, /* VAR_SERVE_ORIGINAL_TTL */ - VAR_FAKE_DSA = 492, /* VAR_FAKE_DSA */ - VAR_FAKE_SHA1 = 493, /* VAR_FAKE_SHA1 */ - VAR_LOG_IDENTITY = 494, /* VAR_LOG_IDENTITY */ - VAR_HIDE_TRUSTANCHOR = 495, /* VAR_HIDE_TRUSTANCHOR */ - VAR_HIDE_HTTP_USER_AGENT = 496, /* VAR_HIDE_HTTP_USER_AGENT */ - VAR_HTTP_USER_AGENT = 497, /* VAR_HTTP_USER_AGENT */ - VAR_TRUST_ANCHOR_SIGNALING = 498, /* VAR_TRUST_ANCHOR_SIGNALING */ - VAR_AGGRESSIVE_NSEC = 499, /* VAR_AGGRESSIVE_NSEC */ - VAR_USE_SYSTEMD = 500, /* VAR_USE_SYSTEMD */ - VAR_SHM_ENABLE = 501, /* VAR_SHM_ENABLE */ - VAR_SHM_KEY = 502, /* VAR_SHM_KEY */ - VAR_ROOT_KEY_SENTINEL = 503, /* VAR_ROOT_KEY_SENTINEL */ - VAR_DNSCRYPT = 504, /* VAR_DNSCRYPT */ - VAR_DNSCRYPT_ENABLE = 505, /* VAR_DNSCRYPT_ENABLE */ - VAR_DNSCRYPT_PORT = 506, /* VAR_DNSCRYPT_PORT */ - VAR_DNSCRYPT_PROVIDER = 507, /* VAR_DNSCRYPT_PROVIDER */ - VAR_DNSCRYPT_SECRET_KEY = 508, /* VAR_DNSCRYPT_SECRET_KEY */ - VAR_DNSCRYPT_PROVIDER_CERT = 509, /* VAR_DNSCRYPT_PROVIDER_CERT */ - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 510, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 511, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 512, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 513, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 514, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ - VAR_PAD_RESPONSES = 515, /* VAR_PAD_RESPONSES */ - VAR_PAD_RESPONSES_BLOCK_SIZE = 516, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ - VAR_PAD_QUERIES = 517, /* VAR_PAD_QUERIES */ - VAR_PAD_QUERIES_BLOCK_SIZE = 518, /* VAR_PAD_QUERIES_BLOCK_SIZE */ - VAR_IPSECMOD_ENABLED = 519, /* VAR_IPSECMOD_ENABLED */ - VAR_IPSECMOD_HOOK = 520, /* VAR_IPSECMOD_HOOK */ - VAR_IPSECMOD_IGNORE_BOGUS = 521, /* VAR_IPSECMOD_IGNORE_BOGUS */ - VAR_IPSECMOD_MAX_TTL = 522, /* VAR_IPSECMOD_MAX_TTL */ - VAR_IPSECMOD_WHITELIST = 523, /* VAR_IPSECMOD_WHITELIST */ - VAR_IPSECMOD_STRICT = 524, /* VAR_IPSECMOD_STRICT */ - VAR_CACHEDB = 525, /* VAR_CACHEDB */ - VAR_CACHEDB_BACKEND = 526, /* VAR_CACHEDB_BACKEND */ - VAR_CACHEDB_SECRETSEED = 527, /* VAR_CACHEDB_SECRETSEED */ - VAR_CACHEDB_REDISHOST = 528, /* VAR_CACHEDB_REDISHOST */ - VAR_CACHEDB_REDISPORT = 529, /* VAR_CACHEDB_REDISPORT */ - VAR_CACHEDB_REDISTIMEOUT = 530, /* VAR_CACHEDB_REDISTIMEOUT */ - VAR_CACHEDB_REDISEXPIRERECORDS = 531, /* VAR_CACHEDB_REDISEXPIRERECORDS */ - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 532, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ - VAR_FOR_UPSTREAM = 533, /* VAR_FOR_UPSTREAM */ - VAR_AUTH_ZONE = 534, /* VAR_AUTH_ZONE */ - VAR_ZONEFILE = 535, /* VAR_ZONEFILE */ - VAR_MASTER = 536, /* VAR_MASTER */ - VAR_URL = 537, /* VAR_URL */ - VAR_FOR_DOWNSTREAM = 538, /* VAR_FOR_DOWNSTREAM */ - VAR_FALLBACK_ENABLED = 539, /* VAR_FALLBACK_ENABLED */ - VAR_TLS_ADDITIONAL_PORT = 540, /* VAR_TLS_ADDITIONAL_PORT */ - VAR_LOW_RTT = 541, /* VAR_LOW_RTT */ - VAR_LOW_RTT_PERMIL = 542, /* VAR_LOW_RTT_PERMIL */ - VAR_FAST_SERVER_PERMIL = 543, /* VAR_FAST_SERVER_PERMIL */ - VAR_FAST_SERVER_NUM = 544, /* VAR_FAST_SERVER_NUM */ - VAR_ALLOW_NOTIFY = 545, /* VAR_ALLOW_NOTIFY */ - VAR_TLS_WIN_CERT = 546, /* VAR_TLS_WIN_CERT */ - VAR_TCP_CONNECTION_LIMIT = 547, /* VAR_TCP_CONNECTION_LIMIT */ - VAR_FORWARD_NO_CACHE = 548, /* VAR_FORWARD_NO_CACHE */ - VAR_STUB_NO_CACHE = 549, /* VAR_STUB_NO_CACHE */ - VAR_LOG_SERVFAIL = 550, /* VAR_LOG_SERVFAIL */ - VAR_DENY_ANY = 551, /* VAR_DENY_ANY */ - VAR_UNKNOWN_SERVER_TIME_LIMIT = 552, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - VAR_LOG_TAG_QUERYREPLY = 553, /* VAR_LOG_TAG_QUERYREPLY */ - VAR_STREAM_WAIT_SIZE = 554, /* VAR_STREAM_WAIT_SIZE */ - VAR_TLS_CIPHERS = 555, /* VAR_TLS_CIPHERS */ - VAR_TLS_CIPHERSUITES = 556, /* VAR_TLS_CIPHERSUITES */ - VAR_TLS_USE_SNI = 557, /* VAR_TLS_USE_SNI */ - VAR_IPSET = 558, /* VAR_IPSET */ - VAR_IPSET_NAME_V4 = 559, /* VAR_IPSET_NAME_V4 */ - VAR_IPSET_NAME_V6 = 560, /* VAR_IPSET_NAME_V6 */ - VAR_TLS_SESSION_TICKET_KEYS = 561, /* VAR_TLS_SESSION_TICKET_KEYS */ - VAR_RPZ = 562, /* VAR_RPZ */ - VAR_TAGS = 563, /* VAR_TAGS */ - VAR_RPZ_ACTION_OVERRIDE = 564, /* VAR_RPZ_ACTION_OVERRIDE */ - VAR_RPZ_CNAME_OVERRIDE = 565, /* VAR_RPZ_CNAME_OVERRIDE */ - VAR_RPZ_LOG = 566, /* VAR_RPZ_LOG */ - VAR_RPZ_LOG_NAME = 567, /* VAR_RPZ_LOG_NAME */ - VAR_DYNLIB = 568, /* VAR_DYNLIB */ - VAR_DYNLIB_FILE = 569, /* VAR_DYNLIB_FILE */ - VAR_EDNS_CLIENT_STRING = 570, /* VAR_EDNS_CLIENT_STRING */ - VAR_EDNS_CLIENT_STRING_OPCODE = 571, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - VAR_NSID = 572, /* VAR_NSID */ - VAR_ZONEMD_PERMISSIVE_MODE = 573, /* VAR_ZONEMD_PERMISSIVE_MODE */ - VAR_ZONEMD_CHECK = 574, /* VAR_ZONEMD_CHECK */ - VAR_ZONEMD_REJECT_ABSENCE = 575 /* VAR_ZONEMD_REJECT_ABSENCE */ + VAR_IP_RATELIMIT_BACKOFF = 461, /* VAR_IP_RATELIMIT_BACKOFF */ + VAR_RATELIMIT_BACKOFF = 462, /* VAR_RATELIMIT_BACKOFF */ + VAR_SEND_CLIENT_SUBNET = 463, /* VAR_SEND_CLIENT_SUBNET */ + VAR_CLIENT_SUBNET_ZONE = 464, /* VAR_CLIENT_SUBNET_ZONE */ + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 465, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + VAR_CLIENT_SUBNET_OPCODE = 466, /* VAR_CLIENT_SUBNET_OPCODE */ + VAR_MAX_CLIENT_SUBNET_IPV4 = 467, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + VAR_MAX_CLIENT_SUBNET_IPV6 = 468, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + VAR_MIN_CLIENT_SUBNET_IPV4 = 469, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + VAR_MIN_CLIENT_SUBNET_IPV6 = 470, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + VAR_MAX_ECS_TREE_SIZE_IPV4 = 471, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + VAR_MAX_ECS_TREE_SIZE_IPV6 = 472, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + VAR_CAPS_WHITELIST = 473, /* VAR_CAPS_WHITELIST */ + VAR_CACHE_MAX_NEGATIVE_TTL = 474, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + VAR_PERMIT_SMALL_HOLDDOWN = 475, /* VAR_PERMIT_SMALL_HOLDDOWN */ + VAR_QNAME_MINIMISATION = 476, /* VAR_QNAME_MINIMISATION */ + VAR_QNAME_MINIMISATION_STRICT = 477, /* VAR_QNAME_MINIMISATION_STRICT */ + VAR_IP_FREEBIND = 478, /* VAR_IP_FREEBIND */ + VAR_DEFINE_TAG = 479, /* VAR_DEFINE_TAG */ + VAR_LOCAL_ZONE_TAG = 480, /* VAR_LOCAL_ZONE_TAG */ + VAR_ACCESS_CONTROL_TAG = 481, /* VAR_ACCESS_CONTROL_TAG */ + VAR_LOCAL_ZONE_OVERRIDE = 482, /* VAR_LOCAL_ZONE_OVERRIDE */ + VAR_ACCESS_CONTROL_TAG_ACTION = 483, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + VAR_ACCESS_CONTROL_TAG_DATA = 484, /* VAR_ACCESS_CONTROL_TAG_DATA */ + VAR_VIEW = 485, /* VAR_VIEW */ + VAR_ACCESS_CONTROL_VIEW = 486, /* VAR_ACCESS_CONTROL_VIEW */ + VAR_VIEW_FIRST = 487, /* VAR_VIEW_FIRST */ + VAR_SERVE_EXPIRED = 488, /* VAR_SERVE_EXPIRED */ + VAR_SERVE_EXPIRED_TTL = 489, /* VAR_SERVE_EXPIRED_TTL */ + VAR_SERVE_EXPIRED_TTL_RESET = 490, /* VAR_SERVE_EXPIRED_TTL_RESET */ + VAR_SERVE_EXPIRED_REPLY_TTL = 491, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + VAR_SERVE_ORIGINAL_TTL = 493, /* VAR_SERVE_ORIGINAL_TTL */ + VAR_FAKE_DSA = 494, /* VAR_FAKE_DSA */ + VAR_FAKE_SHA1 = 495, /* VAR_FAKE_SHA1 */ + VAR_LOG_IDENTITY = 496, /* VAR_LOG_IDENTITY */ + VAR_HIDE_TRUSTANCHOR = 497, /* VAR_HIDE_TRUSTANCHOR */ + VAR_HIDE_HTTP_USER_AGENT = 498, /* VAR_HIDE_HTTP_USER_AGENT */ + VAR_HTTP_USER_AGENT = 499, /* VAR_HTTP_USER_AGENT */ + VAR_TRUST_ANCHOR_SIGNALING = 500, /* VAR_TRUST_ANCHOR_SIGNALING */ + VAR_AGGRESSIVE_NSEC = 501, /* VAR_AGGRESSIVE_NSEC */ + VAR_USE_SYSTEMD = 502, /* VAR_USE_SYSTEMD */ + VAR_SHM_ENABLE = 503, /* VAR_SHM_ENABLE */ + VAR_SHM_KEY = 504, /* VAR_SHM_KEY */ + VAR_ROOT_KEY_SENTINEL = 505, /* VAR_ROOT_KEY_SENTINEL */ + VAR_DNSCRYPT = 506, /* VAR_DNSCRYPT */ + VAR_DNSCRYPT_ENABLE = 507, /* VAR_DNSCRYPT_ENABLE */ + VAR_DNSCRYPT_PORT = 508, /* VAR_DNSCRYPT_PORT */ + VAR_DNSCRYPT_PROVIDER = 509, /* VAR_DNSCRYPT_PROVIDER */ + VAR_DNSCRYPT_SECRET_KEY = 510, /* VAR_DNSCRYPT_SECRET_KEY */ + VAR_DNSCRYPT_PROVIDER_CERT = 511, /* VAR_DNSCRYPT_PROVIDER_CERT */ + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 512, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 513, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 514, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 515, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 516, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + VAR_PAD_RESPONSES = 517, /* VAR_PAD_RESPONSES */ + VAR_PAD_RESPONSES_BLOCK_SIZE = 518, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ + VAR_PAD_QUERIES = 519, /* VAR_PAD_QUERIES */ + VAR_PAD_QUERIES_BLOCK_SIZE = 520, /* VAR_PAD_QUERIES_BLOCK_SIZE */ + VAR_IPSECMOD_ENABLED = 521, /* VAR_IPSECMOD_ENABLED */ + VAR_IPSECMOD_HOOK = 522, /* VAR_IPSECMOD_HOOK */ + VAR_IPSECMOD_IGNORE_BOGUS = 523, /* VAR_IPSECMOD_IGNORE_BOGUS */ + VAR_IPSECMOD_MAX_TTL = 524, /* VAR_IPSECMOD_MAX_TTL */ + VAR_IPSECMOD_WHITELIST = 525, /* VAR_IPSECMOD_WHITELIST */ + VAR_IPSECMOD_STRICT = 526, /* VAR_IPSECMOD_STRICT */ + VAR_CACHEDB = 527, /* VAR_CACHEDB */ + VAR_CACHEDB_BACKEND = 528, /* VAR_CACHEDB_BACKEND */ + VAR_CACHEDB_SECRETSEED = 529, /* VAR_CACHEDB_SECRETSEED */ + VAR_CACHEDB_REDISHOST = 530, /* VAR_CACHEDB_REDISHOST */ + VAR_CACHEDB_REDISPORT = 531, /* VAR_CACHEDB_REDISPORT */ + VAR_CACHEDB_REDISTIMEOUT = 532, /* VAR_CACHEDB_REDISTIMEOUT */ + VAR_CACHEDB_REDISEXPIRERECORDS = 533, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 534, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + VAR_FOR_UPSTREAM = 535, /* VAR_FOR_UPSTREAM */ + VAR_AUTH_ZONE = 536, /* VAR_AUTH_ZONE */ + VAR_ZONEFILE = 537, /* VAR_ZONEFILE */ + VAR_MASTER = 538, /* VAR_MASTER */ + VAR_URL = 539, /* VAR_URL */ + VAR_FOR_DOWNSTREAM = 540, /* VAR_FOR_DOWNSTREAM */ + VAR_FALLBACK_ENABLED = 541, /* VAR_FALLBACK_ENABLED */ + VAR_TLS_ADDITIONAL_PORT = 542, /* VAR_TLS_ADDITIONAL_PORT */ + VAR_LOW_RTT = 543, /* VAR_LOW_RTT */ + VAR_LOW_RTT_PERMIL = 544, /* VAR_LOW_RTT_PERMIL */ + VAR_FAST_SERVER_PERMIL = 545, /* VAR_FAST_SERVER_PERMIL */ + VAR_FAST_SERVER_NUM = 546, /* VAR_FAST_SERVER_NUM */ + VAR_ALLOW_NOTIFY = 547, /* VAR_ALLOW_NOTIFY */ + VAR_TLS_WIN_CERT = 548, /* VAR_TLS_WIN_CERT */ + VAR_TCP_CONNECTION_LIMIT = 549, /* VAR_TCP_CONNECTION_LIMIT */ + VAR_FORWARD_NO_CACHE = 550, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 551, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 552, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 553, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 554, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 555, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 556, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 557, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 558, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 559, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 560, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 561, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 562, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 563, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 564, /* VAR_RPZ */ + VAR_TAGS = 565, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 566, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 567, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 568, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 569, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 570, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 571, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 572, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 573, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 574, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 575, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_CHECK = 576, /* VAR_ZONEMD_CHECK */ + VAR_ZONEMD_REJECT_ABSENCE = 577, /* VAR_ZONEMD_REJECT_ABSENCE */ + VAR_RPZ_SIGNAL_NXDOMAIN_RA = 578 /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -668,121 +671,124 @@ extern int yydebug; #define VAR_RATELIMIT_BELOW_DOMAIN 458 #define VAR_IP_RATELIMIT_FACTOR 459 #define VAR_RATELIMIT_FACTOR 460 -#define VAR_SEND_CLIENT_SUBNET 461 -#define VAR_CLIENT_SUBNET_ZONE 462 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 463 -#define VAR_CLIENT_SUBNET_OPCODE 464 -#define VAR_MAX_CLIENT_SUBNET_IPV4 465 -#define VAR_MAX_CLIENT_SUBNET_IPV6 466 -#define VAR_MIN_CLIENT_SUBNET_IPV4 467 -#define VAR_MIN_CLIENT_SUBNET_IPV6 468 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 469 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 470 -#define VAR_CAPS_WHITELIST 471 -#define VAR_CACHE_MAX_NEGATIVE_TTL 472 -#define VAR_PERMIT_SMALL_HOLDDOWN 473 -#define VAR_QNAME_MINIMISATION 474 -#define VAR_QNAME_MINIMISATION_STRICT 475 -#define VAR_IP_FREEBIND 476 -#define VAR_DEFINE_TAG 477 -#define VAR_LOCAL_ZONE_TAG 478 -#define VAR_ACCESS_CONTROL_TAG 479 -#define VAR_LOCAL_ZONE_OVERRIDE 480 -#define VAR_ACCESS_CONTROL_TAG_ACTION 481 -#define VAR_ACCESS_CONTROL_TAG_DATA 482 -#define VAR_VIEW 483 -#define VAR_ACCESS_CONTROL_VIEW 484 -#define VAR_VIEW_FIRST 485 -#define VAR_SERVE_EXPIRED 486 -#define VAR_SERVE_EXPIRED_TTL 487 -#define VAR_SERVE_EXPIRED_TTL_RESET 488 -#define VAR_SERVE_EXPIRED_REPLY_TTL 489 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 490 -#define VAR_SERVE_ORIGINAL_TTL 491 -#define VAR_FAKE_DSA 492 -#define VAR_FAKE_SHA1 493 -#define VAR_LOG_IDENTITY 494 -#define VAR_HIDE_TRUSTANCHOR 495 -#define VAR_HIDE_HTTP_USER_AGENT 496 -#define VAR_HTTP_USER_AGENT 497 -#define VAR_TRUST_ANCHOR_SIGNALING 498 -#define VAR_AGGRESSIVE_NSEC 499 -#define VAR_USE_SYSTEMD 500 -#define VAR_SHM_ENABLE 501 -#define VAR_SHM_KEY 502 -#define VAR_ROOT_KEY_SENTINEL 503 -#define VAR_DNSCRYPT 504 -#define VAR_DNSCRYPT_ENABLE 505 -#define VAR_DNSCRYPT_PORT 506 -#define VAR_DNSCRYPT_PROVIDER 507 -#define VAR_DNSCRYPT_SECRET_KEY 508 -#define VAR_DNSCRYPT_PROVIDER_CERT 509 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 510 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 511 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 512 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 513 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 514 -#define VAR_PAD_RESPONSES 515 -#define VAR_PAD_RESPONSES_BLOCK_SIZE 516 -#define VAR_PAD_QUERIES 517 -#define VAR_PAD_QUERIES_BLOCK_SIZE 518 -#define VAR_IPSECMOD_ENABLED 519 -#define VAR_IPSECMOD_HOOK 520 -#define VAR_IPSECMOD_IGNORE_BOGUS 521 -#define VAR_IPSECMOD_MAX_TTL 522 -#define VAR_IPSECMOD_WHITELIST 523 -#define VAR_IPSECMOD_STRICT 524 -#define VAR_CACHEDB 525 -#define VAR_CACHEDB_BACKEND 526 -#define VAR_CACHEDB_SECRETSEED 527 -#define VAR_CACHEDB_REDISHOST 528 -#define VAR_CACHEDB_REDISPORT 529 -#define VAR_CACHEDB_REDISTIMEOUT 530 -#define VAR_CACHEDB_REDISEXPIRERECORDS 531 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 532 -#define VAR_FOR_UPSTREAM 533 -#define VAR_AUTH_ZONE 534 -#define VAR_ZONEFILE 535 -#define VAR_MASTER 536 -#define VAR_URL 537 -#define VAR_FOR_DOWNSTREAM 538 -#define VAR_FALLBACK_ENABLED 539 -#define VAR_TLS_ADDITIONAL_PORT 540 -#define VAR_LOW_RTT 541 -#define VAR_LOW_RTT_PERMIL 542 -#define VAR_FAST_SERVER_PERMIL 543 -#define VAR_FAST_SERVER_NUM 544 -#define VAR_ALLOW_NOTIFY 545 -#define VAR_TLS_WIN_CERT 546 -#define VAR_TCP_CONNECTION_LIMIT 547 -#define VAR_FORWARD_NO_CACHE 548 -#define VAR_STUB_NO_CACHE 549 -#define VAR_LOG_SERVFAIL 550 -#define VAR_DENY_ANY 551 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 552 -#define VAR_LOG_TAG_QUERYREPLY 553 -#define VAR_STREAM_WAIT_SIZE 554 -#define VAR_TLS_CIPHERS 555 -#define VAR_TLS_CIPHERSUITES 556 -#define VAR_TLS_USE_SNI 557 -#define VAR_IPSET 558 -#define VAR_IPSET_NAME_V4 559 -#define VAR_IPSET_NAME_V6 560 -#define VAR_TLS_SESSION_TICKET_KEYS 561 -#define VAR_RPZ 562 -#define VAR_TAGS 563 -#define VAR_RPZ_ACTION_OVERRIDE 564 -#define VAR_RPZ_CNAME_OVERRIDE 565 -#define VAR_RPZ_LOG 566 -#define VAR_RPZ_LOG_NAME 567 -#define VAR_DYNLIB 568 -#define VAR_DYNLIB_FILE 569 -#define VAR_EDNS_CLIENT_STRING 570 -#define VAR_EDNS_CLIENT_STRING_OPCODE 571 -#define VAR_NSID 572 -#define VAR_ZONEMD_PERMISSIVE_MODE 573 -#define VAR_ZONEMD_CHECK 574 -#define VAR_ZONEMD_REJECT_ABSENCE 575 +#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_SERVE_ORIGINAL_TTL 493 +#define VAR_FAKE_DSA 494 +#define VAR_FAKE_SHA1 495 +#define VAR_LOG_IDENTITY 496 +#define VAR_HIDE_TRUSTANCHOR 497 +#define VAR_HIDE_HTTP_USER_AGENT 498 +#define VAR_HTTP_USER_AGENT 499 +#define VAR_TRUST_ANCHOR_SIGNALING 500 +#define VAR_AGGRESSIVE_NSEC 501 +#define VAR_USE_SYSTEMD 502 +#define VAR_SHM_ENABLE 503 +#define VAR_SHM_KEY 504 +#define VAR_ROOT_KEY_SENTINEL 505 +#define VAR_DNSCRYPT 506 +#define VAR_DNSCRYPT_ENABLE 507 +#define VAR_DNSCRYPT_PORT 508 +#define VAR_DNSCRYPT_PROVIDER 509 +#define VAR_DNSCRYPT_SECRET_KEY 510 +#define VAR_DNSCRYPT_PROVIDER_CERT 511 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 512 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 513 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 514 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 515 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 516 +#define VAR_PAD_RESPONSES 517 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 518 +#define VAR_PAD_QUERIES 519 +#define VAR_PAD_QUERIES_BLOCK_SIZE 520 +#define VAR_IPSECMOD_ENABLED 521 +#define VAR_IPSECMOD_HOOK 522 +#define VAR_IPSECMOD_IGNORE_BOGUS 523 +#define VAR_IPSECMOD_MAX_TTL 524 +#define VAR_IPSECMOD_WHITELIST 525 +#define VAR_IPSECMOD_STRICT 526 +#define VAR_CACHEDB 527 +#define VAR_CACHEDB_BACKEND 528 +#define VAR_CACHEDB_SECRETSEED 529 +#define VAR_CACHEDB_REDISHOST 530 +#define VAR_CACHEDB_REDISPORT 531 +#define VAR_CACHEDB_REDISTIMEOUT 532 +#define VAR_CACHEDB_REDISEXPIRERECORDS 533 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 534 +#define VAR_FOR_UPSTREAM 535 +#define VAR_AUTH_ZONE 536 +#define VAR_ZONEFILE 537 +#define VAR_MASTER 538 +#define VAR_URL 539 +#define VAR_FOR_DOWNSTREAM 540 +#define VAR_FALLBACK_ENABLED 541 +#define VAR_TLS_ADDITIONAL_PORT 542 +#define VAR_LOW_RTT 543 +#define VAR_LOW_RTT_PERMIL 544 +#define VAR_FAST_SERVER_PERMIL 545 +#define VAR_FAST_SERVER_NUM 546 +#define VAR_ALLOW_NOTIFY 547 +#define VAR_TLS_WIN_CERT 548 +#define VAR_TCP_CONNECTION_LIMIT 549 +#define VAR_FORWARD_NO_CACHE 550 +#define VAR_STUB_NO_CACHE 551 +#define VAR_LOG_SERVFAIL 552 +#define VAR_DENY_ANY 553 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 554 +#define VAR_LOG_TAG_QUERYREPLY 555 +#define VAR_STREAM_WAIT_SIZE 556 +#define VAR_TLS_CIPHERS 557 +#define VAR_TLS_CIPHERSUITES 558 +#define VAR_TLS_USE_SNI 559 +#define VAR_IPSET 560 +#define VAR_IPSET_NAME_V4 561 +#define VAR_IPSET_NAME_V6 562 +#define VAR_TLS_SESSION_TICKET_KEYS 563 +#define VAR_RPZ 564 +#define VAR_TAGS 565 +#define VAR_RPZ_ACTION_OVERRIDE 566 +#define VAR_RPZ_CNAME_OVERRIDE 567 +#define VAR_RPZ_LOG 568 +#define VAR_RPZ_LOG_NAME 569 +#define VAR_DYNLIB 570 +#define VAR_DYNLIB_FILE 571 +#define VAR_EDNS_CLIENT_STRING 572 +#define VAR_EDNS_CLIENT_STRING_OPCODE 573 +#define VAR_NSID 574 +#define VAR_ZONEMD_PERMISSIVE_MODE 575 +#define VAR_ZONEMD_CHECK 576 +#define VAR_ZONEMD_REJECT_ABSENCE 577 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 578 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -792,7 +798,7 @@ union YYSTYPE char* str; -#line 796 "util/configparser.c" +#line 802 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -1016,467 +1022,473 @@ enum yysymbol_kind_t YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 203, /* VAR_RATELIMIT_BELOW_DOMAIN */ YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 204, /* VAR_IP_RATELIMIT_FACTOR */ YYSYMBOL_VAR_RATELIMIT_FACTOR = 205, /* VAR_RATELIMIT_FACTOR */ - YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 206, /* VAR_SEND_CLIENT_SUBNET */ - YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 207, /* VAR_CLIENT_SUBNET_ZONE */ - YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 208, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ - YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 209, /* VAR_CLIENT_SUBNET_OPCODE */ - YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 210, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ - YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 211, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ - YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 212, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ - YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 213, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ - YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 214, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ - YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 215, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ - YYSYMBOL_VAR_CAPS_WHITELIST = 216, /* VAR_CAPS_WHITELIST */ - YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 217, /* VAR_CACHE_MAX_NEGATIVE_TTL */ - YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 218, /* VAR_PERMIT_SMALL_HOLDDOWN */ - YYSYMBOL_VAR_QNAME_MINIMISATION = 219, /* VAR_QNAME_MINIMISATION */ - YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 220, /* VAR_QNAME_MINIMISATION_STRICT */ - YYSYMBOL_VAR_IP_FREEBIND = 221, /* VAR_IP_FREEBIND */ - YYSYMBOL_VAR_DEFINE_TAG = 222, /* VAR_DEFINE_TAG */ - YYSYMBOL_VAR_LOCAL_ZONE_TAG = 223, /* VAR_LOCAL_ZONE_TAG */ - YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 224, /* VAR_ACCESS_CONTROL_TAG */ - YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 225, /* VAR_LOCAL_ZONE_OVERRIDE */ - YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 226, /* VAR_ACCESS_CONTROL_TAG_ACTION */ - YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 227, /* VAR_ACCESS_CONTROL_TAG_DATA */ - YYSYMBOL_VAR_VIEW = 228, /* VAR_VIEW */ - YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 229, /* VAR_ACCESS_CONTROL_VIEW */ - YYSYMBOL_VAR_VIEW_FIRST = 230, /* VAR_VIEW_FIRST */ - YYSYMBOL_VAR_SERVE_EXPIRED = 231, /* VAR_SERVE_EXPIRED */ - YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 232, /* VAR_SERVE_EXPIRED_TTL */ - YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 233, /* VAR_SERVE_EXPIRED_TTL_RESET */ - YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 234, /* VAR_SERVE_EXPIRED_REPLY_TTL */ - YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 235, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ - YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 236, /* VAR_SERVE_ORIGINAL_TTL */ - YYSYMBOL_VAR_FAKE_DSA = 237, /* VAR_FAKE_DSA */ - YYSYMBOL_VAR_FAKE_SHA1 = 238, /* VAR_FAKE_SHA1 */ - YYSYMBOL_VAR_LOG_IDENTITY = 239, /* VAR_LOG_IDENTITY */ - YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 240, /* VAR_HIDE_TRUSTANCHOR */ - YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 241, /* VAR_HIDE_HTTP_USER_AGENT */ - YYSYMBOL_VAR_HTTP_USER_AGENT = 242, /* VAR_HTTP_USER_AGENT */ - YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 243, /* VAR_TRUST_ANCHOR_SIGNALING */ - YYSYMBOL_VAR_AGGRESSIVE_NSEC = 244, /* VAR_AGGRESSIVE_NSEC */ - YYSYMBOL_VAR_USE_SYSTEMD = 245, /* VAR_USE_SYSTEMD */ - YYSYMBOL_VAR_SHM_ENABLE = 246, /* VAR_SHM_ENABLE */ - YYSYMBOL_VAR_SHM_KEY = 247, /* VAR_SHM_KEY */ - YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 248, /* VAR_ROOT_KEY_SENTINEL */ - YYSYMBOL_VAR_DNSCRYPT = 249, /* VAR_DNSCRYPT */ - YYSYMBOL_VAR_DNSCRYPT_ENABLE = 250, /* VAR_DNSCRYPT_ENABLE */ - YYSYMBOL_VAR_DNSCRYPT_PORT = 251, /* VAR_DNSCRYPT_PORT */ - YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 252, /* VAR_DNSCRYPT_PROVIDER */ - YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 253, /* VAR_DNSCRYPT_SECRET_KEY */ - YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 254, /* VAR_DNSCRYPT_PROVIDER_CERT */ - YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 255, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ - YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 256, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ - YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 257, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ - YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 258, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ - YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 259, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ - YYSYMBOL_VAR_PAD_RESPONSES = 260, /* VAR_PAD_RESPONSES */ - YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 261, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ - YYSYMBOL_VAR_PAD_QUERIES = 262, /* VAR_PAD_QUERIES */ - YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 263, /* VAR_PAD_QUERIES_BLOCK_SIZE */ - YYSYMBOL_VAR_IPSECMOD_ENABLED = 264, /* VAR_IPSECMOD_ENABLED */ - YYSYMBOL_VAR_IPSECMOD_HOOK = 265, /* VAR_IPSECMOD_HOOK */ - YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 266, /* VAR_IPSECMOD_IGNORE_BOGUS */ - YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 267, /* VAR_IPSECMOD_MAX_TTL */ - YYSYMBOL_VAR_IPSECMOD_WHITELIST = 268, /* VAR_IPSECMOD_WHITELIST */ - YYSYMBOL_VAR_IPSECMOD_STRICT = 269, /* VAR_IPSECMOD_STRICT */ - YYSYMBOL_VAR_CACHEDB = 270, /* VAR_CACHEDB */ - YYSYMBOL_VAR_CACHEDB_BACKEND = 271, /* VAR_CACHEDB_BACKEND */ - YYSYMBOL_VAR_CACHEDB_SECRETSEED = 272, /* VAR_CACHEDB_SECRETSEED */ - YYSYMBOL_VAR_CACHEDB_REDISHOST = 273, /* VAR_CACHEDB_REDISHOST */ - YYSYMBOL_VAR_CACHEDB_REDISPORT = 274, /* VAR_CACHEDB_REDISPORT */ - YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 275, /* VAR_CACHEDB_REDISTIMEOUT */ - YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 276, /* VAR_CACHEDB_REDISEXPIRERECORDS */ - YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 277, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ - YYSYMBOL_VAR_FOR_UPSTREAM = 278, /* VAR_FOR_UPSTREAM */ - YYSYMBOL_VAR_AUTH_ZONE = 279, /* VAR_AUTH_ZONE */ - YYSYMBOL_VAR_ZONEFILE = 280, /* VAR_ZONEFILE */ - YYSYMBOL_VAR_MASTER = 281, /* VAR_MASTER */ - YYSYMBOL_VAR_URL = 282, /* VAR_URL */ - YYSYMBOL_VAR_FOR_DOWNSTREAM = 283, /* VAR_FOR_DOWNSTREAM */ - YYSYMBOL_VAR_FALLBACK_ENABLED = 284, /* VAR_FALLBACK_ENABLED */ - YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 285, /* VAR_TLS_ADDITIONAL_PORT */ - YYSYMBOL_VAR_LOW_RTT = 286, /* VAR_LOW_RTT */ - YYSYMBOL_VAR_LOW_RTT_PERMIL = 287, /* VAR_LOW_RTT_PERMIL */ - YYSYMBOL_VAR_FAST_SERVER_PERMIL = 288, /* VAR_FAST_SERVER_PERMIL */ - YYSYMBOL_VAR_FAST_SERVER_NUM = 289, /* VAR_FAST_SERVER_NUM */ - YYSYMBOL_VAR_ALLOW_NOTIFY = 290, /* VAR_ALLOW_NOTIFY */ - YYSYMBOL_VAR_TLS_WIN_CERT = 291, /* VAR_TLS_WIN_CERT */ - YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 292, /* VAR_TCP_CONNECTION_LIMIT */ - YYSYMBOL_VAR_FORWARD_NO_CACHE = 293, /* VAR_FORWARD_NO_CACHE */ - YYSYMBOL_VAR_STUB_NO_CACHE = 294, /* VAR_STUB_NO_CACHE */ - YYSYMBOL_VAR_LOG_SERVFAIL = 295, /* VAR_LOG_SERVFAIL */ - YYSYMBOL_VAR_DENY_ANY = 296, /* VAR_DENY_ANY */ - YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 297, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 298, /* VAR_LOG_TAG_QUERYREPLY */ - YYSYMBOL_VAR_STREAM_WAIT_SIZE = 299, /* VAR_STREAM_WAIT_SIZE */ - YYSYMBOL_VAR_TLS_CIPHERS = 300, /* VAR_TLS_CIPHERS */ - YYSYMBOL_VAR_TLS_CIPHERSUITES = 301, /* VAR_TLS_CIPHERSUITES */ - YYSYMBOL_VAR_TLS_USE_SNI = 302, /* VAR_TLS_USE_SNI */ - YYSYMBOL_VAR_IPSET = 303, /* VAR_IPSET */ - YYSYMBOL_VAR_IPSET_NAME_V4 = 304, /* VAR_IPSET_NAME_V4 */ - YYSYMBOL_VAR_IPSET_NAME_V6 = 305, /* VAR_IPSET_NAME_V6 */ - YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 306, /* VAR_TLS_SESSION_TICKET_KEYS */ - YYSYMBOL_VAR_RPZ = 307, /* VAR_RPZ */ - YYSYMBOL_VAR_TAGS = 308, /* VAR_TAGS */ - YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 309, /* VAR_RPZ_ACTION_OVERRIDE */ - YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 310, /* VAR_RPZ_CNAME_OVERRIDE */ - YYSYMBOL_VAR_RPZ_LOG = 311, /* VAR_RPZ_LOG */ - YYSYMBOL_VAR_RPZ_LOG_NAME = 312, /* VAR_RPZ_LOG_NAME */ - YYSYMBOL_VAR_DYNLIB = 313, /* VAR_DYNLIB */ - YYSYMBOL_VAR_DYNLIB_FILE = 314, /* VAR_DYNLIB_FILE */ - YYSYMBOL_VAR_EDNS_CLIENT_STRING = 315, /* VAR_EDNS_CLIENT_STRING */ - YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 316, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - YYSYMBOL_VAR_NSID = 317, /* VAR_NSID */ - YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 318, /* VAR_ZONEMD_PERMISSIVE_MODE */ - YYSYMBOL_VAR_ZONEMD_CHECK = 319, /* VAR_ZONEMD_CHECK */ - YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 320, /* VAR_ZONEMD_REJECT_ABSENCE */ - YYSYMBOL_YYACCEPT = 321, /* $accept */ - YYSYMBOL_toplevelvars = 322, /* toplevelvars */ - YYSYMBOL_toplevelvar = 323, /* toplevelvar */ - YYSYMBOL_force_toplevel = 324, /* force_toplevel */ - YYSYMBOL_serverstart = 325, /* serverstart */ - YYSYMBOL_contents_server = 326, /* contents_server */ - YYSYMBOL_content_server = 327, /* content_server */ - YYSYMBOL_stubstart = 328, /* stubstart */ - YYSYMBOL_contents_stub = 329, /* contents_stub */ - YYSYMBOL_content_stub = 330, /* content_stub */ - YYSYMBOL_forwardstart = 331, /* forwardstart */ - YYSYMBOL_contents_forward = 332, /* contents_forward */ - YYSYMBOL_content_forward = 333, /* content_forward */ - YYSYMBOL_viewstart = 334, /* viewstart */ - YYSYMBOL_contents_view = 335, /* contents_view */ - YYSYMBOL_content_view = 336, /* content_view */ - YYSYMBOL_authstart = 337, /* authstart */ - YYSYMBOL_contents_auth = 338, /* contents_auth */ - YYSYMBOL_content_auth = 339, /* content_auth */ - YYSYMBOL_rpz_tag = 340, /* rpz_tag */ - YYSYMBOL_rpz_action_override = 341, /* rpz_action_override */ - YYSYMBOL_rpz_cname_override = 342, /* rpz_cname_override */ - YYSYMBOL_rpz_log = 343, /* rpz_log */ - YYSYMBOL_rpz_log_name = 344, /* rpz_log_name */ - YYSYMBOL_rpzstart = 345, /* rpzstart */ - YYSYMBOL_contents_rpz = 346, /* contents_rpz */ - YYSYMBOL_content_rpz = 347, /* content_rpz */ - YYSYMBOL_server_num_threads = 348, /* server_num_threads */ - YYSYMBOL_server_verbosity = 349, /* server_verbosity */ - YYSYMBOL_server_statistics_interval = 350, /* server_statistics_interval */ - YYSYMBOL_server_statistics_cumulative = 351, /* server_statistics_cumulative */ - YYSYMBOL_server_extended_statistics = 352, /* server_extended_statistics */ - YYSYMBOL_server_shm_enable = 353, /* server_shm_enable */ - YYSYMBOL_server_shm_key = 354, /* server_shm_key */ - YYSYMBOL_server_port = 355, /* server_port */ - YYSYMBOL_server_send_client_subnet = 356, /* server_send_client_subnet */ - YYSYMBOL_server_client_subnet_zone = 357, /* server_client_subnet_zone */ - YYSYMBOL_server_client_subnet_always_forward = 358, /* server_client_subnet_always_forward */ - YYSYMBOL_server_client_subnet_opcode = 359, /* server_client_subnet_opcode */ - YYSYMBOL_server_max_client_subnet_ipv4 = 360, /* server_max_client_subnet_ipv4 */ - YYSYMBOL_server_max_client_subnet_ipv6 = 361, /* server_max_client_subnet_ipv6 */ - YYSYMBOL_server_min_client_subnet_ipv4 = 362, /* server_min_client_subnet_ipv4 */ - YYSYMBOL_server_min_client_subnet_ipv6 = 363, /* server_min_client_subnet_ipv6 */ - YYSYMBOL_server_max_ecs_tree_size_ipv4 = 364, /* server_max_ecs_tree_size_ipv4 */ - YYSYMBOL_server_max_ecs_tree_size_ipv6 = 365, /* server_max_ecs_tree_size_ipv6 */ - YYSYMBOL_server_interface = 366, /* server_interface */ - YYSYMBOL_server_outgoing_interface = 367, /* server_outgoing_interface */ - YYSYMBOL_server_outgoing_range = 368, /* server_outgoing_range */ - YYSYMBOL_server_outgoing_port_permit = 369, /* server_outgoing_port_permit */ - YYSYMBOL_server_outgoing_port_avoid = 370, /* server_outgoing_port_avoid */ - YYSYMBOL_server_outgoing_num_tcp = 371, /* server_outgoing_num_tcp */ - YYSYMBOL_server_incoming_num_tcp = 372, /* server_incoming_num_tcp */ - YYSYMBOL_server_interface_automatic = 373, /* server_interface_automatic */ - YYSYMBOL_server_do_ip4 = 374, /* server_do_ip4 */ - YYSYMBOL_server_do_ip6 = 375, /* server_do_ip6 */ - YYSYMBOL_server_do_udp = 376, /* server_do_udp */ - YYSYMBOL_server_do_tcp = 377, /* server_do_tcp */ - YYSYMBOL_server_prefer_ip4 = 378, /* server_prefer_ip4 */ - YYSYMBOL_server_prefer_ip6 = 379, /* server_prefer_ip6 */ - YYSYMBOL_server_tcp_mss = 380, /* server_tcp_mss */ - YYSYMBOL_server_outgoing_tcp_mss = 381, /* server_outgoing_tcp_mss */ - YYSYMBOL_server_tcp_idle_timeout = 382, /* server_tcp_idle_timeout */ - YYSYMBOL_server_max_reuse_tcp_queries = 383, /* server_max_reuse_tcp_queries */ - YYSYMBOL_server_tcp_reuse_timeout = 384, /* server_tcp_reuse_timeout */ - YYSYMBOL_server_tcp_auth_query_timeout = 385, /* server_tcp_auth_query_timeout */ - YYSYMBOL_server_tcp_keepalive = 386, /* server_tcp_keepalive */ - YYSYMBOL_server_tcp_keepalive_timeout = 387, /* server_tcp_keepalive_timeout */ - YYSYMBOL_server_tcp_upstream = 388, /* server_tcp_upstream */ - YYSYMBOL_server_udp_upstream_without_downstream = 389, /* server_udp_upstream_without_downstream */ - YYSYMBOL_server_ssl_upstream = 390, /* server_ssl_upstream */ - YYSYMBOL_server_ssl_service_key = 391, /* server_ssl_service_key */ - YYSYMBOL_server_ssl_service_pem = 392, /* server_ssl_service_pem */ - YYSYMBOL_server_ssl_port = 393, /* server_ssl_port */ - YYSYMBOL_server_tls_cert_bundle = 394, /* server_tls_cert_bundle */ - YYSYMBOL_server_tls_win_cert = 395, /* server_tls_win_cert */ - YYSYMBOL_server_tls_additional_port = 396, /* server_tls_additional_port */ - YYSYMBOL_server_tls_ciphers = 397, /* server_tls_ciphers */ - YYSYMBOL_server_tls_ciphersuites = 398, /* server_tls_ciphersuites */ - YYSYMBOL_server_tls_session_ticket_keys = 399, /* server_tls_session_ticket_keys */ - YYSYMBOL_server_tls_use_sni = 400, /* server_tls_use_sni */ - YYSYMBOL_server_https_port = 401, /* server_https_port */ - YYSYMBOL_server_http_endpoint = 402, /* server_http_endpoint */ - YYSYMBOL_server_http_max_streams = 403, /* server_http_max_streams */ - YYSYMBOL_server_http_query_buffer_size = 404, /* server_http_query_buffer_size */ - YYSYMBOL_server_http_response_buffer_size = 405, /* server_http_response_buffer_size */ - YYSYMBOL_server_http_nodelay = 406, /* server_http_nodelay */ - YYSYMBOL_server_http_notls_downstream = 407, /* server_http_notls_downstream */ - YYSYMBOL_server_use_systemd = 408, /* server_use_systemd */ - YYSYMBOL_server_do_daemonize = 409, /* server_do_daemonize */ - YYSYMBOL_server_use_syslog = 410, /* server_use_syslog */ - YYSYMBOL_server_log_time_ascii = 411, /* server_log_time_ascii */ - YYSYMBOL_server_log_queries = 412, /* server_log_queries */ - YYSYMBOL_server_log_replies = 413, /* server_log_replies */ - YYSYMBOL_server_log_tag_queryreply = 414, /* server_log_tag_queryreply */ - YYSYMBOL_server_log_servfail = 415, /* server_log_servfail */ - YYSYMBOL_server_log_local_actions = 416, /* server_log_local_actions */ - YYSYMBOL_server_chroot = 417, /* server_chroot */ - YYSYMBOL_server_username = 418, /* server_username */ - YYSYMBOL_server_directory = 419, /* server_directory */ - YYSYMBOL_server_logfile = 420, /* server_logfile */ - YYSYMBOL_server_pidfile = 421, /* server_pidfile */ - YYSYMBOL_server_root_hints = 422, /* server_root_hints */ - YYSYMBOL_server_dlv_anchor_file = 423, /* server_dlv_anchor_file */ - YYSYMBOL_server_dlv_anchor = 424, /* server_dlv_anchor */ - YYSYMBOL_server_auto_trust_anchor_file = 425, /* server_auto_trust_anchor_file */ - YYSYMBOL_server_trust_anchor_file = 426, /* server_trust_anchor_file */ - YYSYMBOL_server_trusted_keys_file = 427, /* server_trusted_keys_file */ - YYSYMBOL_server_trust_anchor = 428, /* server_trust_anchor */ - YYSYMBOL_server_trust_anchor_signaling = 429, /* server_trust_anchor_signaling */ - YYSYMBOL_server_root_key_sentinel = 430, /* server_root_key_sentinel */ - YYSYMBOL_server_domain_insecure = 431, /* server_domain_insecure */ - YYSYMBOL_server_hide_identity = 432, /* server_hide_identity */ - YYSYMBOL_server_hide_version = 433, /* server_hide_version */ - YYSYMBOL_server_hide_trustanchor = 434, /* server_hide_trustanchor */ - YYSYMBOL_server_hide_http_user_agent = 435, /* server_hide_http_user_agent */ - YYSYMBOL_server_identity = 436, /* server_identity */ - YYSYMBOL_server_version = 437, /* server_version */ - YYSYMBOL_server_http_user_agent = 438, /* server_http_user_agent */ - YYSYMBOL_server_nsid = 439, /* server_nsid */ - YYSYMBOL_server_so_rcvbuf = 440, /* server_so_rcvbuf */ - YYSYMBOL_server_so_sndbuf = 441, /* server_so_sndbuf */ - YYSYMBOL_server_so_reuseport = 442, /* server_so_reuseport */ - YYSYMBOL_server_ip_transparent = 443, /* server_ip_transparent */ - YYSYMBOL_server_ip_freebind = 444, /* server_ip_freebind */ - YYSYMBOL_server_ip_dscp = 445, /* server_ip_dscp */ - YYSYMBOL_server_stream_wait_size = 446, /* server_stream_wait_size */ - YYSYMBOL_server_edns_buffer_size = 447, /* server_edns_buffer_size */ - YYSYMBOL_server_msg_buffer_size = 448, /* server_msg_buffer_size */ - YYSYMBOL_server_msg_cache_size = 449, /* server_msg_cache_size */ - YYSYMBOL_server_msg_cache_slabs = 450, /* server_msg_cache_slabs */ - YYSYMBOL_server_num_queries_per_thread = 451, /* server_num_queries_per_thread */ - YYSYMBOL_server_jostle_timeout = 452, /* server_jostle_timeout */ - YYSYMBOL_server_delay_close = 453, /* server_delay_close */ - YYSYMBOL_server_udp_connect = 454, /* server_udp_connect */ - YYSYMBOL_server_unblock_lan_zones = 455, /* server_unblock_lan_zones */ - YYSYMBOL_server_insecure_lan_zones = 456, /* server_insecure_lan_zones */ - YYSYMBOL_server_rrset_cache_size = 457, /* server_rrset_cache_size */ - YYSYMBOL_server_rrset_cache_slabs = 458, /* server_rrset_cache_slabs */ - YYSYMBOL_server_infra_host_ttl = 459, /* server_infra_host_ttl */ - YYSYMBOL_server_infra_lame_ttl = 460, /* server_infra_lame_ttl */ - YYSYMBOL_server_infra_cache_numhosts = 461, /* server_infra_cache_numhosts */ - YYSYMBOL_server_infra_cache_lame_size = 462, /* server_infra_cache_lame_size */ - YYSYMBOL_server_infra_cache_slabs = 463, /* server_infra_cache_slabs */ - YYSYMBOL_server_infra_cache_min_rtt = 464, /* server_infra_cache_min_rtt */ - YYSYMBOL_server_infra_keep_probing = 465, /* server_infra_keep_probing */ - YYSYMBOL_server_target_fetch_policy = 466, /* server_target_fetch_policy */ - YYSYMBOL_server_harden_short_bufsize = 467, /* server_harden_short_bufsize */ - YYSYMBOL_server_harden_large_queries = 468, /* server_harden_large_queries */ - YYSYMBOL_server_harden_glue = 469, /* server_harden_glue */ - YYSYMBOL_server_harden_dnssec_stripped = 470, /* server_harden_dnssec_stripped */ - YYSYMBOL_server_harden_below_nxdomain = 471, /* server_harden_below_nxdomain */ - YYSYMBOL_server_harden_referral_path = 472, /* server_harden_referral_path */ - YYSYMBOL_server_harden_algo_downgrade = 473, /* server_harden_algo_downgrade */ - YYSYMBOL_server_use_caps_for_id = 474, /* server_use_caps_for_id */ - YYSYMBOL_server_caps_whitelist = 475, /* server_caps_whitelist */ - YYSYMBOL_server_private_address = 476, /* server_private_address */ - YYSYMBOL_server_private_domain = 477, /* server_private_domain */ - YYSYMBOL_server_prefetch = 478, /* server_prefetch */ - YYSYMBOL_server_prefetch_key = 479, /* server_prefetch_key */ - YYSYMBOL_server_deny_any = 480, /* server_deny_any */ - YYSYMBOL_server_unwanted_reply_threshold = 481, /* server_unwanted_reply_threshold */ - YYSYMBOL_server_do_not_query_address = 482, /* server_do_not_query_address */ - YYSYMBOL_server_do_not_query_localhost = 483, /* server_do_not_query_localhost */ - YYSYMBOL_server_access_control = 484, /* server_access_control */ - YYSYMBOL_server_module_conf = 485, /* server_module_conf */ - YYSYMBOL_server_val_override_date = 486, /* server_val_override_date */ - YYSYMBOL_server_val_sig_skew_min = 487, /* server_val_sig_skew_min */ - YYSYMBOL_server_val_sig_skew_max = 488, /* server_val_sig_skew_max */ - YYSYMBOL_server_val_max_restart = 489, /* server_val_max_restart */ - YYSYMBOL_server_cache_max_ttl = 490, /* server_cache_max_ttl */ - YYSYMBOL_server_cache_max_negative_ttl = 491, /* server_cache_max_negative_ttl */ - YYSYMBOL_server_cache_min_ttl = 492, /* server_cache_min_ttl */ - YYSYMBOL_server_bogus_ttl = 493, /* server_bogus_ttl */ - YYSYMBOL_server_val_clean_additional = 494, /* server_val_clean_additional */ - YYSYMBOL_server_val_permissive_mode = 495, /* server_val_permissive_mode */ - YYSYMBOL_server_aggressive_nsec = 496, /* server_aggressive_nsec */ - YYSYMBOL_server_ignore_cd_flag = 497, /* server_ignore_cd_flag */ - YYSYMBOL_server_serve_expired = 498, /* server_serve_expired */ - YYSYMBOL_server_serve_expired_ttl = 499, /* server_serve_expired_ttl */ - YYSYMBOL_server_serve_expired_ttl_reset = 500, /* server_serve_expired_ttl_reset */ - YYSYMBOL_server_serve_expired_reply_ttl = 501, /* server_serve_expired_reply_ttl */ - YYSYMBOL_server_serve_expired_client_timeout = 502, /* server_serve_expired_client_timeout */ - YYSYMBOL_server_serve_original_ttl = 503, /* server_serve_original_ttl */ - YYSYMBOL_server_fake_dsa = 504, /* server_fake_dsa */ - YYSYMBOL_server_fake_sha1 = 505, /* server_fake_sha1 */ - YYSYMBOL_server_val_log_level = 506, /* server_val_log_level */ - YYSYMBOL_server_val_nsec3_keysize_iterations = 507, /* server_val_nsec3_keysize_iterations */ - YYSYMBOL_server_zonemd_permissive_mode = 508, /* server_zonemd_permissive_mode */ - YYSYMBOL_server_add_holddown = 509, /* server_add_holddown */ - YYSYMBOL_server_del_holddown = 510, /* server_del_holddown */ - YYSYMBOL_server_keep_missing = 511, /* server_keep_missing */ - YYSYMBOL_server_permit_small_holddown = 512, /* server_permit_small_holddown */ - YYSYMBOL_server_key_cache_size = 513, /* server_key_cache_size */ - YYSYMBOL_server_key_cache_slabs = 514, /* server_key_cache_slabs */ - YYSYMBOL_server_neg_cache_size = 515, /* server_neg_cache_size */ - YYSYMBOL_server_local_zone = 516, /* server_local_zone */ - YYSYMBOL_server_local_data = 517, /* server_local_data */ - YYSYMBOL_server_local_data_ptr = 518, /* server_local_data_ptr */ - YYSYMBOL_server_minimal_responses = 519, /* server_minimal_responses */ - YYSYMBOL_server_rrset_roundrobin = 520, /* server_rrset_roundrobin */ - YYSYMBOL_server_unknown_server_time_limit = 521, /* server_unknown_server_time_limit */ - YYSYMBOL_server_max_udp_size = 522, /* server_max_udp_size */ - YYSYMBOL_server_dns64_prefix = 523, /* server_dns64_prefix */ - YYSYMBOL_server_dns64_synthall = 524, /* server_dns64_synthall */ - YYSYMBOL_server_dns64_ignore_aaaa = 525, /* server_dns64_ignore_aaaa */ - YYSYMBOL_server_define_tag = 526, /* server_define_tag */ - YYSYMBOL_server_local_zone_tag = 527, /* server_local_zone_tag */ - YYSYMBOL_server_access_control_tag = 528, /* server_access_control_tag */ - YYSYMBOL_server_access_control_tag_action = 529, /* server_access_control_tag_action */ - YYSYMBOL_server_access_control_tag_data = 530, /* server_access_control_tag_data */ - YYSYMBOL_server_local_zone_override = 531, /* server_local_zone_override */ - YYSYMBOL_server_access_control_view = 532, /* server_access_control_view */ - YYSYMBOL_server_response_ip_tag = 533, /* server_response_ip_tag */ - YYSYMBOL_server_ip_ratelimit = 534, /* server_ip_ratelimit */ - YYSYMBOL_server_ratelimit = 535, /* server_ratelimit */ - YYSYMBOL_server_ip_ratelimit_size = 536, /* server_ip_ratelimit_size */ - YYSYMBOL_server_ratelimit_size = 537, /* server_ratelimit_size */ - YYSYMBOL_server_ip_ratelimit_slabs = 538, /* server_ip_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_slabs = 539, /* server_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_for_domain = 540, /* server_ratelimit_for_domain */ - YYSYMBOL_server_ratelimit_below_domain = 541, /* server_ratelimit_below_domain */ - YYSYMBOL_server_ip_ratelimit_factor = 542, /* server_ip_ratelimit_factor */ - YYSYMBOL_server_ratelimit_factor = 543, /* server_ratelimit_factor */ - YYSYMBOL_server_outbound_msg_retry = 544, /* server_outbound_msg_retry */ - YYSYMBOL_server_low_rtt = 545, /* server_low_rtt */ - YYSYMBOL_server_fast_server_num = 546, /* server_fast_server_num */ - YYSYMBOL_server_fast_server_permil = 547, /* server_fast_server_permil */ - YYSYMBOL_server_qname_minimisation = 548, /* server_qname_minimisation */ - YYSYMBOL_server_qname_minimisation_strict = 549, /* server_qname_minimisation_strict */ - YYSYMBOL_server_pad_responses = 550, /* server_pad_responses */ - YYSYMBOL_server_pad_responses_block_size = 551, /* server_pad_responses_block_size */ - YYSYMBOL_server_pad_queries = 552, /* server_pad_queries */ - YYSYMBOL_server_pad_queries_block_size = 553, /* server_pad_queries_block_size */ - YYSYMBOL_server_ipsecmod_enabled = 554, /* server_ipsecmod_enabled */ - YYSYMBOL_server_ipsecmod_ignore_bogus = 555, /* server_ipsecmod_ignore_bogus */ - YYSYMBOL_server_ipsecmod_hook = 556, /* server_ipsecmod_hook */ - YYSYMBOL_server_ipsecmod_max_ttl = 557, /* server_ipsecmod_max_ttl */ - YYSYMBOL_server_ipsecmod_whitelist = 558, /* server_ipsecmod_whitelist */ - YYSYMBOL_server_ipsecmod_strict = 559, /* server_ipsecmod_strict */ - YYSYMBOL_server_edns_client_string = 560, /* server_edns_client_string */ - YYSYMBOL_server_edns_client_string_opcode = 561, /* server_edns_client_string_opcode */ - YYSYMBOL_stub_name = 562, /* stub_name */ - YYSYMBOL_stub_host = 563, /* stub_host */ - YYSYMBOL_stub_addr = 564, /* stub_addr */ - YYSYMBOL_stub_first = 565, /* stub_first */ - YYSYMBOL_stub_no_cache = 566, /* stub_no_cache */ - YYSYMBOL_stub_ssl_upstream = 567, /* stub_ssl_upstream */ - YYSYMBOL_stub_tcp_upstream = 568, /* stub_tcp_upstream */ - YYSYMBOL_stub_prime = 569, /* stub_prime */ - YYSYMBOL_forward_name = 570, /* forward_name */ - YYSYMBOL_forward_host = 571, /* forward_host */ - YYSYMBOL_forward_addr = 572, /* forward_addr */ - YYSYMBOL_forward_first = 573, /* forward_first */ - YYSYMBOL_forward_no_cache = 574, /* forward_no_cache */ - YYSYMBOL_forward_ssl_upstream = 575, /* forward_ssl_upstream */ - YYSYMBOL_forward_tcp_upstream = 576, /* forward_tcp_upstream */ - YYSYMBOL_auth_name = 577, /* auth_name */ - YYSYMBOL_auth_zonefile = 578, /* auth_zonefile */ - YYSYMBOL_auth_master = 579, /* auth_master */ - YYSYMBOL_auth_url = 580, /* auth_url */ - YYSYMBOL_auth_allow_notify = 581, /* auth_allow_notify */ - YYSYMBOL_auth_zonemd_check = 582, /* auth_zonemd_check */ - YYSYMBOL_auth_zonemd_reject_absence = 583, /* auth_zonemd_reject_absence */ - YYSYMBOL_auth_for_downstream = 584, /* auth_for_downstream */ - YYSYMBOL_auth_for_upstream = 585, /* auth_for_upstream */ - YYSYMBOL_auth_fallback_enabled = 586, /* auth_fallback_enabled */ - YYSYMBOL_view_name = 587, /* view_name */ - YYSYMBOL_view_local_zone = 588, /* view_local_zone */ - YYSYMBOL_view_response_ip = 589, /* view_response_ip */ - YYSYMBOL_view_response_ip_data = 590, /* view_response_ip_data */ - YYSYMBOL_view_local_data = 591, /* view_local_data */ - YYSYMBOL_view_local_data_ptr = 592, /* view_local_data_ptr */ - YYSYMBOL_view_first = 593, /* view_first */ - YYSYMBOL_rcstart = 594, /* rcstart */ - YYSYMBOL_contents_rc = 595, /* contents_rc */ - YYSYMBOL_content_rc = 596, /* content_rc */ - YYSYMBOL_rc_control_enable = 597, /* rc_control_enable */ - YYSYMBOL_rc_control_port = 598, /* rc_control_port */ - YYSYMBOL_rc_control_interface = 599, /* rc_control_interface */ - YYSYMBOL_rc_control_use_cert = 600, /* rc_control_use_cert */ - YYSYMBOL_rc_server_key_file = 601, /* rc_server_key_file */ - YYSYMBOL_rc_server_cert_file = 602, /* rc_server_cert_file */ - YYSYMBOL_rc_control_key_file = 603, /* rc_control_key_file */ - YYSYMBOL_rc_control_cert_file = 604, /* rc_control_cert_file */ - YYSYMBOL_dtstart = 605, /* dtstart */ - YYSYMBOL_contents_dt = 606, /* contents_dt */ - YYSYMBOL_content_dt = 607, /* content_dt */ - YYSYMBOL_dt_dnstap_enable = 608, /* dt_dnstap_enable */ - YYSYMBOL_dt_dnstap_bidirectional = 609, /* dt_dnstap_bidirectional */ - YYSYMBOL_dt_dnstap_socket_path = 610, /* dt_dnstap_socket_path */ - YYSYMBOL_dt_dnstap_ip = 611, /* dt_dnstap_ip */ - YYSYMBOL_dt_dnstap_tls = 612, /* dt_dnstap_tls */ - YYSYMBOL_dt_dnstap_tls_server_name = 613, /* dt_dnstap_tls_server_name */ - YYSYMBOL_dt_dnstap_tls_cert_bundle = 614, /* dt_dnstap_tls_cert_bundle */ - YYSYMBOL_dt_dnstap_tls_client_key_file = 615, /* dt_dnstap_tls_client_key_file */ - YYSYMBOL_dt_dnstap_tls_client_cert_file = 616, /* dt_dnstap_tls_client_cert_file */ - YYSYMBOL_dt_dnstap_send_identity = 617, /* dt_dnstap_send_identity */ - YYSYMBOL_dt_dnstap_send_version = 618, /* dt_dnstap_send_version */ - YYSYMBOL_dt_dnstap_identity = 619, /* dt_dnstap_identity */ - YYSYMBOL_dt_dnstap_version = 620, /* dt_dnstap_version */ - YYSYMBOL_dt_dnstap_log_resolver_query_messages = 621, /* dt_dnstap_log_resolver_query_messages */ - YYSYMBOL_dt_dnstap_log_resolver_response_messages = 622, /* dt_dnstap_log_resolver_response_messages */ - YYSYMBOL_dt_dnstap_log_client_query_messages = 623, /* dt_dnstap_log_client_query_messages */ - YYSYMBOL_dt_dnstap_log_client_response_messages = 624, /* dt_dnstap_log_client_response_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 625, /* dt_dnstap_log_forwarder_query_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 626, /* dt_dnstap_log_forwarder_response_messages */ - YYSYMBOL_pythonstart = 627, /* pythonstart */ - YYSYMBOL_contents_py = 628, /* contents_py */ - YYSYMBOL_content_py = 629, /* content_py */ - YYSYMBOL_py_script = 630, /* py_script */ - YYSYMBOL_dynlibstart = 631, /* dynlibstart */ - YYSYMBOL_contents_dl = 632, /* contents_dl */ - YYSYMBOL_content_dl = 633, /* content_dl */ - YYSYMBOL_dl_file = 634, /* dl_file */ - YYSYMBOL_server_disable_dnssec_lame_check = 635, /* server_disable_dnssec_lame_check */ - YYSYMBOL_server_log_identity = 636, /* server_log_identity */ - YYSYMBOL_server_response_ip = 637, /* server_response_ip */ - YYSYMBOL_server_response_ip_data = 638, /* server_response_ip_data */ - YYSYMBOL_dnscstart = 639, /* dnscstart */ - YYSYMBOL_contents_dnsc = 640, /* contents_dnsc */ - YYSYMBOL_content_dnsc = 641, /* content_dnsc */ - YYSYMBOL_dnsc_dnscrypt_enable = 642, /* dnsc_dnscrypt_enable */ - YYSYMBOL_dnsc_dnscrypt_port = 643, /* dnsc_dnscrypt_port */ - YYSYMBOL_dnsc_dnscrypt_provider = 644, /* dnsc_dnscrypt_provider */ - YYSYMBOL_dnsc_dnscrypt_provider_cert = 645, /* dnsc_dnscrypt_provider_cert */ - YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 646, /* dnsc_dnscrypt_provider_cert_rotated */ - YYSYMBOL_dnsc_dnscrypt_secret_key = 647, /* dnsc_dnscrypt_secret_key */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 648, /* dnsc_dnscrypt_shared_secret_cache_size */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 649, /* dnsc_dnscrypt_shared_secret_cache_slabs */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 650, /* dnsc_dnscrypt_nonce_cache_size */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 651, /* dnsc_dnscrypt_nonce_cache_slabs */ - YYSYMBOL_cachedbstart = 652, /* cachedbstart */ - YYSYMBOL_contents_cachedb = 653, /* contents_cachedb */ - YYSYMBOL_content_cachedb = 654, /* content_cachedb */ - YYSYMBOL_cachedb_backend_name = 655, /* cachedb_backend_name */ - YYSYMBOL_cachedb_secret_seed = 656, /* cachedb_secret_seed */ - YYSYMBOL_redis_server_host = 657, /* redis_server_host */ - YYSYMBOL_redis_server_port = 658, /* redis_server_port */ - YYSYMBOL_redis_timeout = 659, /* redis_timeout */ - YYSYMBOL_redis_expire_records = 660, /* redis_expire_records */ - YYSYMBOL_server_tcp_connection_limit = 661, /* server_tcp_connection_limit */ - YYSYMBOL_ipsetstart = 662, /* ipsetstart */ - YYSYMBOL_contents_ipset = 663, /* contents_ipset */ - YYSYMBOL_content_ipset = 664, /* content_ipset */ - YYSYMBOL_ipset_name_v4 = 665, /* ipset_name_v4 */ - YYSYMBOL_ipset_name_v6 = 666 /* ipset_name_v6 */ + YYSYMBOL_VAR_IP_RATELIMIT_BACKOFF = 206, /* VAR_IP_RATELIMIT_BACKOFF */ + YYSYMBOL_VAR_RATELIMIT_BACKOFF = 207, /* VAR_RATELIMIT_BACKOFF */ + YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 208, /* VAR_SEND_CLIENT_SUBNET */ + YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 209, /* VAR_CLIENT_SUBNET_ZONE */ + YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 210, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 211, /* VAR_CLIENT_SUBNET_OPCODE */ + YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 212, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 213, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 214, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 215, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 216, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 217, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + YYSYMBOL_VAR_CAPS_WHITELIST = 218, /* VAR_CAPS_WHITELIST */ + YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 219, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 220, /* VAR_PERMIT_SMALL_HOLDDOWN */ + YYSYMBOL_VAR_QNAME_MINIMISATION = 221, /* VAR_QNAME_MINIMISATION */ + YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 222, /* VAR_QNAME_MINIMISATION_STRICT */ + YYSYMBOL_VAR_IP_FREEBIND = 223, /* VAR_IP_FREEBIND */ + YYSYMBOL_VAR_DEFINE_TAG = 224, /* VAR_DEFINE_TAG */ + YYSYMBOL_VAR_LOCAL_ZONE_TAG = 225, /* VAR_LOCAL_ZONE_TAG */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 226, /* VAR_ACCESS_CONTROL_TAG */ + YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 227, /* VAR_LOCAL_ZONE_OVERRIDE */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 228, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 229, /* VAR_ACCESS_CONTROL_TAG_DATA */ + YYSYMBOL_VAR_VIEW = 230, /* VAR_VIEW */ + YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 231, /* VAR_ACCESS_CONTROL_VIEW */ + YYSYMBOL_VAR_VIEW_FIRST = 232, /* VAR_VIEW_FIRST */ + YYSYMBOL_VAR_SERVE_EXPIRED = 233, /* VAR_SERVE_EXPIRED */ + YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 234, /* VAR_SERVE_EXPIRED_TTL */ + YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 235, /* VAR_SERVE_EXPIRED_TTL_RESET */ + YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 236, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 237, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 238, /* VAR_SERVE_ORIGINAL_TTL */ + YYSYMBOL_VAR_FAKE_DSA = 239, /* VAR_FAKE_DSA */ + YYSYMBOL_VAR_FAKE_SHA1 = 240, /* VAR_FAKE_SHA1 */ + YYSYMBOL_VAR_LOG_IDENTITY = 241, /* VAR_LOG_IDENTITY */ + YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 242, /* VAR_HIDE_TRUSTANCHOR */ + YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 243, /* VAR_HIDE_HTTP_USER_AGENT */ + YYSYMBOL_VAR_HTTP_USER_AGENT = 244, /* VAR_HTTP_USER_AGENT */ + YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 245, /* VAR_TRUST_ANCHOR_SIGNALING */ + YYSYMBOL_VAR_AGGRESSIVE_NSEC = 246, /* VAR_AGGRESSIVE_NSEC */ + YYSYMBOL_VAR_USE_SYSTEMD = 247, /* VAR_USE_SYSTEMD */ + YYSYMBOL_VAR_SHM_ENABLE = 248, /* VAR_SHM_ENABLE */ + YYSYMBOL_VAR_SHM_KEY = 249, /* VAR_SHM_KEY */ + YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 250, /* VAR_ROOT_KEY_SENTINEL */ + YYSYMBOL_VAR_DNSCRYPT = 251, /* VAR_DNSCRYPT */ + YYSYMBOL_VAR_DNSCRYPT_ENABLE = 252, /* VAR_DNSCRYPT_ENABLE */ + YYSYMBOL_VAR_DNSCRYPT_PORT = 253, /* VAR_DNSCRYPT_PORT */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 254, /* VAR_DNSCRYPT_PROVIDER */ + YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 255, /* VAR_DNSCRYPT_SECRET_KEY */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 256, /* VAR_DNSCRYPT_PROVIDER_CERT */ + YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 257, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 258, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 259, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 260, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 261, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + YYSYMBOL_VAR_PAD_RESPONSES = 262, /* VAR_PAD_RESPONSES */ + YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 263, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ + YYSYMBOL_VAR_PAD_QUERIES = 264, /* VAR_PAD_QUERIES */ + YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 265, /* VAR_PAD_QUERIES_BLOCK_SIZE */ + YYSYMBOL_VAR_IPSECMOD_ENABLED = 266, /* VAR_IPSECMOD_ENABLED */ + YYSYMBOL_VAR_IPSECMOD_HOOK = 267, /* VAR_IPSECMOD_HOOK */ + YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 268, /* VAR_IPSECMOD_IGNORE_BOGUS */ + YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 269, /* VAR_IPSECMOD_MAX_TTL */ + YYSYMBOL_VAR_IPSECMOD_WHITELIST = 270, /* VAR_IPSECMOD_WHITELIST */ + YYSYMBOL_VAR_IPSECMOD_STRICT = 271, /* VAR_IPSECMOD_STRICT */ + YYSYMBOL_VAR_CACHEDB = 272, /* VAR_CACHEDB */ + YYSYMBOL_VAR_CACHEDB_BACKEND = 273, /* VAR_CACHEDB_BACKEND */ + YYSYMBOL_VAR_CACHEDB_SECRETSEED = 274, /* VAR_CACHEDB_SECRETSEED */ + YYSYMBOL_VAR_CACHEDB_REDISHOST = 275, /* VAR_CACHEDB_REDISHOST */ + YYSYMBOL_VAR_CACHEDB_REDISPORT = 276, /* VAR_CACHEDB_REDISPORT */ + YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 277, /* VAR_CACHEDB_REDISTIMEOUT */ + YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 278, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 279, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + YYSYMBOL_VAR_FOR_UPSTREAM = 280, /* VAR_FOR_UPSTREAM */ + YYSYMBOL_VAR_AUTH_ZONE = 281, /* VAR_AUTH_ZONE */ + YYSYMBOL_VAR_ZONEFILE = 282, /* VAR_ZONEFILE */ + YYSYMBOL_VAR_MASTER = 283, /* VAR_MASTER */ + YYSYMBOL_VAR_URL = 284, /* VAR_URL */ + YYSYMBOL_VAR_FOR_DOWNSTREAM = 285, /* VAR_FOR_DOWNSTREAM */ + YYSYMBOL_VAR_FALLBACK_ENABLED = 286, /* VAR_FALLBACK_ENABLED */ + YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 287, /* VAR_TLS_ADDITIONAL_PORT */ + YYSYMBOL_VAR_LOW_RTT = 288, /* VAR_LOW_RTT */ + YYSYMBOL_VAR_LOW_RTT_PERMIL = 289, /* VAR_LOW_RTT_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_PERMIL = 290, /* VAR_FAST_SERVER_PERMIL */ + YYSYMBOL_VAR_FAST_SERVER_NUM = 291, /* VAR_FAST_SERVER_NUM */ + YYSYMBOL_VAR_ALLOW_NOTIFY = 292, /* VAR_ALLOW_NOTIFY */ + YYSYMBOL_VAR_TLS_WIN_CERT = 293, /* VAR_TLS_WIN_CERT */ + YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 294, /* VAR_TCP_CONNECTION_LIMIT */ + YYSYMBOL_VAR_FORWARD_NO_CACHE = 295, /* VAR_FORWARD_NO_CACHE */ + YYSYMBOL_VAR_STUB_NO_CACHE = 296, /* VAR_STUB_NO_CACHE */ + YYSYMBOL_VAR_LOG_SERVFAIL = 297, /* VAR_LOG_SERVFAIL */ + YYSYMBOL_VAR_DENY_ANY = 298, /* VAR_DENY_ANY */ + YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 299, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 300, /* VAR_LOG_TAG_QUERYREPLY */ + YYSYMBOL_VAR_STREAM_WAIT_SIZE = 301, /* VAR_STREAM_WAIT_SIZE */ + YYSYMBOL_VAR_TLS_CIPHERS = 302, /* VAR_TLS_CIPHERS */ + YYSYMBOL_VAR_TLS_CIPHERSUITES = 303, /* VAR_TLS_CIPHERSUITES */ + YYSYMBOL_VAR_TLS_USE_SNI = 304, /* VAR_TLS_USE_SNI */ + YYSYMBOL_VAR_IPSET = 305, /* VAR_IPSET */ + YYSYMBOL_VAR_IPSET_NAME_V4 = 306, /* VAR_IPSET_NAME_V4 */ + YYSYMBOL_VAR_IPSET_NAME_V6 = 307, /* VAR_IPSET_NAME_V6 */ + YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 308, /* VAR_TLS_SESSION_TICKET_KEYS */ + YYSYMBOL_VAR_RPZ = 309, /* VAR_RPZ */ + YYSYMBOL_VAR_TAGS = 310, /* VAR_TAGS */ + YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 311, /* VAR_RPZ_ACTION_OVERRIDE */ + YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 312, /* VAR_RPZ_CNAME_OVERRIDE */ + YYSYMBOL_VAR_RPZ_LOG = 313, /* VAR_RPZ_LOG */ + YYSYMBOL_VAR_RPZ_LOG_NAME = 314, /* VAR_RPZ_LOG_NAME */ + YYSYMBOL_VAR_DYNLIB = 315, /* VAR_DYNLIB */ + YYSYMBOL_VAR_DYNLIB_FILE = 316, /* VAR_DYNLIB_FILE */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING = 317, /* VAR_EDNS_CLIENT_STRING */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 318, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + YYSYMBOL_VAR_NSID = 319, /* VAR_NSID */ + YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 320, /* VAR_ZONEMD_PERMISSIVE_MODE */ + YYSYMBOL_VAR_ZONEMD_CHECK = 321, /* VAR_ZONEMD_CHECK */ + YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 322, /* VAR_ZONEMD_REJECT_ABSENCE */ + YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 323, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ + YYSYMBOL_YYACCEPT = 324, /* $accept */ + YYSYMBOL_toplevelvars = 325, /* toplevelvars */ + YYSYMBOL_toplevelvar = 326, /* toplevelvar */ + YYSYMBOL_force_toplevel = 327, /* force_toplevel */ + YYSYMBOL_serverstart = 328, /* serverstart */ + YYSYMBOL_contents_server = 329, /* contents_server */ + YYSYMBOL_content_server = 330, /* content_server */ + YYSYMBOL_stubstart = 331, /* stubstart */ + YYSYMBOL_contents_stub = 332, /* contents_stub */ + YYSYMBOL_content_stub = 333, /* content_stub */ + YYSYMBOL_forwardstart = 334, /* forwardstart */ + YYSYMBOL_contents_forward = 335, /* contents_forward */ + YYSYMBOL_content_forward = 336, /* content_forward */ + YYSYMBOL_viewstart = 337, /* viewstart */ + YYSYMBOL_contents_view = 338, /* contents_view */ + YYSYMBOL_content_view = 339, /* content_view */ + YYSYMBOL_authstart = 340, /* authstart */ + YYSYMBOL_contents_auth = 341, /* contents_auth */ + YYSYMBOL_content_auth = 342, /* content_auth */ + YYSYMBOL_rpz_tag = 343, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 344, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 345, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 346, /* rpz_log */ + YYSYMBOL_rpz_log_name = 347, /* rpz_log_name */ + YYSYMBOL_rpz_signal_nxdomain_ra = 348, /* rpz_signal_nxdomain_ra */ + YYSYMBOL_rpzstart = 349, /* rpzstart */ + YYSYMBOL_contents_rpz = 350, /* contents_rpz */ + YYSYMBOL_content_rpz = 351, /* content_rpz */ + YYSYMBOL_server_num_threads = 352, /* server_num_threads */ + YYSYMBOL_server_verbosity = 353, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 354, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 355, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 356, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 357, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 358, /* server_shm_key */ + YYSYMBOL_server_port = 359, /* server_port */ + YYSYMBOL_server_send_client_subnet = 360, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 361, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 362, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 363, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 364, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 365, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 366, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 367, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 368, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 369, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 370, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 371, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 372, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 373, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 374, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 375, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 376, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 377, /* server_interface_automatic */ + YYSYMBOL_server_do_ip4 = 378, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 379, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 380, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 381, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 382, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 383, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 384, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 385, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 386, /* server_tcp_idle_timeout */ + YYSYMBOL_server_max_reuse_tcp_queries = 387, /* server_max_reuse_tcp_queries */ + YYSYMBOL_server_tcp_reuse_timeout = 388, /* server_tcp_reuse_timeout */ + YYSYMBOL_server_tcp_auth_query_timeout = 389, /* server_tcp_auth_query_timeout */ + YYSYMBOL_server_tcp_keepalive = 390, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 391, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 392, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 393, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 394, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 395, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 396, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 397, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 398, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 399, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 400, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 401, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 402, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 403, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 404, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 405, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 406, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 407, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 408, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 409, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 410, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 411, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 412, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 413, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 414, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 415, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 416, /* server_log_queries */ + YYSYMBOL_server_log_replies = 417, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 418, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 419, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 420, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 421, /* server_chroot */ + YYSYMBOL_server_username = 422, /* server_username */ + YYSYMBOL_server_directory = 423, /* server_directory */ + YYSYMBOL_server_logfile = 424, /* server_logfile */ + YYSYMBOL_server_pidfile = 425, /* server_pidfile */ + YYSYMBOL_server_root_hints = 426, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 427, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 428, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 429, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 430, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 431, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 432, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 433, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 434, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 435, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 436, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 437, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 438, /* server_hide_trustanchor */ + YYSYMBOL_server_hide_http_user_agent = 439, /* server_hide_http_user_agent */ + YYSYMBOL_server_identity = 440, /* server_identity */ + YYSYMBOL_server_version = 441, /* server_version */ + YYSYMBOL_server_http_user_agent = 442, /* server_http_user_agent */ + YYSYMBOL_server_nsid = 443, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 444, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 445, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 446, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 447, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 448, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 449, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 450, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 451, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 452, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 453, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 454, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 455, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 456, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 457, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 458, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 459, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 460, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 461, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 462, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 463, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 464, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 465, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 466, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 467, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 468, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_keep_probing = 469, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 470, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 471, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 472, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 473, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 474, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 475, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 476, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 477, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 478, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 479, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 480, /* server_private_address */ + YYSYMBOL_server_private_domain = 481, /* server_private_domain */ + YYSYMBOL_server_prefetch = 482, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 483, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 484, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 485, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 486, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 487, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 488, /* server_access_control */ + YYSYMBOL_server_module_conf = 489, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 490, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 491, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 492, /* server_val_sig_skew_max */ + YYSYMBOL_server_val_max_restart = 493, /* server_val_max_restart */ + YYSYMBOL_server_cache_max_ttl = 494, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 495, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 496, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 497, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 498, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 499, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 500, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 501, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 502, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 503, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 504, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 505, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 506, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_serve_original_ttl = 507, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 508, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 509, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 510, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 511, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 512, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 513, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 514, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 515, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 516, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 517, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 518, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 519, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 520, /* server_local_zone */ + YYSYMBOL_server_local_data = 521, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 522, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 523, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 524, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 525, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 526, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 527, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 528, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 529, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 530, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 531, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 532, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 533, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 534, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 535, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 536, /* server_access_control_view */ + YYSYMBOL_server_response_ip_tag = 537, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 538, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 539, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 540, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 541, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 542, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 543, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 544, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 545, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 546, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 547, /* server_ratelimit_factor */ + YYSYMBOL_server_ip_ratelimit_backoff = 548, /* server_ip_ratelimit_backoff */ + YYSYMBOL_server_ratelimit_backoff = 549, /* server_ratelimit_backoff */ + YYSYMBOL_server_outbound_msg_retry = 550, /* server_outbound_msg_retry */ + YYSYMBOL_server_low_rtt = 551, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 552, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 553, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 554, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 555, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 556, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 557, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 558, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 559, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 560, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 561, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 562, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 563, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 564, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 565, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 566, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 567, /* server_edns_client_string_opcode */ + YYSYMBOL_stub_name = 568, /* stub_name */ + YYSYMBOL_stub_host = 569, /* stub_host */ + YYSYMBOL_stub_addr = 570, /* stub_addr */ + YYSYMBOL_stub_first = 571, /* stub_first */ + YYSYMBOL_stub_no_cache = 572, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 573, /* stub_ssl_upstream */ + YYSYMBOL_stub_tcp_upstream = 574, /* stub_tcp_upstream */ + YYSYMBOL_stub_prime = 575, /* stub_prime */ + YYSYMBOL_forward_name = 576, /* forward_name */ + YYSYMBOL_forward_host = 577, /* forward_host */ + YYSYMBOL_forward_addr = 578, /* forward_addr */ + YYSYMBOL_forward_first = 579, /* forward_first */ + YYSYMBOL_forward_no_cache = 580, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 581, /* forward_ssl_upstream */ + YYSYMBOL_forward_tcp_upstream = 582, /* forward_tcp_upstream */ + YYSYMBOL_auth_name = 583, /* auth_name */ + YYSYMBOL_auth_zonefile = 584, /* auth_zonefile */ + YYSYMBOL_auth_master = 585, /* auth_master */ + YYSYMBOL_auth_url = 586, /* auth_url */ + YYSYMBOL_auth_allow_notify = 587, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_check = 588, /* auth_zonemd_check */ + YYSYMBOL_auth_zonemd_reject_absence = 589, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 590, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 591, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 592, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 593, /* view_name */ + YYSYMBOL_view_local_zone = 594, /* view_local_zone */ + YYSYMBOL_view_response_ip = 595, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 596, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 597, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 598, /* view_local_data_ptr */ + YYSYMBOL_view_first = 599, /* view_first */ + YYSYMBOL_rcstart = 600, /* rcstart */ + YYSYMBOL_contents_rc = 601, /* contents_rc */ + YYSYMBOL_content_rc = 602, /* content_rc */ + YYSYMBOL_rc_control_enable = 603, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 604, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 605, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 606, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 607, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 608, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 609, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 610, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 611, /* dtstart */ + YYSYMBOL_contents_dt = 612, /* contents_dt */ + YYSYMBOL_content_dt = 613, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 614, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 615, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 616, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 617, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 618, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 619, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 620, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 621, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 622, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 623, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 624, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 625, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 626, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 627, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 628, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 629, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 630, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 631, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 632, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 633, /* pythonstart */ + YYSYMBOL_contents_py = 634, /* contents_py */ + YYSYMBOL_content_py = 635, /* content_py */ + YYSYMBOL_py_script = 636, /* py_script */ + YYSYMBOL_dynlibstart = 637, /* dynlibstart */ + YYSYMBOL_contents_dl = 638, /* contents_dl */ + YYSYMBOL_content_dl = 639, /* content_dl */ + YYSYMBOL_dl_file = 640, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 641, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 642, /* server_log_identity */ + YYSYMBOL_server_response_ip = 643, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 644, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 645, /* dnscstart */ + YYSYMBOL_contents_dnsc = 646, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 647, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 648, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 649, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 650, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 651, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 652, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 653, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 654, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 655, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 656, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 657, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 658, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 659, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 660, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 661, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 662, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 663, /* redis_server_host */ + YYSYMBOL_redis_server_port = 664, /* redis_server_port */ + YYSYMBOL_redis_timeout = 665, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 666, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 667, /* server_tcp_connection_limit */ + YYSYMBOL_ipsetstart = 668, /* ipsetstart */ + YYSYMBOL_contents_ipset = 669, /* contents_ipset */ + YYSYMBOL_content_ipset = 670, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 671, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 672 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -1786,18 +1798,18 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 678 +#define YYLAST 687 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 321 +#define YYNTOKENS 324 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 346 +#define YYNNTS 349 /* YYNRULES -- Number of rules. */ -#define YYNRULES 668 +#define YYNRULES 675 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 993 +#define YYNSTATES 1003 -#define YYMAXUTOK 575 +#define YYMAXUTOK 578 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1868,80 +1880,81 @@ static const yytype_int16 yytranslate[] = 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 + 315, 316, 317, 318, 319, 320, 321, 322, 323 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 192, 192, 192, 193, 193, 194, 194, 195, 195, - 195, 196, 196, 197, 197, 198, 198, 199, 201, 207, - 212, 213, 214, 214, 214, 215, 215, 216, 216, 216, - 217, 217, 218, 218, 218, 219, 219, 220, 220, 220, - 221, 221, 221, 222, 222, 223, 223, 224, 224, 225, - 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, - 230, 230, 231, 231, 232, 232, 232, 233, 233, 233, - 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, - 238, 239, 239, 240, 240, 241, 241, 241, 242, 242, - 243, 243, 244, 244, 245, 245, 245, 246, 246, 247, - 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, - 252, 253, 253, 254, 254, 254, 255, 255, 255, 256, - 256, 256, 257, 257, 257, 257, 258, 259, 259, 259, - 260, 260, 260, 261, 261, 262, 262, 263, 263, 263, - 264, 264, 264, 265, 265, 266, 266, 266, 267, 267, - 268, 268, 268, 269, 269, 270, 270, 271, 271, 272, - 273, 273, 274, 274, 275, 275, 276, 276, 277, 277, - 278, 278, 279, 279, 280, 280, 281, 281, 282, 282, - 282, 283, 283, 284, 284, 285, 285, 286, 287, 287, - 288, 288, 289, 290, 290, 291, 291, 292, 292, 293, - 293, 294, 294, 294, 295, 295, 295, 296, 296, 297, - 298, 298, 299, 299, 300, 300, 301, 301, 302, 302, - 302, 303, 303, 303, 304, 304, 304, 305, 305, 306, - 306, 307, 307, 308, 308, 309, 309, 310, 310, 311, - 311, 314, 327, 328, 329, 329, 329, 329, 329, 330, - 330, 330, 332, 345, 346, 347, 347, 347, 347, 348, - 348, 348, 350, 365, 366, 367, 367, 367, 367, 368, - 368, 368, 370, 390, 391, 392, 392, 392, 392, 393, - 393, 393, 394, 394, 394, 397, 416, 433, 441, 451, - 459, 477, 478, 479, 479, 479, 479, 479, 480, 480, - 480, 481, 481, 483, 492, 501, 512, 521, 530, 539, - 550, 559, 571, 585, 600, 611, 628, 645, 662, 679, - 694, 709, 722, 737, 746, 755, 764, 773, 782, 791, - 800, 809, 818, 827, 836, 845, 854, 863, 876, 887, - 898, 909, 918, 931, 940, 949, 958, 965, 972, 981, - 988, 997, 1005, 1012, 1019, 1027, 1036, 1044, 1060, 1068, - 1076, 1084, 1092, 1100, 1109, 1118, 1132, 1141, 1150, 1159, - 1168, 1177, 1186, 1193, 1200, 1226, 1234, 1241, 1248, 1255, - 1262, 1270, 1278, 1286, 1293, 1304, 1315, 1322, 1331, 1340, - 1349, 1358, 1365, 1372, 1379, 1395, 1403, 1411, 1421, 1431, - 1441, 1455, 1463, 1476, 1487, 1495, 1508, 1517, 1526, 1535, - 1544, 1554, 1564, 1572, 1585, 1594, 1602, 1611, 1619, 1632, - 1641, 1651, 1658, 1668, 1678, 1688, 1698, 1708, 1718, 1728, - 1738, 1745, 1752, 1759, 1768, 1777, 1786, 1795, 1802, 1812, - 1832, 1839, 1857, 1870, 1883, 1896, 1905, 1914, 1923, 1932, - 1942, 1952, 1963, 1972, 1981, 1990, 1999, 2008, 2017, 2026, - 2039, 2052, 2061, 2068, 2077, 2086, 2095, 2104, 2113, 2121, - 2134, 2142, 2187, 2194, 2209, 2219, 2229, 2236, 2243, 2250, - 2259, 2267, 2281, 2302, 2323, 2335, 2347, 2359, 2368, 2389, - 2398, 2407, 2415, 2423, 2436, 2449, 2464, 2479, 2488, 2497, - 2506, 2512, 2521, 2530, 2540, 2550, 2560, 2569, 2579, 2588, - 2601, 2614, 2626, 2640, 2652, 2666, 2675, 2687, 2697, 2704, - 2711, 2720, 2729, 2739, 2749, 2759, 2769, 2776, 2783, 2792, - 2801, 2811, 2821, 2831, 2838, 2845, 2852, 2860, 2870, 2880, - 2890, 2900, 2910, 2920, 2966, 2976, 2984, 2992, 3007, 3016, - 3021, 3022, 3023, 3023, 3023, 3024, 3024, 3024, 3025, 3025, - 3027, 3037, 3046, 3053, 3060, 3067, 3074, 3081, 3088, 3093, - 3094, 3095, 3095, 3095, 3096, 3096, 3096, 3097, 3098, 3098, - 3099, 3099, 3100, 3100, 3101, 3102, 3103, 3104, 3105, 3106, - 3108, 3117, 3127, 3134, 3141, 3150, 3157, 3164, 3171, 3178, - 3187, 3196, 3203, 3210, 3220, 3230, 3240, 3250, 3260, 3270, - 3275, 3276, 3277, 3279, 3285, 3290, 3291, 3292, 3294, 3300, - 3310, 3317, 3326, 3334, 3339, 3340, 3342, 3342, 3342, 3343, - 3343, 3344, 3345, 3346, 3347, 3348, 3350, 3360, 3369, 3376, - 3385, 3392, 3401, 3409, 3422, 3430, 3443, 3448, 3449, 3450, - 3450, 3451, 3451, 3451, 3452, 3454, 3466, 3478, 3490, 3505, - 3518, 3531, 3542, 3547, 3548, 3549, 3549, 3551, 3566 + 0, 194, 194, 194, 195, 195, 196, 196, 197, 197, + 197, 198, 198, 199, 199, 200, 200, 201, 203, 209, + 214, 215, 216, 216, 216, 217, 217, 218, 218, 218, + 219, 219, 220, 220, 220, 221, 221, 222, 222, 222, + 223, 223, 223, 224, 224, 225, 225, 226, 226, 227, + 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, + 232, 232, 233, 233, 234, 234, 234, 235, 235, 235, + 236, 236, 237, 237, 238, 238, 239, 239, 240, 240, + 240, 241, 241, 242, 242, 243, 243, 243, 244, 244, + 245, 245, 246, 246, 247, 247, 247, 248, 248, 249, + 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, + 254, 255, 255, 256, 256, 256, 257, 257, 257, 258, + 258, 258, 259, 259, 259, 259, 260, 261, 261, 261, + 262, 262, 262, 263, 263, 264, 264, 265, 265, 265, + 266, 266, 266, 267, 267, 268, 268, 268, 269, 269, + 270, 270, 270, 271, 271, 272, 272, 273, 273, 274, + 275, 275, 276, 276, 277, 277, 278, 278, 279, 279, + 280, 280, 281, 281, 282, 282, 283, 283, 284, 284, + 285, 285, 285, 286, 286, 287, 287, 288, 288, 289, + 290, 290, 291, 291, 292, 293, 293, 294, 294, 295, + 295, 296, 296, 297, 297, 297, 298, 298, 298, 299, + 299, 300, 301, 301, 302, 302, 303, 303, 304, 304, + 305, 305, 305, 306, 306, 306, 307, 307, 307, 308, + 308, 309, 309, 310, 310, 311, 311, 312, 312, 313, + 313, 314, 314, 317, 330, 331, 332, 332, 332, 332, + 332, 333, 333, 333, 335, 348, 349, 350, 350, 350, + 350, 351, 351, 351, 353, 368, 369, 370, 370, 370, + 370, 371, 371, 371, 373, 393, 394, 395, 395, 395, + 395, 396, 396, 396, 397, 397, 397, 400, 419, 436, + 444, 454, 461, 471, 489, 490, 491, 491, 491, 491, + 491, 492, 492, 492, 493, 493, 493, 493, 495, 504, + 513, 524, 533, 542, 551, 562, 571, 583, 597, 612, + 623, 640, 657, 674, 691, 706, 721, 734, 749, 758, + 767, 776, 785, 794, 803, 812, 821, 830, 839, 848, + 857, 866, 875, 888, 899, 910, 921, 930, 943, 952, + 961, 970, 977, 984, 993, 1000, 1009, 1017, 1024, 1031, + 1039, 1048, 1056, 1072, 1080, 1088, 1096, 1104, 1112, 1121, + 1130, 1144, 1153, 1162, 1171, 1180, 1189, 1198, 1205, 1212, + 1238, 1246, 1253, 1260, 1267, 1274, 1282, 1290, 1298, 1305, + 1316, 1327, 1334, 1343, 1352, 1361, 1370, 1377, 1384, 1391, + 1407, 1415, 1423, 1433, 1443, 1453, 1467, 1475, 1488, 1499, + 1507, 1520, 1529, 1538, 1547, 1556, 1566, 1576, 1584, 1597, + 1606, 1614, 1623, 1631, 1644, 1653, 1663, 1670, 1680, 1690, + 1700, 1710, 1720, 1730, 1740, 1750, 1757, 1764, 1771, 1780, + 1789, 1798, 1807, 1814, 1824, 1844, 1851, 1869, 1882, 1895, + 1908, 1917, 1926, 1935, 1944, 1954, 1964, 1975, 1984, 1993, + 2002, 2011, 2020, 2029, 2038, 2051, 2064, 2073, 2080, 2089, + 2098, 2107, 2116, 2125, 2133, 2146, 2154, 2199, 2206, 2221, + 2231, 2241, 2248, 2255, 2262, 2271, 2279, 2293, 2314, 2335, + 2347, 2359, 2371, 2380, 2401, 2410, 2419, 2427, 2435, 2448, + 2461, 2476, 2491, 2500, 2509, 2519, 2529, 2538, 2544, 2553, + 2562, 2572, 2582, 2592, 2601, 2611, 2620, 2633, 2646, 2658, + 2672, 2684, 2698, 2707, 2719, 2729, 2736, 2743, 2752, 2761, + 2771, 2781, 2791, 2801, 2808, 2815, 2824, 2833, 2843, 2853, + 2863, 2870, 2877, 2884, 2892, 2902, 2912, 2922, 2932, 2942, + 2952, 2998, 3008, 3016, 3024, 3039, 3048, 3053, 3054, 3055, + 3055, 3055, 3056, 3056, 3056, 3057, 3057, 3059, 3069, 3078, + 3085, 3092, 3099, 3106, 3113, 3120, 3125, 3126, 3127, 3127, + 3127, 3128, 3128, 3128, 3129, 3130, 3130, 3131, 3131, 3132, + 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3140, 3149, 3159, + 3166, 3173, 3182, 3189, 3196, 3203, 3210, 3219, 3228, 3235, + 3242, 3252, 3262, 3272, 3282, 3292, 3302, 3307, 3308, 3309, + 3311, 3317, 3322, 3323, 3324, 3326, 3332, 3342, 3349, 3358, + 3366, 3371, 3372, 3374, 3374, 3374, 3375, 3375, 3376, 3377, + 3378, 3379, 3380, 3382, 3392, 3401, 3408, 3417, 3424, 3433, + 3441, 3454, 3462, 3475, 3480, 3481, 3482, 3482, 3483, 3483, + 3483, 3484, 3486, 3498, 3510, 3522, 3537, 3550, 3563, 3574, + 3579, 3580, 3581, 3581, 3583, 3598 }; #endif @@ -2032,7 +2045,8 @@ static const char *const yytname[] = "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_OUTBOUND_MSG_RETRY", "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_IP_RATELIMIT_FACTOR", - "VAR_RATELIMIT_FACTOR", "VAR_SEND_CLIENT_SUBNET", + "VAR_RATELIMIT_FACTOR", "VAR_IP_RATELIMIT_BACKOFF", + "VAR_RATELIMIT_BACKOFF", "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE", "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE", "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6", "VAR_MIN_CLIENT_SUBNET_IPV4", @@ -2079,14 +2093,15 @@ static const char *const yytname[] = "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK", - "VAR_ZONEMD_REJECT_ABSENCE", "$accept", "toplevelvars", "toplevelvar", - "force_toplevel", "serverstart", "contents_server", "content_server", - "stubstart", "contents_stub", "content_stub", "forwardstart", - "contents_forward", "content_forward", "viewstart", "contents_view", - "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", - "server_verbosity", "server_statistics_interval", + "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA", "$accept", + "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "authstart", + "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", + "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpz_signal_nxdomain_ra", "rpzstart", "contents_rpz", "content_rpz", + "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -2170,8 +2185,9 @@ static const char *const yytname[] = "server_ratelimit_size", "server_ip_ratelimit_slabs", "server_ratelimit_slabs", "server_ratelimit_for_domain", "server_ratelimit_below_domain", "server_ip_ratelimit_factor", - "server_ratelimit_factor", "server_outbound_msg_retry", "server_low_rtt", - "server_fast_server_num", "server_fast_server_permil", + "server_ratelimit_factor", "server_ip_ratelimit_backoff", + "server_ratelimit_backoff", "server_outbound_msg_retry", + "server_low_rtt", "server_fast_server_num", "server_fast_server_permil", "server_qname_minimisation", "server_qname_minimisation_strict", "server_pad_responses", "server_pad_responses_block_size", "server_pad_queries", "server_pad_queries_block_size", @@ -2263,11 +2279,11 @@ static const yytype_int16 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 + 575, 576, 577, 578 }; #endif -#define YYPACT_NINF (-305) +#define YYPACT_NINF (-310) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -2281,106 +2297,107 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -305, 0, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, 301, -43, -38, -42, -44, -28, -29, -151, - -109, -304, -197, -195, -296, 3, 4, 27, 28, 31, - 32, 33, 34, 35, 37, 38, 39, 40, 41, 53, - 54, 55, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, - 92, 95, 97, 98, 100, 101, 103, 105, 106, 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, 136, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 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, 219, 220, 221, 222, - 223, 225, 231, 232, 233, 234, 235, 237, 238, 240, - 246, 247, 248, 249, 250, 251, 253, 254, 255, 256, - 257, 258, 259, 261, 262, 263, 264, 267, 268, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 294, 295, 296, - 298, 299, 300, 302, 336, 337, 338, 339, 343, 344, - 345, 387, 388, 389, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, 390, 391, 392, 393, 394, 395, - 401, 405, -305, -305, -305, -305, -305, -305, -305, -305, - -305, 406, 433, 434, 435, 437, 438, 446, -305, -305, - -305, -305, -305, -305, -305, -305, 459, 460, 461, 462, - 463, 464, 465, -305, -305, -305, -305, -305, -305, -305, - -305, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, 476, 477, 478, 519, 521, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, 540, 541, - 542, 543, 544, 545, 546, 547, -305, -305, -305, -305, - -305, -305, -305, -305, -305, 548, 549, 550, 561, 562, - 563, 564, 565, 566, 567, 569, 570, 571, 572, 573, - 574, 575, 578, 581, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, 584, -305, -305, 585, -305, -305, - 594, 595, 596, 598, 599, 600, 601, 602, 603, 604, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, 605, 610, 611, 612, 613, 614, -305, -305, -305, - -305, -305, -305, -305, 615, 616, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, 617, - 618, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, 619, - 620, 621, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, 622, 623, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, 624, 625, 626, 627, 628, 629, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, 630, -305, -305, -305, -305, -305, - -305, -305, -305, -305, 631, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, 632, -305, -305, 633, 634, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, 635, 636, 637, -305, -305, -305, -305, -305, -305, - -305, -305, -305 + -310, 0, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, 303, -39, -32, -43, -30, -44, -42, -97, + -110, -309, -229, -233, -303, 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, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 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, 218, 219, 221, 222, 223, + 224, 225, 226, 227, 232, 233, 234, 235, 236, 237, + 239, 248, 249, 250, 251, 254, 255, 261, 263, 264, + 265, 266, 267, 268, 270, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 296, 297, 298, 300, + 301, 302, 304, 338, 339, 340, 341, 345, 346, 347, + 389, 390, 391, 392, 393, 394, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 395, 396, + 397, 403, 407, 408, 435, 436, -310, -310, -310, -310, + -310, -310, -310, -310, -310, 437, 439, 440, 448, 461, + 462, 463, -310, -310, -310, -310, -310, -310, -310, -310, + 464, 465, 466, 467, 468, 469, 470, -310, -310, -310, + -310, -310, -310, -310, -310, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, 523, 525, 544, 545, + 546, 547, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, 548, 549, 550, 551, 552, + 553, 554, 565, -310, -310, -310, -310, -310, -310, -310, + -310, -310, 566, 567, 568, 569, 570, 571, 573, 574, + 575, 576, 577, 578, 579, 582, 585, 588, 589, 598, + 599, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, 600, -310, -310, 602, -310, -310, 603, 604, 605, + 606, 607, 608, 609, 614, 615, 616, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 617, 618, + 619, 620, 621, 622, -310, -310, -310, -310, -310, -310, + -310, 623, 624, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, 625, 626, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, 627, 628, 629, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + 630, 631, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, 632, 633, 634, 635, 636, 637, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, 638, -310, -310, -310, -310, -310, -310, + -310, -310, -310, 639, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, 640, -310, -310, 641, 642, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, 643, 644, 645, -310, -310, -310, -310, -310, -310, + -310, -310, -310 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -2388,10 +2405,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 241, 252, 549, 609, 568, - 262, 623, 646, 272, 662, 290, 614, 3, 17, 21, - 243, 254, 264, 274, 292, 551, 570, 611, 616, 625, - 648, 664, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 243, 254, 556, 616, 575, + 264, 630, 653, 274, 669, 293, 621, 3, 17, 21, + 245, 256, 266, 276, 295, 558, 577, 618, 623, 632, + 655, 671, 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, @@ -2414,160 +2431,161 @@ static const yytype_int16 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, - 0, 0, 0, 0, 20, 22, 23, 88, 91, 100, - 204, 205, 24, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 37, 79, 25, 92, 93, 48, 72, - 87, 26, 27, 30, 31, 28, 29, 32, 33, 34, - 238, 239, 240, 35, 36, 124, 216, 125, 127, 128, - 129, 218, 223, 219, 230, 231, 232, 233, 130, 131, - 132, 133, 134, 135, 136, 200, 89, 78, 104, 122, - 123, 228, 225, 126, 38, 39, 40, 41, 42, 80, - 94, 95, 111, 66, 76, 67, 208, 209, 105, 58, - 59, 207, 62, 60, 61, 63, 236, 115, 119, 140, - 150, 178, 153, 229, 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, 174, 98, 99, 117, 118, 226, 103, 57, - 81, 84, 65, 68, 106, 107, 108, 82, 175, 109, - 69, 70, 71, 217, 121, 192, 193, 194, 195, 196, - 197, 198, 206, 110, 77, 237, 112, 113, 114, 176, - 74, 75, 96, 85, 86, 101, 137, 138, 227, 139, - 145, 146, 147, 179, 180, 182, 184, 185, 183, 186, - 201, 151, 152, 157, 158, 155, 156, 159, 160, 162, - 161, 163, 220, 222, 221, 177, 187, 188, 189, 190, - 191, 210, 212, 211, 213, 214, 215, 234, 235, 181, - 199, 202, 203, 224, 0, 0, 0, 0, 0, 0, - 0, 0, 242, 244, 245, 246, 248, 249, 250, 251, - 247, 0, 0, 0, 0, 0, 0, 0, 253, 255, - 256, 257, 258, 259, 260, 261, 0, 0, 0, 0, - 0, 0, 0, 263, 265, 266, 269, 270, 267, 271, - 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 273, 275, 276, 277, 278, 282, 283, 284, 279, - 280, 281, 0, 0, 0, 0, 0, 295, 299, 300, - 301, 302, 291, 293, 294, 296, 297, 298, 0, 0, - 0, 0, 0, 0, 0, 0, 550, 552, 554, 553, - 559, 555, 556, 557, 558, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 22, 23, 88, + 91, 100, 206, 207, 24, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 37, 79, 25, 92, 93, + 48, 72, 87, 26, 27, 30, 31, 28, 29, 32, + 33, 34, 240, 241, 242, 35, 36, 124, 218, 125, + 127, 128, 129, 220, 225, 221, 232, 233, 234, 235, + 130, 131, 132, 133, 134, 135, 136, 202, 89, 78, + 104, 122, 123, 230, 227, 126, 38, 39, 40, 41, + 42, 80, 94, 95, 111, 66, 76, 67, 210, 211, + 105, 58, 59, 209, 62, 60, 61, 63, 238, 115, + 119, 140, 150, 180, 153, 231, 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, 228, + 103, 57, 81, 84, 65, 68, 106, 107, 108, 82, + 177, 109, 69, 70, 71, 219, 121, 194, 195, 196, + 197, 198, 199, 200, 208, 110, 77, 239, 112, 113, + 114, 178, 74, 75, 96, 85, 86, 101, 137, 138, + 229, 139, 145, 146, 147, 181, 182, 184, 186, 187, + 185, 188, 203, 151, 152, 157, 158, 155, 156, 159, + 160, 162, 161, 164, 163, 165, 222, 224, 223, 179, + 189, 190, 191, 192, 193, 212, 214, 213, 215, 216, + 217, 236, 237, 183, 201, 204, 205, 226, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 246, 247, 248, + 250, 251, 252, 253, 249, 0, 0, 0, 0, 0, + 0, 0, 255, 257, 258, 259, 260, 261, 262, 263, + 0, 0, 0, 0, 0, 0, 0, 265, 267, 268, + 271, 272, 269, 273, 270, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 275, 277, 278, 279, 280, + 284, 285, 286, 281, 282, 283, 0, 0, 0, 0, + 0, 0, 298, 302, 303, 304, 305, 306, 294, 296, + 297, 299, 300, 301, 307, 0, 0, 0, 0, 0, + 0, 0, 0, 557, 559, 561, 560, 566, 562, 563, + 564, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 569, 571, 573, 572, 574, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, - 586, 587, 588, 589, 0, 610, 612, 0, 615, 617, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 624, 626, 627, 628, 630, 631, 629, 632, 633, 634, - 635, 0, 0, 0, 0, 0, 0, 647, 649, 650, - 651, 652, 653, 654, 0, 0, 663, 665, 666, 304, - 303, 310, 323, 321, 333, 329, 330, 334, 331, 332, - 335, 336, 337, 341, 342, 372, 373, 374, 375, 376, - 404, 405, 406, 412, 413, 326, 414, 415, 418, 416, - 417, 421, 422, 423, 437, 387, 388, 391, 392, 424, - 440, 381, 383, 441, 448, 449, 450, 327, 403, 468, - 469, 382, 462, 365, 322, 377, 438, 445, 425, 0, - 0, 472, 328, 305, 364, 429, 306, 324, 325, 378, - 379, 470, 427, 431, 432, 339, 338, 307, 473, 407, - 436, 366, 386, 442, 443, 444, 447, 461, 380, 466, - 464, 465, 395, 402, 433, 434, 396, 397, 426, 452, - 367, 368, 371, 343, 345, 340, 346, 347, 348, 349, - 356, 357, 358, 359, 360, 361, 362, 474, 475, 477, - 408, 409, 410, 411, 419, 420, 478, 479, 480, 0, - 0, 0, 428, 398, 400, 619, 489, 493, 491, 490, - 494, 492, 499, 0, 0, 497, 498, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 430, 446, 467, - 503, 504, 399, 481, 0, 0, 0, 0, 0, 0, - 453, 454, 455, 456, 457, 458, 459, 460, 620, 389, - 390, 393, 384, 451, 363, 308, 309, 385, 505, 506, - 507, 508, 509, 511, 510, 512, 513, 514, 344, 351, - 500, 502, 501, 350, 0, 370, 435, 476, 369, 401, - 352, 353, 355, 354, 0, 516, 394, 463, 517, 518, - 519, 524, 522, 523, 520, 521, 525, 526, 527, 528, - 530, 531, 529, 542, 0, 546, 547, 0, 0, 548, - 532, 540, 533, 534, 535, 539, 541, 536, 537, 538, - 285, 286, 287, 288, 289, 560, 562, 561, 564, 565, - 566, 567, 563, 590, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 591, 601, 602, 603, 604, 605, 606, - 607, 608, 613, 618, 636, 637, 638, 641, 639, 640, - 642, 643, 644, 645, 655, 656, 657, 658, 659, 660, - 667, 668, 439, 471, 488, 621, 622, 495, 496, 482, - 483, 0, 0, 0, 487, 661, 515, 543, 544, 545, - 486, 484, 485 + 0, 576, 578, 580, 579, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, + 596, 0, 617, 619, 0, 622, 624, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 631, 633, 634, + 635, 637, 638, 636, 639, 640, 641, 642, 0, 0, + 0, 0, 0, 0, 654, 656, 657, 658, 659, 660, + 661, 0, 0, 670, 672, 673, 309, 308, 315, 328, + 326, 338, 334, 335, 339, 336, 337, 340, 341, 342, + 346, 347, 377, 378, 379, 380, 381, 409, 410, 411, + 417, 418, 331, 419, 420, 423, 421, 422, 426, 427, + 428, 442, 392, 393, 396, 397, 429, 445, 386, 388, + 446, 453, 454, 455, 332, 408, 473, 474, 387, 467, + 370, 327, 382, 443, 450, 430, 0, 0, 477, 333, + 310, 369, 434, 311, 329, 330, 383, 384, 475, 432, + 436, 437, 344, 343, 312, 478, 412, 441, 371, 391, + 447, 448, 449, 452, 466, 385, 471, 469, 470, 400, + 407, 438, 439, 401, 402, 431, 457, 372, 373, 376, + 348, 350, 345, 351, 352, 353, 354, 361, 362, 363, + 364, 365, 366, 367, 479, 480, 482, 413, 414, 415, + 416, 424, 425, 483, 484, 485, 0, 0, 0, 433, + 403, 405, 626, 494, 498, 496, 495, 499, 497, 506, + 0, 0, 502, 503, 504, 505, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 435, 451, 472, 510, + 511, 404, 486, 0, 0, 0, 0, 0, 0, 458, + 459, 460, 461, 462, 463, 464, 465, 627, 394, 395, + 398, 389, 456, 368, 313, 314, 390, 512, 513, 514, + 515, 516, 518, 517, 519, 520, 521, 349, 356, 507, + 509, 508, 355, 0, 375, 440, 481, 374, 406, 357, + 358, 360, 359, 0, 523, 399, 468, 524, 525, 526, + 531, 529, 530, 527, 528, 532, 533, 534, 535, 537, + 538, 536, 549, 0, 553, 554, 0, 0, 555, 539, + 547, 540, 541, 542, 546, 548, 543, 544, 545, 287, + 288, 289, 290, 291, 292, 567, 569, 568, 571, 572, + 573, 574, 570, 597, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 598, 608, 609, 610, 611, 612, 613, + 614, 615, 620, 625, 643, 644, 645, 648, 646, 647, + 649, 650, 651, 652, 662, 663, 664, 665, 666, 667, + 674, 675, 444, 476, 493, 628, 629, 500, 501, 487, + 488, 0, 0, 0, 492, 668, 522, 550, 551, 552, + 491, 489, 490 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, 274, 638, 639, 640, - 641, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305 + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -27, + 646, 647, 648, 649, -310, -310, 650, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 32, 264, 20, 33, 492, - 21, 34, 508, 22, 35, 523, 23, 36, 541, 557, - 558, 559, 560, 561, 24, 37, 562, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 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, 493, 494, 495, 496, 497, 498, 499, 500, 509, - 510, 511, 512, 513, 514, 515, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 524, 525, 526, 527, - 528, 529, 530, 25, 38, 576, 577, 578, 579, 580, - 581, 582, 583, 584, 26, 39, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 27, 40, 625, 626, - 28, 41, 628, 629, 479, 480, 481, 482, 29, 42, - 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, - 650, 30, 43, 657, 658, 659, 660, 661, 662, 663, - 483, 31, 44, 666, 667, 668 + -1, 1, 17, 18, 19, 32, 266, 20, 33, 496, + 21, 34, 512, 22, 35, 527, 23, 36, 545, 562, + 563, 564, 565, 566, 567, 24, 37, 568, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 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, 497, 498, 499, 500, 501, 502, + 503, 504, 513, 514, 515, 516, 517, 518, 519, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 528, + 529, 530, 531, 532, 533, 534, 25, 38, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 26, 39, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 628, 629, 630, 27, + 40, 632, 633, 28, 41, 635, 636, 483, 484, 485, + 486, 29, 42, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 30, 43, 664, 665, 666, 667, + 668, 669, 670, 487, 31, 44, 673, 674, 675 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -2575,157 +2593,159 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 2, 531, 484, 516, 485, 486, 624, 501, 664, 665, - 627, 3, 4, 669, 670, 502, 503, 531, 585, 586, - 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 671, 672, 517, - 518, 673, 674, 675, 676, 677, 5, 678, 679, 680, - 681, 682, 6, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 683, 684, 685, 519, 487, 568, 569, - 570, 571, 572, 573, 574, 575, 651, 652, 653, 654, - 655, 656, 686, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 7, 700, 701, 702, - 488, 703, 704, 489, 504, 705, 505, 706, 707, 506, - 708, 709, 490, 710, 8, 711, 712, 713, 714, 715, - 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, - 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, - 736, 737, 738, 739, 740, 741, 742, 520, 521, 743, - 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, - 754, 755, 756, 757, 758, 759, 760, 761, 9, 762, - 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 779, 780, 522, 781, - 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, - 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, - 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, - 812, 813, 814, 815, 816, 817, 818, 819, 10, 820, - 821, 822, 823, 824, 532, 825, 533, 534, 535, 536, - 537, 826, 827, 828, 829, 830, 538, 831, 832, 11, - 833, 491, 533, 534, 535, 507, 834, 835, 836, 837, - 838, 839, 538, 840, 841, 842, 843, 844, 845, 846, - 12, 847, 848, 849, 850, 539, 540, 851, 852, 13, - 552, 553, 554, 555, 556, 853, 854, 855, 856, 857, - 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, - 868, 869, 870, 14, 871, 872, 873, 15, 874, 875, - 876, 563, 877, 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, 878, 879, 880, 881, - 77, 78, 79, 882, 883, 884, 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, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 121, 122, 123, 124, - 125, 894, 126, 127, 128, 895, 896, 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, 897, 898, 899, 155, 900, 901, 156, - 157, 158, 159, 160, 161, 162, 902, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 903, - 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, - 914, 915, 916, 917, 918, 919, 920, 921, 922, 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, 923, - 215, 924, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, - 935, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 936, 937, 938, 939, 940, 941, 942, 244, 943, - 944, 945, 946, 947, 948, 949, 245, 246, 950, 247, - 248, 951, 249, 250, 952, 953, 251, 252, 253, 254, - 255, 256, 257, 258, 954, 955, 956, 259, 957, 958, - 959, 960, 961, 962, 963, 964, 260, 261, 262, 263, - 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, - 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, - 985, 986, 987, 988, 989, 990, 991, 992, 0, 0, + 2, 535, 520, 671, 672, 631, 488, 634, 489, 490, + 569, 3, 4, 505, 676, 535, 677, 678, 679, 680, + 681, 506, 507, 637, 638, 639, 640, 641, 642, 643, + 644, 645, 646, 682, 683, 684, 685, 686, 521, 522, + 658, 659, 660, 661, 662, 663, 5, 687, 688, 689, + 690, 691, 6, 692, 693, 575, 576, 577, 578, 579, + 580, 581, 582, 694, 695, 523, 696, 697, 698, 699, + 700, 491, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 701, 702, 703, 704, 705, 7, 706, 707, 708, + 709, 710, 711, 712, 492, 713, 714, 493, 715, 716, + 508, 717, 509, 718, 8, 510, 494, 719, 720, 721, + 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, + 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 745, 746, 747, 524, 525, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 9, 768, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 526, + 788, 789, 790, 791, 792, 793, 794, 795, 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, + 10, 828, 829, 830, 831, 832, 833, 834, 537, 538, + 539, 540, 835, 836, 837, 838, 839, 840, 542, 841, + 536, 11, 537, 538, 539, 540, 541, 495, 842, 843, + 844, 845, 542, 511, 846, 847, 556, 557, 558, 559, + 560, 848, 12, 849, 850, 851, 852, 853, 854, 561, + 855, 13, 856, 857, 858, 859, 860, 861, 862, 863, + 864, 543, 544, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 14, 877, 878, 879, 15, + 880, 881, 882, 0, 883, 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, 884, 885, + 886, 887, 77, 78, 79, 888, 889, 890, 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, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 121, 122, + 123, 124, 125, 900, 126, 127, 128, 901, 902, 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, 903, 904, 905, 155, 906, + 907, 156, 157, 158, 159, 160, 161, 162, 908, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 909, 910, 911, 912, 913, 914, 915, 916, 917, + 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, + 928, 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, 929, 217, 930, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 942, 943, 944, 945, 946, + 947, 948, 246, 949, 950, 951, 952, 953, 954, 955, + 247, 248, 956, 249, 250, 957, 251, 252, 958, 959, + 253, 254, 255, 256, 257, 258, 259, 260, 960, 961, + 962, 261, 963, 964, 965, 966, 967, 968, 969, 970, + 262, 263, 264, 265, 971, 972, 973, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1000, 1001, 1002, 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, 564, 565, 566, 567 + 0, 0, 0, 570, 571, 572, 573, 574 }; static const yytype_int16 yycheck[] = { - 0, 45, 45, 45, 47, 48, 115, 45, 304, 305, - 314, 11, 12, 10, 10, 53, 54, 45, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 10, 10, 81, - 82, 10, 10, 10, 10, 10, 46, 10, 10, 10, - 10, 10, 52, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 10, 10, 10, 108, 110, 97, 98, - 99, 100, 101, 102, 103, 104, 271, 272, 273, 274, - 275, 276, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 96, 10, 10, 10, - 143, 10, 10, 146, 142, 10, 144, 10, 10, 147, - 10, 10, 155, 10, 114, 10, 10, 10, 10, 10, + 0, 45, 45, 306, 307, 115, 45, 316, 47, 48, + 37, 11, 12, 45, 10, 45, 10, 10, 10, 10, + 10, 53, 54, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 10, 10, 10, 10, 10, 81, 82, + 273, 274, 275, 276, 277, 278, 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, 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, 10, 189, 190, 10, + 10, 10, 10, 10, 10, 10, 189, 190, 10, 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, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 230, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 232, 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, 228, 10, - 10, 10, 10, 10, 278, 10, 280, 281, 282, 283, - 284, 10, 10, 10, 10, 10, 290, 10, 10, 249, - 10, 294, 280, 281, 282, 293, 10, 10, 10, 10, - 10, 10, 290, 10, 10, 10, 10, 10, 10, 10, - 270, 10, 10, 10, 10, 319, 320, 10, 10, 279, - 308, 309, 310, 311, 312, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 303, 10, 10, 10, 307, 10, 10, - 10, 37, 10, 313, 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, + 230, 10, 10, 10, 10, 10, 10, 10, 282, 283, + 284, 285, 10, 10, 10, 10, 10, 10, 292, 10, + 280, 251, 282, 283, 284, 285, 286, 296, 10, 10, + 10, 10, 292, 295, 10, 10, 310, 311, 312, 313, + 314, 10, 272, 10, 10, 10, 10, 10, 10, 323, + 10, 281, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 321, 322, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 305, 10, 10, 10, 309, + 10, 10, 10, -1, 10, 315, 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, 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, 10, - 229, 10, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 10, 10, 10, 10, 10, 10, 10, 277, 10, - 10, 10, 10, 10, 10, 10, 285, 286, 10, 288, - 289, 10, 291, 292, 10, 10, 295, 296, 297, 298, - 299, 300, 301, 302, 10, 10, 10, 306, 10, 10, - 10, 10, 10, 10, 10, 10, 315, 316, 317, 318, + 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, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 10, 10, 10, 10, 10, + 10, 10, 279, 10, 10, 10, 10, 10, 10, 10, + 287, 288, 10, 290, 291, 10, 293, 294, 10, 10, + 297, 298, 299, 300, 301, 302, 303, 304, 10, 10, + 10, 308, 10, 10, 10, 10, 10, 10, 10, 10, + 317, 318, 319, 320, 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, -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, -1, -1, -1, -1, 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_int16 yystos[] = { - 0, 322, 0, 11, 12, 46, 52, 96, 114, 168, - 228, 249, 270, 279, 303, 307, 313, 323, 324, 325, - 328, 331, 334, 337, 345, 594, 605, 627, 631, 639, - 652, 662, 326, 329, 332, 335, 338, 346, 595, 606, - 628, 632, 640, 653, 663, 13, 14, 15, 16, 17, + 0, 325, 0, 11, 12, 46, 52, 96, 114, 168, + 230, 251, 272, 281, 305, 309, 315, 326, 327, 328, + 331, 334, 337, 340, 349, 600, 611, 633, 637, 645, + 658, 668, 329, 332, 335, 338, 341, 350, 601, 612, + 634, 638, 646, 659, 669, 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, @@ -2742,52 +2762,53 @@ static const yytype_int16 yystos[] = 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, 229, 231, 232, 233, 234, + 223, 224, 225, 226, 227, 228, 229, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 277, 285, 286, 288, 289, 291, - 292, 295, 296, 297, 298, 299, 300, 301, 302, 306, - 315, 316, 317, 318, 327, 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, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 560, 561, 635, - 636, 637, 638, 661, 45, 47, 48, 110, 143, 146, - 155, 294, 330, 562, 563, 564, 565, 566, 567, 568, - 569, 45, 53, 54, 142, 144, 147, 293, 333, 570, - 571, 572, 573, 574, 575, 576, 45, 81, 82, 108, - 189, 190, 230, 336, 587, 588, 589, 590, 591, 592, - 593, 45, 278, 280, 281, 282, 283, 284, 290, 319, - 320, 339, 577, 578, 579, 580, 581, 582, 583, 584, - 585, 586, 308, 309, 310, 311, 312, 340, 341, 342, - 343, 344, 347, 577, 578, 579, 580, 581, 97, 98, - 99, 100, 101, 102, 103, 104, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 115, 629, 630, 314, 633, 634, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 271, 272, 273, 274, 275, 276, 654, 655, 656, - 657, 658, 659, 660, 304, 305, 664, 665, 666, 10, + 245, 246, 247, 248, 249, 250, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 279, 287, 288, 290, + 291, 293, 294, 297, 298, 299, 300, 301, 302, 303, + 304, 308, 317, 318, 319, 320, 330, 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, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 641, 642, 643, 644, 667, 45, 47, + 48, 110, 143, 146, 155, 296, 333, 568, 569, 570, + 571, 572, 573, 574, 575, 45, 53, 54, 142, 144, + 147, 295, 336, 576, 577, 578, 579, 580, 581, 582, + 45, 81, 82, 108, 189, 190, 232, 339, 593, 594, + 595, 596, 597, 598, 599, 45, 280, 282, 283, 284, + 285, 286, 292, 321, 322, 342, 583, 584, 585, 586, + 587, 588, 589, 590, 591, 592, 310, 311, 312, 313, + 314, 323, 343, 344, 345, 346, 347, 348, 351, 583, + 584, 585, 586, 587, 590, 97, 98, 99, 100, 101, + 102, 103, 104, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, + 632, 115, 635, 636, 316, 639, 640, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 273, 274, + 275, 276, 277, 278, 660, 661, 662, 663, 664, 665, + 666, 306, 307, 670, 671, 672, 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, @@ -2826,73 +2847,74 @@ static const yytype_int16 yystos[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { - 0, 321, 322, 322, 323, 323, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, 324, 325, - 326, 326, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 328, 329, 329, 330, 330, 330, 330, 330, 330, - 330, 330, 331, 332, 332, 333, 333, 333, 333, 333, - 333, 333, 334, 335, 335, 336, 336, 336, 336, 336, - 336, 336, 337, 338, 338, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 340, 341, 342, 343, 344, - 345, 346, 346, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 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, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 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, 583, 584, - 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, - 595, 595, 596, 596, 596, 596, 596, 596, 596, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 606, 607, 607, 607, 607, 607, 607, 607, 607, 607, - 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 628, 628, 629, 630, 631, 632, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 640, 641, 641, 641, 641, - 641, 641, 641, 641, 641, 641, 642, 643, 644, 645, - 646, 647, 648, 649, 650, 651, 652, 653, 653, 654, - 654, 654, 654, 654, 654, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 663, 664, 664, 665, 666 + 0, 324, 325, 325, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 327, 328, + 329, 329, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, + 330, 330, 330, 331, 332, 332, 333, 333, 333, 333, + 333, 333, 333, 333, 334, 335, 335, 336, 336, 336, + 336, 336, 336, 336, 337, 338, 338, 339, 339, 339, + 339, 339, 339, 339, 340, 341, 341, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 350, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 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, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 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, 583, + 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 601, 602, + 602, 602, 602, 602, 602, 602, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 612, 613, 613, + 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, + 613, 613, 613, 613, 613, 613, 613, 614, 615, 616, + 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, + 627, 628, 629, 630, 631, 632, 633, 634, 634, 635, + 636, 637, 638, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 646, 647, 647, 647, 647, 647, 647, 647, + 647, 647, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 659, 660, 660, 660, 660, + 660, 660, 661, 662, 663, 664, 665, 666, 667, 668, + 669, 669, 670, 670, 671, 672 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2922,49 +2944,50 @@ static const yytype_int8 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, 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, + 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, 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, 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, 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, + 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, 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, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 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, 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, 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, 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, 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 + 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 }; @@ -3445,23 +3468,23 @@ yyparse (void) switch (yyn) { case 18: -#line 202 "util/configparser.y" +#line 204 "util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); } -#line 3453 "util/configparser.c" +#line 3476 "util/configparser.c" break; case 19: -#line 208 "util/configparser.y" +#line 210 "util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 3461 "util/configparser.c" +#line 3484 "util/configparser.c" break; - case 241: -#line 315 "util/configparser.y" + case 243: +#line 318 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -3473,11 +3496,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 3477 "util/configparser.c" +#line 3500 "util/configparser.c" break; - case 252: -#line 333 "util/configparser.y" + case 254: +#line 336 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -3489,11 +3512,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 3493 "util/configparser.c" +#line 3516 "util/configparser.c" break; - case 262: -#line 351 "util/configparser.y" + case 264: +#line 354 "util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -3507,11 +3530,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 3511 "util/configparser.c" +#line 3534 "util/configparser.c" break; - case 272: -#line 371 "util/configparser.y" + case 274: +#line 374 "util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -3530,11 +3553,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 3534 "util/configparser.c" +#line 3557 "util/configparser.c" break; - case 285: -#line 398 "util/configparser.y" + case 287: +#line 401 "util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -3551,11 +3574,11 @@ yyparse (void) } } -#line 3555 "util/configparser.c" +#line 3578 "util/configparser.c" break; - case 286: -#line 417 "util/configparser.y" + case 288: +#line 420 "util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -3570,21 +3593,21 @@ yyparse (void) cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 3574 "util/configparser.c" +#line 3597 "util/configparser.c" break; - case 287: -#line 434 "util/configparser.y" + case 289: +#line 437 "util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 3584 "util/configparser.c" +#line 3607 "util/configparser.c" break; - case 288: -#line 442 "util/configparser.y" + case 290: +#line 445 "util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3592,21 +3615,33 @@ yyparse (void) else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3596 "util/configparser.c" +#line 3619 "util/configparser.c" break; - case 289: -#line 452 "util/configparser.y" + case 291: +#line 455 "util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 3606 "util/configparser.c" +#line 3629 "util/configparser.c" break; - case 290: -#line 460 "util/configparser.y" + case 292: +#line 462 "util/configparser.y" + { + OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 3641 "util/configparser.c" + break; + + case 293: +#line 472 "util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -3623,11 +3658,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 3627 "util/configparser.c" +#line 3662 "util/configparser.c" break; - case 303: -#line 484 "util/configparser.y" + case 308: +#line 496 "util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3635,11 +3670,11 @@ yyparse (void) else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3639 "util/configparser.c" +#line 3674 "util/configparser.c" break; - case 304: -#line 493 "util/configparser.y" + case 309: +#line 505 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3647,11 +3682,11 @@ yyparse (void) else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3651 "util/configparser.c" +#line 3686 "util/configparser.c" break; - case 305: -#line 502 "util/configparser.y" + case 310: +#line 514 "util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3661,11 +3696,11 @@ yyparse (void) else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3665 "util/configparser.c" +#line 3700 "util/configparser.c" break; - case 306: -#line 513 "util/configparser.y" + case 311: +#line 525 "util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3673,11 +3708,11 @@ yyparse (void) else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3677 "util/configparser.c" +#line 3712 "util/configparser.c" break; - case 307: -#line 522 "util/configparser.y" + case 312: +#line 534 "util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3685,11 +3720,11 @@ yyparse (void) else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3689 "util/configparser.c" +#line 3724 "util/configparser.c" break; - case 308: -#line 531 "util/configparser.y" + case 313: +#line 543 "util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3697,11 +3732,11 @@ yyparse (void) else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3701 "util/configparser.c" +#line 3736 "util/configparser.c" break; - case 309: -#line 540 "util/configparser.y" + case 314: +#line 552 "util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3711,11 +3746,11 @@ yyparse (void) else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3715 "util/configparser.c" +#line 3750 "util/configparser.c" break; - case 310: -#line 551 "util/configparser.y" + case 315: +#line 563 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3723,11 +3758,11 @@ yyparse (void) else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3727 "util/configparser.c" +#line 3762 "util/configparser.c" break; - case 311: -#line 560 "util/configparser.y" + case 316: +#line 572 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3738,11 +3773,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 3742 "util/configparser.c" +#line 3777 "util/configparser.c" break; - case 312: -#line 572 "util/configparser.y" + case 317: +#line 584 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3754,11 +3789,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 3758 "util/configparser.c" +#line 3793 "util/configparser.c" break; - case 313: -#line 586 "util/configparser.y" + case 318: +#line 598 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3772,11 +3807,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" +#line 3811 "util/configparser.c" break; - case 314: -#line 601 "util/configparser.y" + case 319: +#line 613 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3786,11 +3821,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3790 "util/configparser.c" +#line 3825 "util/configparser.c" break; - case 315: -#line 612 "util/configparser.y" + case 320: +#line 624 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3806,11 +3841,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3810 "util/configparser.c" +#line 3845 "util/configparser.c" break; - case 316: -#line 629 "util/configparser.y" + case 321: +#line 641 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3826,11 +3861,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" +#line 3865 "util/configparser.c" break; - case 317: -#line 646 "util/configparser.y" + case 322: +#line 658 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3846,11 +3881,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3850 "util/configparser.c" +#line 3885 "util/configparser.c" break; - case 318: -#line 663 "util/configparser.y" + case 323: +#line 675 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3866,11 +3901,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3870 "util/configparser.c" +#line 3905 "util/configparser.c" break; - case 319: -#line 680 "util/configparser.y" + case 324: +#line 692 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3884,11 +3919,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3888 "util/configparser.c" +#line 3923 "util/configparser.c" break; - case 320: -#line 695 "util/configparser.y" + case 325: +#line 707 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3902,11 +3937,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 3906 "util/configparser.c" +#line 3941 "util/configparser.c" break; - case 321: -#line 710 "util/configparser.y" + case 326: +#line 722 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3918,11 +3953,11 @@ yyparse (void) else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3922 "util/configparser.c" +#line 3957 "util/configparser.c" break; - case 322: -#line 723 "util/configparser.y" + case 327: +#line 735 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3936,11 +3971,11 @@ yyparse (void) cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3940 "util/configparser.c" +#line 3975 "util/configparser.c" break; - case 323: -#line 738 "util/configparser.y" + case 328: +#line 750 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3948,11 +3983,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3952 "util/configparser.c" +#line 3987 "util/configparser.c" break; - case 324: -#line 747 "util/configparser.y" + case 329: +#line 759 "util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3960,11 +3995,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3964 "util/configparser.c" +#line 3999 "util/configparser.c" break; - case 325: -#line 756 "util/configparser.y" + case 330: +#line 768 "util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3972,11 +4007,11 @@ yyparse (void) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3976 "util/configparser.c" +#line 4011 "util/configparser.c" break; - case 326: -#line 765 "util/configparser.y" + case 331: +#line 777 "util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3984,11 +4019,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3988 "util/configparser.c" +#line 4023 "util/configparser.c" break; - case 327: -#line 774 "util/configparser.y" + case 332: +#line 786 "util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3996,11 +4031,11 @@ yyparse (void) else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4000 "util/configparser.c" +#line 4035 "util/configparser.c" break; - case 328: -#line 783 "util/configparser.y" + case 333: +#line 795 "util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4008,11 +4043,11 @@ yyparse (void) else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4012 "util/configparser.c" +#line 4047 "util/configparser.c" break; - case 329: -#line 792 "util/configparser.y" + case 334: +#line 804 "util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4020,11 +4055,11 @@ yyparse (void) else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4024 "util/configparser.c" +#line 4059 "util/configparser.c" break; - case 330: -#line 801 "util/configparser.y" + case 335: +#line 813 "util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4032,11 +4067,11 @@ yyparse (void) else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4036 "util/configparser.c" +#line 4071 "util/configparser.c" break; - case 331: -#line 810 "util/configparser.y" + case 336: +#line 822 "util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4044,11 +4079,11 @@ yyparse (void) else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4048 "util/configparser.c" +#line 4083 "util/configparser.c" break; - case 332: -#line 819 "util/configparser.y" + case 337: +#line 831 "util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4056,11 +4091,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4060 "util/configparser.c" +#line 4095 "util/configparser.c" break; - case 333: -#line 828 "util/configparser.y" + case 338: +#line 840 "util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4068,11 +4103,11 @@ yyparse (void) else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4072 "util/configparser.c" +#line 4107 "util/configparser.c" break; - case 334: -#line 837 "util/configparser.y" + case 339: +#line 849 "util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4080,11 +4115,11 @@ yyparse (void) else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4084 "util/configparser.c" +#line 4119 "util/configparser.c" break; - case 335: -#line 846 "util/configparser.y" + case 340: +#line 858 "util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4092,11 +4127,11 @@ yyparse (void) else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4096 "util/configparser.c" +#line 4131 "util/configparser.c" break; - case 336: -#line 855 "util/configparser.y" + case 341: +#line 867 "util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4104,11 +4139,11 @@ yyparse (void) else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4108 "util/configparser.c" +#line 4143 "util/configparser.c" break; - case 337: -#line 864 "util/configparser.y" + case 342: +#line 876 "util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4120,11 +4155,11 @@ yyparse (void) else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4124 "util/configparser.c" +#line 4159 "util/configparser.c" break; - case 338: -#line 877 "util/configparser.y" + case 343: +#line 889 "util/configparser.y" { OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4134,11 +4169,11 @@ yyparse (void) else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4138 "util/configparser.c" +#line 4173 "util/configparser.c" break; - case 339: -#line 888 "util/configparser.y" + case 344: +#line 900 "util/configparser.y" { OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4148,11 +4183,11 @@ yyparse (void) else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4152 "util/configparser.c" +#line 4187 "util/configparser.c" break; - case 340: -#line 899 "util/configparser.y" + case 345: +#line 911 "util/configparser.y" { OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4162,11 +4197,11 @@ yyparse (void) else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4166 "util/configparser.c" +#line 4201 "util/configparser.c" break; - case 341: -#line 910 "util/configparser.y" + case 346: +#line 922 "util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4174,11 +4209,11 @@ yyparse (void) else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4178 "util/configparser.c" +#line 4213 "util/configparser.c" break; - case 342: -#line 919 "util/configparser.y" + case 347: +#line 931 "util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4190,11 +4225,11 @@ yyparse (void) else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4194 "util/configparser.c" +#line 4229 "util/configparser.c" break; - case 343: -#line 932 "util/configparser.y" + case 348: +#line 944 "util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4202,11 +4237,11 @@ yyparse (void) else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4206 "util/configparser.c" +#line 4241 "util/configparser.c" break; - case 344: -#line 941 "util/configparser.y" + case 349: +#line 953 "util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4214,11 +4249,11 @@ yyparse (void) else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4218 "util/configparser.c" +#line 4253 "util/configparser.c" break; - case 345: -#line 950 "util/configparser.y" + case 350: +#line 962 "util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4226,31 +4261,31 @@ yyparse (void) else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" +#line 4265 "util/configparser.c" break; - case 346: -#line 959 "util/configparser.y" + case 351: +#line 971 "util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 4240 "util/configparser.c" +#line 4275 "util/configparser.c" break; - case 347: -#line 966 "util/configparser.y" + case 352: +#line 978 "util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 4250 "util/configparser.c" +#line 4285 "util/configparser.c" break; - case 348: -#line 973 "util/configparser.y" + case 353: +#line 985 "util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4258,21 +4293,21 @@ yyparse (void) else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4262 "util/configparser.c" +#line 4297 "util/configparser.c" break; - case 349: -#line 982 "util/configparser.y" + case 354: +#line 994 "util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 4272 "util/configparser.c" +#line 4307 "util/configparser.c" break; - case 350: -#line 989 "util/configparser.y" + case 355: +#line 1001 "util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4280,53 +4315,53 @@ yyparse (void) else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4284 "util/configparser.c" +#line 4319 "util/configparser.c" break; - case 351: -#line 998 "util/configparser.y" + case 356: +#line 1010 "util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4295 "util/configparser.c" +#line 4330 "util/configparser.c" break; - case 352: -#line 1006 "util/configparser.y" + case 357: +#line 1018 "util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 4305 "util/configparser.c" +#line 4340 "util/configparser.c" break; - case 353: -#line 1013 "util/configparser.y" + case 358: +#line 1025 "util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 4315 "util/configparser.c" +#line 4350 "util/configparser.c" break; - case 354: -#line 1020 "util/configparser.y" + case 359: +#line 1032 "util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4326 "util/configparser.c" +#line 4361 "util/configparser.c" break; - case 355: -#line 1028 "util/configparser.y" + case 360: +#line 1040 "util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4334,11 +4369,11 @@ yyparse (void) else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4338 "util/configparser.c" +#line 4373 "util/configparser.c" break; - case 356: -#line 1037 "util/configparser.y" + case 361: +#line 1049 "util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4346,11 +4381,11 @@ yyparse (void) else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4350 "util/configparser.c" +#line 4385 "util/configparser.c" break; - case 357: -#line 1045 "util/configparser.y" + case 362: +#line 1057 "util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -4366,11 +4401,11 @@ yyparse (void) cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 4370 "util/configparser.c" +#line 4405 "util/configparser.c" break; - case 358: -#line 1061 "util/configparser.y" + case 363: +#line 1073 "util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4378,11 +4413,11 @@ yyparse (void) else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4382 "util/configparser.c" +#line 4417 "util/configparser.c" break; - case 359: -#line 1069 "util/configparser.y" + case 364: +#line 1081 "util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -4390,11 +4425,11 @@ yyparse (void) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4394 "util/configparser.c" +#line 4429 "util/configparser.c" break; - case 360: -#line 1077 "util/configparser.y" + case 365: +#line 1089 "util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -4402,11 +4437,11 @@ yyparse (void) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4406 "util/configparser.c" +#line 4441 "util/configparser.c" break; - case 361: -#line 1085 "util/configparser.y" + case 366: +#line 1097 "util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4414,11 +4449,11 @@ yyparse (void) else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4418 "util/configparser.c" +#line 4453 "util/configparser.c" break; - case 362: -#line 1093 "util/configparser.y" + case 367: +#line 1105 "util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4426,11 +4461,11 @@ yyparse (void) else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4430 "util/configparser.c" +#line 4465 "util/configparser.c" break; - case 363: -#line 1101 "util/configparser.y" + case 368: +#line 1113 "util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4438,11 +4473,11 @@ yyparse (void) else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4442 "util/configparser.c" +#line 4477 "util/configparser.c" break; - case 364: -#line 1110 "util/configparser.y" + case 369: +#line 1122 "util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4450,11 +4485,11 @@ yyparse (void) else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4454 "util/configparser.c" +#line 4489 "util/configparser.c" break; - case 365: -#line 1119 "util/configparser.y" + case 370: +#line 1131 "util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4467,11 +4502,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 4471 "util/configparser.c" +#line 4506 "util/configparser.c" break; - case 366: -#line 1133 "util/configparser.y" + case 371: +#line 1145 "util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4479,11 +4514,11 @@ yyparse (void) else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4483 "util/configparser.c" +#line 4518 "util/configparser.c" break; - case 367: -#line 1142 "util/configparser.y" + case 372: +#line 1154 "util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4491,11 +4526,11 @@ yyparse (void) else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4495 "util/configparser.c" +#line 4530 "util/configparser.c" break; - case 368: -#line 1151 "util/configparser.y" + case 373: +#line 1163 "util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4503,11 +4538,11 @@ yyparse (void) else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4507 "util/configparser.c" +#line 4542 "util/configparser.c" break; - case 369: -#line 1160 "util/configparser.y" + case 374: +#line 1172 "util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4515,11 +4550,11 @@ yyparse (void) else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4519 "util/configparser.c" +#line 4554 "util/configparser.c" break; - case 370: -#line 1169 "util/configparser.y" + case 375: +#line 1181 "util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4527,11 +4562,11 @@ yyparse (void) else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4531 "util/configparser.c" +#line 4566 "util/configparser.c" break; - case 371: -#line 1178 "util/configparser.y" + case 376: +#line 1190 "util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4539,31 +4574,31 @@ yyparse (void) else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4543 "util/configparser.c" +#line 4578 "util/configparser.c" break; - case 372: -#line 1187 "util/configparser.y" + case 377: +#line 1199 "util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 4553 "util/configparser.c" +#line 4588 "util/configparser.c" break; - case 373: -#line 1194 "util/configparser.y" + case 378: +#line 1206 "util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 4563 "util/configparser.c" +#line 4598 "util/configparser.c" break; - case 374: -#line 1201 "util/configparser.y" + case 379: +#line 1213 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -4588,105 +4623,105 @@ yyparse (void) } } } -#line 4592 "util/configparser.c" +#line 4627 "util/configparser.c" break; - case 375: -#line 1227 "util/configparser.y" + case 380: +#line 1239 "util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 4603 "util/configparser.c" +#line 4638 "util/configparser.c" break; - case 376: -#line 1235 "util/configparser.y" + case 381: +#line 1247 "util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 4613 "util/configparser.c" +#line 4648 "util/configparser.c" break; - case 377: -#line 1242 "util/configparser.y" + case 382: +#line 1254 "util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4623 "util/configparser.c" +#line 4658 "util/configparser.c" break; - case 378: -#line 1249 "util/configparser.y" + case 383: +#line 1261 "util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4633 "util/configparser.c" +#line 4668 "util/configparser.c" break; - case 379: -#line 1256 "util/configparser.y" + case 384: +#line 1268 "util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4643 "util/configparser.c" +#line 4678 "util/configparser.c" break; - case 380: -#line 1263 "util/configparser.y" + case 385: +#line 1275 "util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4654 "util/configparser.c" +#line 4689 "util/configparser.c" break; - case 381: -#line 1271 "util/configparser.y" + case 386: +#line 1283 "util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4665 "util/configparser.c" +#line 4700 "util/configparser.c" break; - case 382: -#line 1279 "util/configparser.y" + case 387: +#line 1291 "util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4676 "util/configparser.c" +#line 4711 "util/configparser.c" break; - case 383: -#line 1287 "util/configparser.y" + case 388: +#line 1299 "util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4686 "util/configparser.c" +#line 4721 "util/configparser.c" break; - case 384: -#line 1294 "util/configparser.y" + case 389: +#line 1306 "util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4696,11 +4731,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4700 "util/configparser.c" +#line 4735 "util/configparser.c" break; - case 385: -#line 1305 "util/configparser.y" + case 390: +#line 1317 "util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4710,21 +4745,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4714 "util/configparser.c" +#line 4749 "util/configparser.c" break; - case 386: -#line 1316 "util/configparser.y" + case 391: +#line 1328 "util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4724 "util/configparser.c" +#line 4759 "util/configparser.c" break; - case 387: -#line 1323 "util/configparser.y" + case 392: +#line 1335 "util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4732,11 +4767,11 @@ yyparse (void) else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4736 "util/configparser.c" +#line 4771 "util/configparser.c" break; - case 388: -#line 1332 "util/configparser.y" + case 393: +#line 1344 "util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4744,11 +4779,11 @@ yyparse (void) else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4748 "util/configparser.c" +#line 4783 "util/configparser.c" break; - case 389: -#line 1341 "util/configparser.y" + case 394: +#line 1353 "util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4756,11 +4791,11 @@ yyparse (void) else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4760 "util/configparser.c" +#line 4795 "util/configparser.c" break; - case 390: -#line 1350 "util/configparser.y" + case 395: +#line 1362 "util/configparser.y" { OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4768,41 +4803,41 @@ yyparse (void) else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4772 "util/configparser.c" +#line 4807 "util/configparser.c" break; - case 391: -#line 1359 "util/configparser.y" + case 396: +#line 1371 "util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4782 "util/configparser.c" +#line 4817 "util/configparser.c" break; - case 392: -#line 1366 "util/configparser.y" + case 397: +#line 1378 "util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4792 "util/configparser.c" +#line 4827 "util/configparser.c" break; - case 393: -#line 1373 "util/configparser.y" + case 398: +#line 1385 "util/configparser.y" { OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_user_agent); cfg_parser->cfg->http_user_agent = (yyvsp[0].str); } -#line 4802 "util/configparser.c" +#line 4837 "util/configparser.c" break; - case 394: -#line 1380 "util/configparser.y" + case 399: +#line 1392 "util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4817,33 +4852,33 @@ yyparse (void) yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } -#line 4821 "util/configparser.c" +#line 4856 "util/configparser.c" break; - case 395: -#line 1396 "util/configparser.y" + case 400: +#line 1408 "util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4832 "util/configparser.c" +#line 4867 "util/configparser.c" break; - case 396: -#line 1404 "util/configparser.y" + case 401: +#line 1416 "util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4843 "util/configparser.c" +#line 4878 "util/configparser.c" break; - case 397: -#line 1412 "util/configparser.y" + case 402: +#line 1424 "util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4852,11 +4887,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4856 "util/configparser.c" +#line 4891 "util/configparser.c" break; - case 398: -#line 1422 "util/configparser.y" + case 403: +#line 1434 "util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4865,11 +4900,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4869 "util/configparser.c" +#line 4904 "util/configparser.c" break; - case 399: -#line 1432 "util/configparser.y" + case 404: +#line 1444 "util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4878,11 +4913,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4882 "util/configparser.c" +#line 4917 "util/configparser.c" break; - case 400: -#line 1442 "util/configparser.y" + case 405: +#line 1454 "util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4895,22 +4930,22 @@ yyparse (void) cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4899 "util/configparser.c" +#line 4934 "util/configparser.c" break; - case 401: -#line 1456 "util/configparser.y" + case 406: +#line 1468 "util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4910 "util/configparser.c" +#line 4945 "util/configparser.c" break; - case 402: -#line 1464 "util/configparser.y" + case 407: +#line 1476 "util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4922,11 +4957,11 @@ yyparse (void) else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4926 "util/configparser.c" +#line 4961 "util/configparser.c" break; - case 403: -#line 1477 "util/configparser.y" + case 408: +#line 1489 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4936,22 +4971,22 @@ yyparse (void) else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4940 "util/configparser.c" +#line 4975 "util/configparser.c" break; - case 404: -#line 1488 "util/configparser.y" + case 409: +#line 1500 "util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4951 "util/configparser.c" +#line 4986 "util/configparser.c" break; - case 405: -#line 1496 "util/configparser.y" + case 410: +#line 1508 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4963,11 +4998,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 4967 "util/configparser.c" +#line 5002 "util/configparser.c" break; - case 406: -#line 1509 "util/configparser.y" + case 411: +#line 1521 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4975,11 +5010,11 @@ yyparse (void) else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4979 "util/configparser.c" +#line 5014 "util/configparser.c" break; - case 407: -#line 1518 "util/configparser.y" + case 412: +#line 1530 "util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4987,11 +5022,11 @@ yyparse (void) else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4991 "util/configparser.c" +#line 5026 "util/configparser.c" break; - case 408: -#line 1527 "util/configparser.y" + case 413: +#line 1539 "util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4999,11 +5034,11 @@ yyparse (void) else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5003 "util/configparser.c" +#line 5038 "util/configparser.c" break; - case 409: -#line 1536 "util/configparser.y" + case 414: +#line 1548 "util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5011,11 +5046,11 @@ yyparse (void) else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5015 "util/configparser.c" +#line 5050 "util/configparser.c" break; - case 410: -#line 1545 "util/configparser.y" + case 415: +#line 1557 "util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5024,11 +5059,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5028 "util/configparser.c" +#line 5063 "util/configparser.c" break; - case 411: -#line 1555 "util/configparser.y" + case 416: +#line 1567 "util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5037,22 +5072,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5041 "util/configparser.c" +#line 5076 "util/configparser.c" break; - case 412: -#line 1565 "util/configparser.y" + case 417: +#line 1577 "util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5052 "util/configparser.c" +#line 5087 "util/configparser.c" break; - case 413: -#line 1573 "util/configparser.y" + case 418: +#line 1585 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5064,11 +5099,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5068 "util/configparser.c" +#line 5103 "util/configparser.c" break; - case 414: -#line 1586 "util/configparser.y" + case 419: +#line 1598 "util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5076,22 +5111,22 @@ yyparse (void) else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5080 "util/configparser.c" +#line 5115 "util/configparser.c" break; - case 415: -#line 1595 "util/configparser.y" + case 420: +#line 1607 "util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5091 "util/configparser.c" +#line 5126 "util/configparser.c" break; - case 416: -#line 1603 "util/configparser.y" + case 421: +#line 1615 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5099,22 +5134,22 @@ yyparse (void) else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5103 "util/configparser.c" +#line 5138 "util/configparser.c" break; - case 417: -#line 1612 "util/configparser.y" + case 422: +#line 1624 "util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5114 "util/configparser.c" +#line 5149 "util/configparser.c" break; - case 418: -#line 1620 "util/configparser.y" + case 423: +#line 1632 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5126,11 +5161,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5130 "util/configparser.c" +#line 5165 "util/configparser.c" break; - case 419: -#line 1633 "util/configparser.y" + case 424: +#line 1645 "util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5138,11 +5173,11 @@ yyparse (void) else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5142 "util/configparser.c" +#line 5177 "util/configparser.c" break; - case 420: -#line 1642 "util/configparser.y" + case 425: +#line 1654 "util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5151,21 +5186,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5155 "util/configparser.c" +#line 5190 "util/configparser.c" break; - case 421: -#line 1652 "util/configparser.y" + case 426: +#line 1664 "util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 5165 "util/configparser.c" +#line 5200 "util/configparser.c" break; - case 422: -#line 1659 "util/configparser.y" + case 427: +#line 1671 "util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5174,11 +5209,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5178 "util/configparser.c" +#line 5213 "util/configparser.c" break; - case 423: -#line 1669 "util/configparser.y" + case 428: +#line 1681 "util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5187,11 +5222,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5191 "util/configparser.c" +#line 5226 "util/configparser.c" break; - case 424: -#line 1679 "util/configparser.y" + case 429: +#line 1691 "util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5200,11 +5235,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5204 "util/configparser.c" +#line 5239 "util/configparser.c" break; - case 425: -#line 1689 "util/configparser.y" + case 430: +#line 1701 "util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5213,11 +5248,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5217 "util/configparser.c" +#line 5252 "util/configparser.c" break; - case 426: -#line 1699 "util/configparser.y" + case 431: +#line 1711 "util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5226,11 +5261,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5230 "util/configparser.c" +#line 5265 "util/configparser.c" break; - case 427: -#line 1709 "util/configparser.y" + case 432: +#line 1721 "util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5239,11 +5274,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5243 "util/configparser.c" +#line 5278 "util/configparser.c" break; - case 428: -#line 1719 "util/configparser.y" + case 433: +#line 1731 "util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5252,11 +5287,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5256 "util/configparser.c" +#line 5291 "util/configparser.c" break; - case 429: -#line 1729 "util/configparser.y" + case 434: +#line 1741 "util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5265,41 +5300,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5269 "util/configparser.c" +#line 5304 "util/configparser.c" break; - case 430: -#line 1739 "util/configparser.y" + case 435: +#line 1751 "util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5279 "util/configparser.c" +#line 5314 "util/configparser.c" break; - case 431: -#line 1746 "util/configparser.y" + case 436: +#line 1758 "util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5289 "util/configparser.c" +#line 5324 "util/configparser.c" break; - case 432: -#line 1753 "util/configparser.y" + case 437: +#line 1765 "util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5299 "util/configparser.c" +#line 5334 "util/configparser.c" break; - case 433: -#line 1760 "util/configparser.y" + case 438: +#line 1772 "util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5307,11 +5342,11 @@ yyparse (void) else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5311 "util/configparser.c" +#line 5346 "util/configparser.c" break; - case 434: -#line 1769 "util/configparser.y" + case 439: +#line 1781 "util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5319,11 +5354,11 @@ yyparse (void) else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5323 "util/configparser.c" +#line 5358 "util/configparser.c" break; - case 435: -#line 1778 "util/configparser.y" + case 440: +#line 1790 "util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5331,11 +5366,11 @@ yyparse (void) else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5335 "util/configparser.c" +#line 5370 "util/configparser.c" break; - case 436: -#line 1787 "util/configparser.y" + case 441: +#line 1799 "util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5343,21 +5378,21 @@ yyparse (void) else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5347 "util/configparser.c" +#line 5382 "util/configparser.c" break; - case 437: -#line 1796 "util/configparser.y" + case 442: +#line 1808 "util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5357 "util/configparser.c" +#line 5392 "util/configparser.c" break; - case 438: -#line 1803 "util/configparser.y" + case 443: +#line 1815 "util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5366,11 +5401,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5370 "util/configparser.c" +#line 5405 "util/configparser.c" break; - case 439: -#line 1813 "util/configparser.y" + case 444: +#line 1825 "util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -5389,21 +5424,21 @@ yyparse (void) fatal_exit("out of memory adding acl"); } } -#line 5393 "util/configparser.c" +#line 5428 "util/configparser.c" break; - case 440: -#line 1833 "util/configparser.y" + case 445: +#line 1845 "util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 5403 "util/configparser.c" +#line 5438 "util/configparser.c" break; - case 441: -#line 1840 "util/configparser.y" + case 446: +#line 1852 "util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5420,11 +5455,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5424 "util/configparser.c" +#line 5459 "util/configparser.c" break; - case 442: -#line 1858 "util/configparser.y" + case 447: +#line 1870 "util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5436,11 +5471,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5440 "util/configparser.c" +#line 5475 "util/configparser.c" break; - case 443: -#line 1871 "util/configparser.y" + case 448: +#line 1883 "util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5452,11 +5487,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5456 "util/configparser.c" +#line 5491 "util/configparser.c" break; - case 444: -#line 1884 "util/configparser.y" + case 449: +#line 1896 "util/configparser.y" { OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5468,11 +5503,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5472 "util/configparser.c" +#line 5507 "util/configparser.c" break; - case 445: -#line 1897 "util/configparser.y" + case 450: +#line 1909 "util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5480,11 +5515,11 @@ yyparse (void) else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5484 "util/configparser.c" +#line 5519 "util/configparser.c" break; - case 446: -#line 1906 "util/configparser.y" + case 451: +#line 1918 "util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5492,11 +5527,11 @@ yyparse (void) else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5496 "util/configparser.c" +#line 5531 "util/configparser.c" break; - case 447: -#line 1915 "util/configparser.y" + case 452: +#line 1927 "util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5504,11 +5539,11 @@ yyparse (void) else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5508 "util/configparser.c" +#line 5543 "util/configparser.c" break; - case 448: -#line 1924 "util/configparser.y" + case 453: +#line 1936 "util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5516,11 +5551,11 @@ yyparse (void) else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5520 "util/configparser.c" +#line 5555 "util/configparser.c" break; - case 449: -#line 1933 "util/configparser.y" + case 454: +#line 1945 "util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5529,11 +5564,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5533 "util/configparser.c" +#line 5568 "util/configparser.c" break; - case 450: -#line 1943 "util/configparser.y" + case 455: +#line 1955 "util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5542,11 +5577,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5546 "util/configparser.c" +#line 5581 "util/configparser.c" break; - case 451: -#line 1953 "util/configparser.y" + case 456: +#line 1965 "util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5556,11 +5591,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5560 "util/configparser.c" +#line 5595 "util/configparser.c" break; - case 452: -#line 1964 "util/configparser.y" + case 457: +#line 1976 "util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5568,11 +5603,11 @@ yyparse (void) else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5572 "util/configparser.c" +#line 5607 "util/configparser.c" break; - case 453: -#line 1973 "util/configparser.y" + case 458: +#line 1985 "util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5580,11 +5615,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5584 "util/configparser.c" +#line 5619 "util/configparser.c" break; - case 454: -#line 1982 "util/configparser.y" + case 459: +#line 1994 "util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5592,11 +5627,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5596 "util/configparser.c" +#line 5631 "util/configparser.c" break; - case 455: -#line 1991 "util/configparser.y" + case 460: +#line 2003 "util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5604,11 +5639,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5608 "util/configparser.c" +#line 5643 "util/configparser.c" break; - case 456: -#line 2000 "util/configparser.y" + case 461: +#line 2012 "util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5616,11 +5651,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5620 "util/configparser.c" +#line 5655 "util/configparser.c" break; - case 457: -#line 2009 "util/configparser.y" + case 462: +#line 2021 "util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5628,11 +5663,11 @@ yyparse (void) else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5632 "util/configparser.c" +#line 5667 "util/configparser.c" break; - case 458: -#line 2018 "util/configparser.y" + case 463: +#line 2030 "util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5640,11 +5675,11 @@ yyparse (void) else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5644 "util/configparser.c" +#line 5679 "util/configparser.c" break; - case 459: -#line 2027 "util/configparser.y" + case 464: +#line 2039 "util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5656,11 +5691,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5660 "util/configparser.c" +#line 5695 "util/configparser.c" break; - case 460: -#line 2040 "util/configparser.y" + case 465: +#line 2052 "util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5672,11 +5707,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5676 "util/configparser.c" +#line 5711 "util/configparser.c" break; - case 461: -#line 2053 "util/configparser.y" + case 466: +#line 2065 "util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5684,21 +5719,21 @@ yyparse (void) else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5688 "util/configparser.c" +#line 5723 "util/configparser.c" break; - case 462: -#line 2062 "util/configparser.y" + case 467: +#line 2074 "util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 5698 "util/configparser.c" +#line 5733 "util/configparser.c" break; - case 463: -#line 2069 "util/configparser.y" + case 468: +#line 2081 "util/configparser.y" { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5706,11 +5741,11 @@ yyparse (void) else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5710 "util/configparser.c" +#line 5745 "util/configparser.c" break; - case 464: -#line 2078 "util/configparser.y" + case 469: +#line 2090 "util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5718,11 +5753,11 @@ yyparse (void) else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5722 "util/configparser.c" +#line 5757 "util/configparser.c" break; - case 465: -#line 2087 "util/configparser.y" + case 470: +#line 2099 "util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5730,11 +5765,11 @@ yyparse (void) else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5734 "util/configparser.c" +#line 5769 "util/configparser.c" break; - case 466: -#line 2096 "util/configparser.y" + case 471: +#line 2108 "util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5742,11 +5777,11 @@ yyparse (void) else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5746 "util/configparser.c" +#line 5781 "util/configparser.c" break; - case 467: -#line 2105 "util/configparser.y" + case 472: +#line 2117 "util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5755,22 +5790,22 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5759 "util/configparser.c" +#line 5794 "util/configparser.c" break; - case 468: -#line 2114 "util/configparser.y" + case 473: +#line 2126 "util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5770 "util/configparser.c" +#line 5805 "util/configparser.c" break; - case 469: -#line 2122 "util/configparser.y" + case 474: +#line 2134 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5782,22 +5817,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5786 "util/configparser.c" +#line 5821 "util/configparser.c" break; - case 470: -#line 2135 "util/configparser.y" + case 475: +#line 2147 "util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5797 "util/configparser.c" +#line 5832 "util/configparser.c" break; - case 471: -#line 2143 "util/configparser.y" + case 476: +#line 2155 "util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5841,21 +5876,21 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 5845 "util/configparser.c" +#line 5880 "util/configparser.c" break; - case 472: -#line 2188 "util/configparser.y" + case 477: +#line 2200 "util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5855 "util/configparser.c" +#line 5890 "util/configparser.c" break; - case 473: -#line 2195 "util/configparser.y" + case 478: +#line 2207 "util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5869,11 +5904,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 5873 "util/configparser.c" +#line 5908 "util/configparser.c" break; - case 474: -#line 2210 "util/configparser.y" + case 479: +#line 2222 "util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5882,11 +5917,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5886 "util/configparser.c" +#line 5921 "util/configparser.c" break; - case 475: -#line 2220 "util/configparser.y" + case 480: +#line 2232 "util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5895,41 +5930,41 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5899 "util/configparser.c" +#line 5934 "util/configparser.c" break; - case 476: -#line 2230 "util/configparser.y" + case 481: +#line 2242 "util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5909 "util/configparser.c" +#line 5944 "util/configparser.c" break; - case 477: -#line 2237 "util/configparser.y" + case 482: +#line 2249 "util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5919 "util/configparser.c" +#line 5954 "util/configparser.c" break; - case 478: -#line 2244 "util/configparser.y" + case 483: +#line 2256 "util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5929 "util/configparser.c" +#line 5964 "util/configparser.c" break; - case 479: -#line 2251 "util/configparser.y" + case 484: +#line 2263 "util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5937,22 +5972,22 @@ yyparse (void) else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5941 "util/configparser.c" +#line 5976 "util/configparser.c" break; - case 480: -#line 2260 "util/configparser.y" + case 485: +#line 2272 "util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5952 "util/configparser.c" +#line 5987 "util/configparser.c" break; - case 481: -#line 2268 "util/configparser.y" + case 486: +#line 2280 "util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5965,11 +6000,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5969 "util/configparser.c" +#line 6004 "util/configparser.c" break; - case 482: -#line 2282 "util/configparser.y" + case 487: +#line 2294 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5989,11 +6024,11 @@ yyparse (void) } } } -#line 5993 "util/configparser.c" +#line 6028 "util/configparser.c" break; - case 483: -#line 2303 "util/configparser.y" + case 488: +#line 2315 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -6013,11 +6048,11 @@ yyparse (void) } } } -#line 6017 "util/configparser.c" +#line 6052 "util/configparser.c" break; - case 484: -#line 2324 "util/configparser.y" + case 489: +#line 2336 "util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -6028,11 +6063,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 6032 "util/configparser.c" +#line 6067 "util/configparser.c" break; - case 485: -#line 2336 "util/configparser.y" + case 490: +#line 2348 "util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -6043,11 +6078,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 6047 "util/configparser.c" +#line 6082 "util/configparser.c" break; - case 486: -#line 2348 "util/configparser.y" + case 491: +#line 2360 "util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -6058,11 +6093,11 @@ yyparse (void) free((yyvsp[0].str)); } } -#line 6062 "util/configparser.c" +#line 6097 "util/configparser.c" break; - case 487: -#line 2360 "util/configparser.y" + case 492: +#line 2372 "util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -6070,11 +6105,11 @@ yyparse (void) yyerror("out of memory"); } } -#line 6074 "util/configparser.c" +#line 6109 "util/configparser.c" break; - case 488: -#line 2369 "util/configparser.y" + case 493: +#line 2381 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -6094,11 +6129,11 @@ yyparse (void) } } } -#line 6098 "util/configparser.c" +#line 6133 "util/configparser.c" break; - case 489: -#line 2390 "util/configparser.y" + case 494: +#line 2402 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6106,11 +6141,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6110 "util/configparser.c" +#line 6145 "util/configparser.c" break; - case 490: -#line 2399 "util/configparser.y" + case 495: +#line 2411 "util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6118,33 +6153,33 @@ yyparse (void) else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6122 "util/configparser.c" +#line 6157 "util/configparser.c" break; - case 491: -#line 2408 "util/configparser.y" + case 496: +#line 2420 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6133 "util/configparser.c" +#line 6168 "util/configparser.c" break; - case 492: -#line 2416 "util/configparser.y" + case 497: +#line 2428 "util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6144 "util/configparser.c" +#line 6179 "util/configparser.c" break; - case 493: -#line 2424 "util/configparser.y" + case 498: +#line 2436 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6156,11 +6191,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 6160 "util/configparser.c" +#line 6195 "util/configparser.c" break; - case 494: -#line 2437 "util/configparser.y" + case 499: +#line 2449 "util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6172,11 +6207,11 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 6176 "util/configparser.c" +#line 6211 "util/configparser.c" break; - case 495: -#line 2450 "util/configparser.y" + case 500: +#line 2462 "util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -6190,11 +6225,11 @@ yyparse (void) "ratelimit-for-domain"); } } -#line 6194 "util/configparser.c" +#line 6229 "util/configparser.c" break; - case 496: -#line 2465 "util/configparser.y" + case 501: +#line 2477 "util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -6208,11 +6243,11 @@ yyparse (void) "ratelimit-below-domain"); } } -#line 6212 "util/configparser.c" +#line 6247 "util/configparser.c" break; - case 497: -#line 2480 "util/configparser.y" + case 502: +#line 2492 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6220,11 +6255,11 @@ yyparse (void) else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6224 "util/configparser.c" +#line 6259 "util/configparser.c" break; - case 498: -#line 2489 "util/configparser.y" + case 503: +#line 2501 "util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6232,11 +6267,37 @@ yyparse (void) else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6236 "util/configparser.c" +#line 6271 "util/configparser.c" break; - case 499: -#line 2498 "util/configparser.y" + case 504: +#line 2510 "util/configparser.y" + { + OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ip_ratelimit_backoff = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 6284 "util/configparser.c" + break; + + case 505: +#line 2520 "util/configparser.y" + { + OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ratelimit_backoff = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 6297 "util/configparser.c" + break; + + case 506: +#line 2530 "util/configparser.y" { OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6244,20 +6305,20 @@ yyparse (void) else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6248 "util/configparser.c" +#line 6309 "util/configparser.c" break; - case 500: -#line 2507 "util/configparser.y" + case 507: +#line 2539 "util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 6257 "util/configparser.c" +#line 6318 "util/configparser.c" break; - case 501: -#line 2513 "util/configparser.y" + case 508: +#line 2545 "util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -6265,11 +6326,11 @@ yyparse (void) else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6269 "util/configparser.c" +#line 6330 "util/configparser.c" break; - case 502: -#line 2522 "util/configparser.y" + case 509: +#line 2554 "util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6277,11 +6338,11 @@ yyparse (void) else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6281 "util/configparser.c" +#line 6342 "util/configparser.c" break; - case 503: -#line 2531 "util/configparser.y" + case 510: +#line 2563 "util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6290,11 +6351,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6294 "util/configparser.c" +#line 6355 "util/configparser.c" break; - case 504: -#line 2541 "util/configparser.y" + case 511: +#line 2573 "util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6303,11 +6364,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6307 "util/configparser.c" +#line 6368 "util/configparser.c" break; - case 505: -#line 2551 "util/configparser.y" + case 512: +#line 2583 "util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6316,11 +6377,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6320 "util/configparser.c" +#line 6381 "util/configparser.c" break; - case 506: -#line 2561 "util/configparser.y" + case 513: +#line 2593 "util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6328,11 +6389,11 @@ yyparse (void) else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6332 "util/configparser.c" +#line 6393 "util/configparser.c" break; - case 507: -#line 2570 "util/configparser.y" + case 514: +#line 2602 "util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6341,11 +6402,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6345 "util/configparser.c" +#line 6406 "util/configparser.c" break; - case 508: -#line 2580 "util/configparser.y" + case 515: +#line 2612 "util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6353,11 +6414,11 @@ yyparse (void) else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6357 "util/configparser.c" +#line 6418 "util/configparser.c" break; - case 509: -#line 2589 "util/configparser.y" + case 516: +#line 2621 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -6369,11 +6430,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 6373 "util/configparser.c" +#line 6434 "util/configparser.c" break; - case 510: -#line 2602 "util/configparser.y" + case 517: +#line 2634 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -6385,11 +6446,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 6389 "util/configparser.c" +#line 6450 "util/configparser.c" break; - case 511: -#line 2615 "util/configparser.y" + case 518: +#line 2647 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -6400,11 +6461,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6404 "util/configparser.c" +#line 6465 "util/configparser.c" break; - case 512: -#line 2627 "util/configparser.y" + case 519: +#line 2659 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -6417,11 +6478,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6421 "util/configparser.c" +#line 6482 "util/configparser.c" break; - case 513: -#line 2641 "util/configparser.y" + case 520: +#line 2673 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -6432,11 +6493,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6436 "util/configparser.c" +#line 6497 "util/configparser.c" break; - case 514: -#line 2653 "util/configparser.y" + case 521: +#line 2685 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -6449,11 +6510,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 6453 "util/configparser.c" +#line 6514 "util/configparser.c" break; - case 515: -#line 2667 "util/configparser.y" + case 522: +#line 2699 "util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( @@ -6461,11 +6522,11 @@ yyparse (void) fatal_exit("out of memory adding " "edns-client-string"); } -#line 6465 "util/configparser.c" +#line 6526 "util/configparser.c" break; - case 516: -#line 2676 "util/configparser.y" + case 523: +#line 2708 "util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6476,11 +6537,11 @@ yyparse (void) free((yyvsp[0].str)); } -#line 6480 "util/configparser.c" +#line 6541 "util/configparser.c" break; - case 517: -#line 2688 "util/configparser.y" + case 524: +#line 2720 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -6489,31 +6550,31 @@ yyparse (void) free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 6493 "util/configparser.c" +#line 6554 "util/configparser.c" break; - case 518: -#line 2698 "util/configparser.y" + case 525: +#line 2730 "util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6503 "util/configparser.c" +#line 6564 "util/configparser.c" break; - case 519: -#line 2705 "util/configparser.y" + case 526: +#line 2737 "util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6513 "util/configparser.c" +#line 6574 "util/configparser.c" break; - case 520: -#line 2712 "util/configparser.y" + case 527: +#line 2744 "util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6521,11 +6582,11 @@ yyparse (void) else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6525 "util/configparser.c" +#line 6586 "util/configparser.c" break; - case 521: -#line 2721 "util/configparser.y" + case 528: +#line 2753 "util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6533,11 +6594,11 @@ yyparse (void) else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6537 "util/configparser.c" +#line 6598 "util/configparser.c" break; - case 522: -#line 2730 "util/configparser.y" + case 529: +#line 2762 "util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6546,11 +6607,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6550 "util/configparser.c" +#line 6611 "util/configparser.c" break; - case 523: -#line 2740 "util/configparser.y" + case 530: +#line 2772 "util/configparser.y" { OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6559,11 +6620,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6563 "util/configparser.c" +#line 6624 "util/configparser.c" break; - case 524: -#line 2750 "util/configparser.y" + case 531: +#line 2782 "util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6572,11 +6633,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6576 "util/configparser.c" +#line 6637 "util/configparser.c" break; - case 525: -#line 2760 "util/configparser.y" + case 532: +#line 2792 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -6585,31 +6646,31 @@ yyparse (void) free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 6589 "util/configparser.c" +#line 6650 "util/configparser.c" break; - case 526: -#line 2770 "util/configparser.y" + case 533: +#line 2802 "util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6599 "util/configparser.c" +#line 6660 "util/configparser.c" break; - case 527: -#line 2777 "util/configparser.y" + case 534: +#line 2809 "util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6609 "util/configparser.c" +#line 6670 "util/configparser.c" break; - case 528: -#line 2784 "util/configparser.y" + case 535: +#line 2816 "util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6617,11 +6678,11 @@ yyparse (void) else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6621 "util/configparser.c" +#line 6682 "util/configparser.c" break; - case 529: -#line 2793 "util/configparser.y" + case 536: +#line 2825 "util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6629,11 +6690,11 @@ yyparse (void) else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6633 "util/configparser.c" +#line 6694 "util/configparser.c" break; - case 530: -#line 2802 "util/configparser.y" + case 537: +#line 2834 "util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6642,11 +6703,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6646 "util/configparser.c" +#line 6707 "util/configparser.c" break; - case 531: -#line 2812 "util/configparser.y" + case 538: +#line 2844 "util/configparser.y" { OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6655,11 +6716,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6659 "util/configparser.c" +#line 6720 "util/configparser.c" break; - case 532: -#line 2822 "util/configparser.y" + case 539: +#line 2854 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -6668,52 +6729,52 @@ yyparse (void) free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 6672 "util/configparser.c" +#line 6733 "util/configparser.c" break; - case 533: -#line 2832 "util/configparser.y" + case 540: +#line 2864 "util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 6682 "util/configparser.c" +#line 6743 "util/configparser.c" break; - case 534: -#line 2839 "util/configparser.y" + case 541: +#line 2871 "util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6692 "util/configparser.c" +#line 6753 "util/configparser.c" break; - case 535: -#line 2846 "util/configparser.y" + case 542: +#line 2878 "util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6702 "util/configparser.c" +#line 6763 "util/configparser.c" break; - case 536: -#line 2853 "util/configparser.y" + case 543: +#line 2885 "util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6713 "util/configparser.c" +#line 6774 "util/configparser.c" break; - case 537: -#line 2861 "util/configparser.y" + case 544: +#line 2893 "util/configparser.y" { OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6722,11 +6783,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6726 "util/configparser.c" +#line 6787 "util/configparser.c" break; - case 538: -#line 2871 "util/configparser.y" + case 545: +#line 2903 "util/configparser.y" { OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6735,11 +6796,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6739 "util/configparser.c" +#line 6800 "util/configparser.c" break; - case 539: -#line 2881 "util/configparser.y" + case 546: +#line 2913 "util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6748,11 +6809,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6752 "util/configparser.c" +#line 6813 "util/configparser.c" break; - case 540: -#line 2891 "util/configparser.y" + case 547: +#line 2923 "util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6761,11 +6822,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6765 "util/configparser.c" +#line 6826 "util/configparser.c" break; - case 541: -#line 2901 "util/configparser.y" + case 548: +#line 2933 "util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6774,11 +6835,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6778 "util/configparser.c" +#line 6839 "util/configparser.c" break; - case 542: -#line 2911 "util/configparser.y" + case 549: +#line 2943 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -6787,11 +6848,11 @@ yyparse (void) free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 6791 "util/configparser.c" +#line 6852 "util/configparser.c" break; - case 543: -#line 2921 "util/configparser.y" + case 550: +#line 2953 "util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -6836,11 +6897,11 @@ yyparse (void) fatal_exit("out of memory adding local-zone"); } } -#line 6840 "util/configparser.c" +#line 6901 "util/configparser.c" break; - case 544: -#line 2967 "util/configparser.y" + case 551: +#line 2999 "util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6849,33 +6910,33 @@ yyparse (void) fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 6853 "util/configparser.c" +#line 6914 "util/configparser.c" break; - case 545: -#line 2977 "util/configparser.y" + case 552: +#line 3009 "util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6864 "util/configparser.c" +#line 6925 "util/configparser.c" break; - case 546: -#line 2985 "util/configparser.y" + case 553: +#line 3017 "util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 6875 "util/configparser.c" +#line 6936 "util/configparser.c" break; - case 547: -#line 2993 "util/configparser.y" + case 554: +#line 3025 "util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -6889,11 +6950,11 @@ yyparse (void) yyerror("local-data-ptr could not be reversed"); } } -#line 6893 "util/configparser.c" +#line 6954 "util/configparser.c" break; - case 548: -#line 3008 "util/configparser.y" + case 555: +#line 3040 "util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6901,19 +6962,19 @@ yyparse (void) else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6905 "util/configparser.c" +#line 6966 "util/configparser.c" break; - case 549: -#line 3017 "util/configparser.y" + case 556: +#line 3049 "util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 6913 "util/configparser.c" +#line 6974 "util/configparser.c" break; - case 560: -#line 3028 "util/configparser.y" + case 567: +#line 3060 "util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6922,11 +6983,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6926 "util/configparser.c" +#line 6987 "util/configparser.c" break; - case 561: -#line 3038 "util/configparser.y" + case 568: +#line 3070 "util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6934,79 +6995,79 @@ yyparse (void) else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6938 "util/configparser.c" +#line 6999 "util/configparser.c" break; - case 562: -#line 3047 "util/configparser.y" + case 569: +#line 3079 "util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6948 "util/configparser.c" +#line 7009 "util/configparser.c" break; - case 563: -#line 3054 "util/configparser.y" + case 570: +#line 3086 "util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6958 "util/configparser.c" +#line 7019 "util/configparser.c" break; - case 564: -#line 3061 "util/configparser.y" + case 571: +#line 3093 "util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6968 "util/configparser.c" +#line 7029 "util/configparser.c" break; - case 565: -#line 3068 "util/configparser.y" + case 572: +#line 3100 "util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6978 "util/configparser.c" +#line 7039 "util/configparser.c" break; - case 566: -#line 3075 "util/configparser.y" + case 573: +#line 3107 "util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6988 "util/configparser.c" +#line 7049 "util/configparser.c" break; - case 567: -#line 3082 "util/configparser.y" + case 574: +#line 3114 "util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6998 "util/configparser.c" +#line 7059 "util/configparser.c" break; - case 568: -#line 3089 "util/configparser.y" + case 575: +#line 3121 "util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 7006 "util/configparser.c" +#line 7067 "util/configparser.c" break; - case 590: -#line 3109 "util/configparser.y" + case 597: +#line 3141 "util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7014,11 +7075,11 @@ yyparse (void) else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7018 "util/configparser.c" +#line 7079 "util/configparser.c" break; - case 591: -#line 3118 "util/configparser.y" + case 598: +#line 3150 "util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7027,31 +7088,31 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7031 "util/configparser.c" +#line 7092 "util/configparser.c" break; - case 592: -#line 3128 "util/configparser.y" + case 599: +#line 3160 "util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 7041 "util/configparser.c" +#line 7102 "util/configparser.c" break; - case 593: -#line 3135 "util/configparser.y" + case 600: +#line 3167 "util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 7051 "util/configparser.c" +#line 7112 "util/configparser.c" break; - case 594: -#line 3142 "util/configparser.y" + case 601: +#line 3174 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7059,51 +7120,51 @@ yyparse (void) else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7063 "util/configparser.c" +#line 7124 "util/configparser.c" break; - case 595: -#line 3151 "util/configparser.y" + case 602: +#line 3183 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 7073 "util/configparser.c" +#line 7134 "util/configparser.c" break; - case 596: -#line 3158 "util/configparser.y" + case 603: +#line 3190 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 7083 "util/configparser.c" +#line 7144 "util/configparser.c" break; - case 597: -#line 3165 "util/configparser.y" + case 604: +#line 3197 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 7093 "util/configparser.c" +#line 7154 "util/configparser.c" break; - case 598: -#line 3172 "util/configparser.y" + case 605: +#line 3204 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 7103 "util/configparser.c" +#line 7164 "util/configparser.c" break; - case 599: -#line 3179 "util/configparser.y" + case 606: +#line 3211 "util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7111,11 +7172,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7115 "util/configparser.c" +#line 7176 "util/configparser.c" break; - case 600: -#line 3188 "util/configparser.y" + case 607: +#line 3220 "util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7123,31 +7184,31 @@ yyparse (void) else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7127 "util/configparser.c" +#line 7188 "util/configparser.c" break; - case 601: -#line 3197 "util/configparser.y" + case 608: +#line 3229 "util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 7137 "util/configparser.c" +#line 7198 "util/configparser.c" break; - case 602: -#line 3204 "util/configparser.y" + case 609: +#line 3236 "util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 7147 "util/configparser.c" +#line 7208 "util/configparser.c" break; - case 603: -#line 3211 "util/configparser.y" + case 610: +#line 3243 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7156,11 +7217,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7160 "util/configparser.c" +#line 7221 "util/configparser.c" break; - case 604: -#line 3221 "util/configparser.y" + case 611: +#line 3253 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7169,11 +7230,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7173 "util/configparser.c" +#line 7234 "util/configparser.c" break; - case 605: -#line 3231 "util/configparser.y" + case 612: +#line 3263 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7182,11 +7243,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7186 "util/configparser.c" +#line 7247 "util/configparser.c" break; - case 606: -#line 3241 "util/configparser.y" + case 613: +#line 3273 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7195,11 +7256,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7199 "util/configparser.c" +#line 7260 "util/configparser.c" break; - case 607: -#line 3251 "util/configparser.y" + case 614: +#line 3283 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7208,11 +7269,11 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7212 "util/configparser.c" +#line 7273 "util/configparser.c" break; - case 608: -#line 3261 "util/configparser.y" + case 615: +#line 3293 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7221,47 +7282,47 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7225 "util/configparser.c" +#line 7286 "util/configparser.c" break; - case 609: -#line 3271 "util/configparser.y" + case 616: +#line 3303 "util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 7233 "util/configparser.c" +#line 7294 "util/configparser.c" break; - case 613: -#line 3280 "util/configparser.y" + case 620: +#line 3312 "util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 7243 "util/configparser.c" +#line 7304 "util/configparser.c" break; - case 614: -#line 3286 "util/configparser.y" + case 621: +#line 3318 "util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); } -#line 7251 "util/configparser.c" +#line 7312 "util/configparser.c" break; - case 618: -#line 3295 "util/configparser.y" + case 625: +#line 3327 "util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 7261 "util/configparser.c" +#line 7322 "util/configparser.c" break; - case 619: -#line 3301 "util/configparser.y" + case 626: +#line 3333 "util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7270,21 +7331,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7274 "util/configparser.c" +#line 7335 "util/configparser.c" break; - case 620: -#line 3311 "util/configparser.y" + case 627: +#line 3343 "util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 7284 "util/configparser.c" +#line 7345 "util/configparser.c" break; - case 621: -#line 3318 "util/configparser.y" + case 628: +#line 3350 "util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -7292,30 +7353,30 @@ yyparse (void) (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 7296 "util/configparser.c" +#line 7357 "util/configparser.c" break; - case 622: -#line 3327 "util/configparser.y" + case 629: +#line 3359 "util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 7307 "util/configparser.c" +#line 7368 "util/configparser.c" break; - case 623: -#line 3335 "util/configparser.y" + case 630: +#line 3367 "util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 7315 "util/configparser.c" +#line 7376 "util/configparser.c" break; - case 636: -#line 3351 "util/configparser.y" + case 643: +#line 3383 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7323,11 +7384,11 @@ yyparse (void) else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7327 "util/configparser.c" +#line 7388 "util/configparser.c" break; - case 637: -#line 3361 "util/configparser.y" + case 644: +#line 3393 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -7335,21 +7396,21 @@ yyparse (void) else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 7339 "util/configparser.c" +#line 7400 "util/configparser.c" break; - case 638: -#line 3370 "util/configparser.y" + case 645: +#line 3402 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 7349 "util/configparser.c" +#line 7410 "util/configparser.c" break; - case 639: -#line 3377 "util/configparser.y" + case 646: +#line 3409 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -7357,21 +7418,21 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 7361 "util/configparser.c" +#line 7422 "util/configparser.c" break; - case 640: -#line 3386 "util/configparser.y" + case 647: +#line 3418 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 7371 "util/configparser.c" +#line 7432 "util/configparser.c" break; - case 641: -#line 3393 "util/configparser.y" + case 648: +#line 3425 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -7379,22 +7440,22 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 7383 "util/configparser.c" +#line 7444 "util/configparser.c" break; - case 642: -#line 3402 "util/configparser.y" + case 649: +#line 3434 "util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 7394 "util/configparser.c" +#line 7455 "util/configparser.c" break; - case 643: -#line 3410 "util/configparser.y" + case 650: +#line 3442 "util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -7406,22 +7467,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 7410 "util/configparser.c" +#line 7471 "util/configparser.c" break; - case 644: -#line 3423 "util/configparser.y" + case 651: +#line 3455 "util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 7421 "util/configparser.c" +#line 7482 "util/configparser.c" break; - case 645: -#line 3431 "util/configparser.y" + case 652: +#line 3463 "util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -7433,19 +7494,19 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 7437 "util/configparser.c" +#line 7498 "util/configparser.c" break; - case 646: -#line 3444 "util/configparser.y" + case 653: +#line 3476 "util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 7445 "util/configparser.c" +#line 7506 "util/configparser.c" break; - case 655: -#line 3455 "util/configparser.y" + case 662: +#line 3487 "util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -7456,11 +7517,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7460 "util/configparser.c" +#line 7521 "util/configparser.c" break; - case 656: -#line 3467 "util/configparser.y" + case 663: +#line 3499 "util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -7471,11 +7532,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7475 "util/configparser.c" +#line 7536 "util/configparser.c" break; - case 657: -#line 3479 "util/configparser.y" + case 664: +#line 3511 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -7486,11 +7547,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7490 "util/configparser.c" +#line 7551 "util/configparser.c" break; - case 658: -#line 3491 "util/configparser.y" + case 665: +#line 3523 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -7504,11 +7565,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 7508 "util/configparser.c" +#line 7569 "util/configparser.c" break; - case 659: -#line 3506 "util/configparser.y" + case 666: +#line 3538 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -7520,11 +7581,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 7524 "util/configparser.c" +#line 7585 "util/configparser.c" break; - case 660: -#line 3519 "util/configparser.y" + case 667: +#line 3551 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -7536,11 +7597,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 7540 "util/configparser.c" +#line 7601 "util/configparser.c" break; - case 661: -#line 3532 "util/configparser.y" + case 668: +#line 3564 "util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -7550,19 +7611,19 @@ yyparse (void) fatal_exit("out of memory adding tcp connection limit"); } } -#line 7554 "util/configparser.c" +#line 7615 "util/configparser.c" break; - case 662: -#line 3543 "util/configparser.y" + case 669: +#line 3575 "util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 7562 "util/configparser.c" +#line 7623 "util/configparser.c" break; - case 667: -#line 3552 "util/configparser.y" + case 674: +#line 3584 "util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -7576,11 +7637,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7580 "util/configparser.c" +#line 7641 "util/configparser.c" break; - case 668: -#line 3567 "util/configparser.y" + case 675: +#line 3599 "util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -7594,11 +7655,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 7598 "util/configparser.c" +#line 7659 "util/configparser.c" break; -#line 7602 "util/configparser.c" +#line 7663 "util/configparser.c" default: break; } @@ -7792,7 +7853,7 @@ yyparse (void) return yyresult; } -#line 3581 "util/configparser.y" +#line 3613 "util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index d8a1ec11a3a4..7601ce40ba1d 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -257,121 +257,124 @@ extern int yydebug; VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN */ VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR */ VAR_RATELIMIT_FACTOR = 460, /* VAR_RATELIMIT_FACTOR */ - VAR_SEND_CLIENT_SUBNET = 461, /* VAR_SEND_CLIENT_SUBNET */ - VAR_CLIENT_SUBNET_ZONE = 462, /* VAR_CLIENT_SUBNET_ZONE */ - VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 463, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ - VAR_CLIENT_SUBNET_OPCODE = 464, /* VAR_CLIENT_SUBNET_OPCODE */ - VAR_MAX_CLIENT_SUBNET_IPV4 = 465, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ - VAR_MAX_CLIENT_SUBNET_IPV6 = 466, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ - VAR_MIN_CLIENT_SUBNET_IPV4 = 467, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ - VAR_MIN_CLIENT_SUBNET_IPV6 = 468, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ - VAR_MAX_ECS_TREE_SIZE_IPV4 = 469, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ - VAR_MAX_ECS_TREE_SIZE_IPV6 = 470, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ - VAR_CAPS_WHITELIST = 471, /* VAR_CAPS_WHITELIST */ - VAR_CACHE_MAX_NEGATIVE_TTL = 472, /* VAR_CACHE_MAX_NEGATIVE_TTL */ - VAR_PERMIT_SMALL_HOLDDOWN = 473, /* VAR_PERMIT_SMALL_HOLDDOWN */ - VAR_QNAME_MINIMISATION = 474, /* VAR_QNAME_MINIMISATION */ - VAR_QNAME_MINIMISATION_STRICT = 475, /* VAR_QNAME_MINIMISATION_STRICT */ - VAR_IP_FREEBIND = 476, /* VAR_IP_FREEBIND */ - VAR_DEFINE_TAG = 477, /* VAR_DEFINE_TAG */ - VAR_LOCAL_ZONE_TAG = 478, /* VAR_LOCAL_ZONE_TAG */ - VAR_ACCESS_CONTROL_TAG = 479, /* VAR_ACCESS_CONTROL_TAG */ - VAR_LOCAL_ZONE_OVERRIDE = 480, /* VAR_LOCAL_ZONE_OVERRIDE */ - VAR_ACCESS_CONTROL_TAG_ACTION = 481, /* VAR_ACCESS_CONTROL_TAG_ACTION */ - VAR_ACCESS_CONTROL_TAG_DATA = 482, /* VAR_ACCESS_CONTROL_TAG_DATA */ - VAR_VIEW = 483, /* VAR_VIEW */ - VAR_ACCESS_CONTROL_VIEW = 484, /* VAR_ACCESS_CONTROL_VIEW */ - VAR_VIEW_FIRST = 485, /* VAR_VIEW_FIRST */ - VAR_SERVE_EXPIRED = 486, /* VAR_SERVE_EXPIRED */ - VAR_SERVE_EXPIRED_TTL = 487, /* VAR_SERVE_EXPIRED_TTL */ - VAR_SERVE_EXPIRED_TTL_RESET = 488, /* VAR_SERVE_EXPIRED_TTL_RESET */ - VAR_SERVE_EXPIRED_REPLY_TTL = 489, /* VAR_SERVE_EXPIRED_REPLY_TTL */ - VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 490, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ - VAR_SERVE_ORIGINAL_TTL = 491, /* VAR_SERVE_ORIGINAL_TTL */ - VAR_FAKE_DSA = 492, /* VAR_FAKE_DSA */ - VAR_FAKE_SHA1 = 493, /* VAR_FAKE_SHA1 */ - VAR_LOG_IDENTITY = 494, /* VAR_LOG_IDENTITY */ - VAR_HIDE_TRUSTANCHOR = 495, /* VAR_HIDE_TRUSTANCHOR */ - VAR_HIDE_HTTP_USER_AGENT = 496, /* VAR_HIDE_HTTP_USER_AGENT */ - VAR_HTTP_USER_AGENT = 497, /* VAR_HTTP_USER_AGENT */ - VAR_TRUST_ANCHOR_SIGNALING = 498, /* VAR_TRUST_ANCHOR_SIGNALING */ - VAR_AGGRESSIVE_NSEC = 499, /* VAR_AGGRESSIVE_NSEC */ - VAR_USE_SYSTEMD = 500, /* VAR_USE_SYSTEMD */ - VAR_SHM_ENABLE = 501, /* VAR_SHM_ENABLE */ - VAR_SHM_KEY = 502, /* VAR_SHM_KEY */ - VAR_ROOT_KEY_SENTINEL = 503, /* VAR_ROOT_KEY_SENTINEL */ - VAR_DNSCRYPT = 504, /* VAR_DNSCRYPT */ - VAR_DNSCRYPT_ENABLE = 505, /* VAR_DNSCRYPT_ENABLE */ - VAR_DNSCRYPT_PORT = 506, /* VAR_DNSCRYPT_PORT */ - VAR_DNSCRYPT_PROVIDER = 507, /* VAR_DNSCRYPT_PROVIDER */ - VAR_DNSCRYPT_SECRET_KEY = 508, /* VAR_DNSCRYPT_SECRET_KEY */ - VAR_DNSCRYPT_PROVIDER_CERT = 509, /* VAR_DNSCRYPT_PROVIDER_CERT */ - VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 510, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 511, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ - VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 512, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ - VAR_DNSCRYPT_NONCE_CACHE_SIZE = 513, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ - VAR_DNSCRYPT_NONCE_CACHE_SLABS = 514, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ - VAR_PAD_RESPONSES = 515, /* VAR_PAD_RESPONSES */ - VAR_PAD_RESPONSES_BLOCK_SIZE = 516, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ - VAR_PAD_QUERIES = 517, /* VAR_PAD_QUERIES */ - VAR_PAD_QUERIES_BLOCK_SIZE = 518, /* VAR_PAD_QUERIES_BLOCK_SIZE */ - VAR_IPSECMOD_ENABLED = 519, /* VAR_IPSECMOD_ENABLED */ - VAR_IPSECMOD_HOOK = 520, /* VAR_IPSECMOD_HOOK */ - VAR_IPSECMOD_IGNORE_BOGUS = 521, /* VAR_IPSECMOD_IGNORE_BOGUS */ - VAR_IPSECMOD_MAX_TTL = 522, /* VAR_IPSECMOD_MAX_TTL */ - VAR_IPSECMOD_WHITELIST = 523, /* VAR_IPSECMOD_WHITELIST */ - VAR_IPSECMOD_STRICT = 524, /* VAR_IPSECMOD_STRICT */ - VAR_CACHEDB = 525, /* VAR_CACHEDB */ - VAR_CACHEDB_BACKEND = 526, /* VAR_CACHEDB_BACKEND */ - VAR_CACHEDB_SECRETSEED = 527, /* VAR_CACHEDB_SECRETSEED */ - VAR_CACHEDB_REDISHOST = 528, /* VAR_CACHEDB_REDISHOST */ - VAR_CACHEDB_REDISPORT = 529, /* VAR_CACHEDB_REDISPORT */ - VAR_CACHEDB_REDISTIMEOUT = 530, /* VAR_CACHEDB_REDISTIMEOUT */ - VAR_CACHEDB_REDISEXPIRERECORDS = 531, /* VAR_CACHEDB_REDISEXPIRERECORDS */ - VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 532, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ - VAR_FOR_UPSTREAM = 533, /* VAR_FOR_UPSTREAM */ - VAR_AUTH_ZONE = 534, /* VAR_AUTH_ZONE */ - VAR_ZONEFILE = 535, /* VAR_ZONEFILE */ - VAR_MASTER = 536, /* VAR_MASTER */ - VAR_URL = 537, /* VAR_URL */ - VAR_FOR_DOWNSTREAM = 538, /* VAR_FOR_DOWNSTREAM */ - VAR_FALLBACK_ENABLED = 539, /* VAR_FALLBACK_ENABLED */ - VAR_TLS_ADDITIONAL_PORT = 540, /* VAR_TLS_ADDITIONAL_PORT */ - VAR_LOW_RTT = 541, /* VAR_LOW_RTT */ - VAR_LOW_RTT_PERMIL = 542, /* VAR_LOW_RTT_PERMIL */ - VAR_FAST_SERVER_PERMIL = 543, /* VAR_FAST_SERVER_PERMIL */ - VAR_FAST_SERVER_NUM = 544, /* VAR_FAST_SERVER_NUM */ - VAR_ALLOW_NOTIFY = 545, /* VAR_ALLOW_NOTIFY */ - VAR_TLS_WIN_CERT = 546, /* VAR_TLS_WIN_CERT */ - VAR_TCP_CONNECTION_LIMIT = 547, /* VAR_TCP_CONNECTION_LIMIT */ - VAR_FORWARD_NO_CACHE = 548, /* VAR_FORWARD_NO_CACHE */ - VAR_STUB_NO_CACHE = 549, /* VAR_STUB_NO_CACHE */ - VAR_LOG_SERVFAIL = 550, /* VAR_LOG_SERVFAIL */ - VAR_DENY_ANY = 551, /* VAR_DENY_ANY */ - VAR_UNKNOWN_SERVER_TIME_LIMIT = 552, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - VAR_LOG_TAG_QUERYREPLY = 553, /* VAR_LOG_TAG_QUERYREPLY */ - VAR_STREAM_WAIT_SIZE = 554, /* VAR_STREAM_WAIT_SIZE */ - VAR_TLS_CIPHERS = 555, /* VAR_TLS_CIPHERS */ - VAR_TLS_CIPHERSUITES = 556, /* VAR_TLS_CIPHERSUITES */ - VAR_TLS_USE_SNI = 557, /* VAR_TLS_USE_SNI */ - VAR_IPSET = 558, /* VAR_IPSET */ - VAR_IPSET_NAME_V4 = 559, /* VAR_IPSET_NAME_V4 */ - VAR_IPSET_NAME_V6 = 560, /* VAR_IPSET_NAME_V6 */ - VAR_TLS_SESSION_TICKET_KEYS = 561, /* VAR_TLS_SESSION_TICKET_KEYS */ - VAR_RPZ = 562, /* VAR_RPZ */ - VAR_TAGS = 563, /* VAR_TAGS */ - VAR_RPZ_ACTION_OVERRIDE = 564, /* VAR_RPZ_ACTION_OVERRIDE */ - VAR_RPZ_CNAME_OVERRIDE = 565, /* VAR_RPZ_CNAME_OVERRIDE */ - VAR_RPZ_LOG = 566, /* VAR_RPZ_LOG */ - VAR_RPZ_LOG_NAME = 567, /* VAR_RPZ_LOG_NAME */ - VAR_DYNLIB = 568, /* VAR_DYNLIB */ - VAR_DYNLIB_FILE = 569, /* VAR_DYNLIB_FILE */ - VAR_EDNS_CLIENT_STRING = 570, /* VAR_EDNS_CLIENT_STRING */ - VAR_EDNS_CLIENT_STRING_OPCODE = 571, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - VAR_NSID = 572, /* VAR_NSID */ - VAR_ZONEMD_PERMISSIVE_MODE = 573, /* VAR_ZONEMD_PERMISSIVE_MODE */ - VAR_ZONEMD_CHECK = 574, /* VAR_ZONEMD_CHECK */ - VAR_ZONEMD_REJECT_ABSENCE = 575 /* VAR_ZONEMD_REJECT_ABSENCE */ + VAR_IP_RATELIMIT_BACKOFF = 461, /* VAR_IP_RATELIMIT_BACKOFF */ + VAR_RATELIMIT_BACKOFF = 462, /* VAR_RATELIMIT_BACKOFF */ + VAR_SEND_CLIENT_SUBNET = 463, /* VAR_SEND_CLIENT_SUBNET */ + VAR_CLIENT_SUBNET_ZONE = 464, /* VAR_CLIENT_SUBNET_ZONE */ + VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 465, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ + VAR_CLIENT_SUBNET_OPCODE = 466, /* VAR_CLIENT_SUBNET_OPCODE */ + VAR_MAX_CLIENT_SUBNET_IPV4 = 467, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ + VAR_MAX_CLIENT_SUBNET_IPV6 = 468, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ + VAR_MIN_CLIENT_SUBNET_IPV4 = 469, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ + VAR_MIN_CLIENT_SUBNET_IPV6 = 470, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ + VAR_MAX_ECS_TREE_SIZE_IPV4 = 471, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ + VAR_MAX_ECS_TREE_SIZE_IPV6 = 472, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ + VAR_CAPS_WHITELIST = 473, /* VAR_CAPS_WHITELIST */ + VAR_CACHE_MAX_NEGATIVE_TTL = 474, /* VAR_CACHE_MAX_NEGATIVE_TTL */ + VAR_PERMIT_SMALL_HOLDDOWN = 475, /* VAR_PERMIT_SMALL_HOLDDOWN */ + VAR_QNAME_MINIMISATION = 476, /* VAR_QNAME_MINIMISATION */ + VAR_QNAME_MINIMISATION_STRICT = 477, /* VAR_QNAME_MINIMISATION_STRICT */ + VAR_IP_FREEBIND = 478, /* VAR_IP_FREEBIND */ + VAR_DEFINE_TAG = 479, /* VAR_DEFINE_TAG */ + VAR_LOCAL_ZONE_TAG = 480, /* VAR_LOCAL_ZONE_TAG */ + VAR_ACCESS_CONTROL_TAG = 481, /* VAR_ACCESS_CONTROL_TAG */ + VAR_LOCAL_ZONE_OVERRIDE = 482, /* VAR_LOCAL_ZONE_OVERRIDE */ + VAR_ACCESS_CONTROL_TAG_ACTION = 483, /* VAR_ACCESS_CONTROL_TAG_ACTION */ + VAR_ACCESS_CONTROL_TAG_DATA = 484, /* VAR_ACCESS_CONTROL_TAG_DATA */ + VAR_VIEW = 485, /* VAR_VIEW */ + VAR_ACCESS_CONTROL_VIEW = 486, /* VAR_ACCESS_CONTROL_VIEW */ + VAR_VIEW_FIRST = 487, /* VAR_VIEW_FIRST */ + VAR_SERVE_EXPIRED = 488, /* VAR_SERVE_EXPIRED */ + VAR_SERVE_EXPIRED_TTL = 489, /* VAR_SERVE_EXPIRED_TTL */ + VAR_SERVE_EXPIRED_TTL_RESET = 490, /* VAR_SERVE_EXPIRED_TTL_RESET */ + VAR_SERVE_EXPIRED_REPLY_TTL = 491, /* VAR_SERVE_EXPIRED_REPLY_TTL */ + VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 492, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ + VAR_SERVE_ORIGINAL_TTL = 493, /* VAR_SERVE_ORIGINAL_TTL */ + VAR_FAKE_DSA = 494, /* VAR_FAKE_DSA */ + VAR_FAKE_SHA1 = 495, /* VAR_FAKE_SHA1 */ + VAR_LOG_IDENTITY = 496, /* VAR_LOG_IDENTITY */ + VAR_HIDE_TRUSTANCHOR = 497, /* VAR_HIDE_TRUSTANCHOR */ + VAR_HIDE_HTTP_USER_AGENT = 498, /* VAR_HIDE_HTTP_USER_AGENT */ + VAR_HTTP_USER_AGENT = 499, /* VAR_HTTP_USER_AGENT */ + VAR_TRUST_ANCHOR_SIGNALING = 500, /* VAR_TRUST_ANCHOR_SIGNALING */ + VAR_AGGRESSIVE_NSEC = 501, /* VAR_AGGRESSIVE_NSEC */ + VAR_USE_SYSTEMD = 502, /* VAR_USE_SYSTEMD */ + VAR_SHM_ENABLE = 503, /* VAR_SHM_ENABLE */ + VAR_SHM_KEY = 504, /* VAR_SHM_KEY */ + VAR_ROOT_KEY_SENTINEL = 505, /* VAR_ROOT_KEY_SENTINEL */ + VAR_DNSCRYPT = 506, /* VAR_DNSCRYPT */ + VAR_DNSCRYPT_ENABLE = 507, /* VAR_DNSCRYPT_ENABLE */ + VAR_DNSCRYPT_PORT = 508, /* VAR_DNSCRYPT_PORT */ + VAR_DNSCRYPT_PROVIDER = 509, /* VAR_DNSCRYPT_PROVIDER */ + VAR_DNSCRYPT_SECRET_KEY = 510, /* VAR_DNSCRYPT_SECRET_KEY */ + VAR_DNSCRYPT_PROVIDER_CERT = 511, /* VAR_DNSCRYPT_PROVIDER_CERT */ + VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 512, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 513, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 514, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ + VAR_DNSCRYPT_NONCE_CACHE_SIZE = 515, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ + VAR_DNSCRYPT_NONCE_CACHE_SLABS = 516, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ + VAR_PAD_RESPONSES = 517, /* VAR_PAD_RESPONSES */ + VAR_PAD_RESPONSES_BLOCK_SIZE = 518, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ + VAR_PAD_QUERIES = 519, /* VAR_PAD_QUERIES */ + VAR_PAD_QUERIES_BLOCK_SIZE = 520, /* VAR_PAD_QUERIES_BLOCK_SIZE */ + VAR_IPSECMOD_ENABLED = 521, /* VAR_IPSECMOD_ENABLED */ + VAR_IPSECMOD_HOOK = 522, /* VAR_IPSECMOD_HOOK */ + VAR_IPSECMOD_IGNORE_BOGUS = 523, /* VAR_IPSECMOD_IGNORE_BOGUS */ + VAR_IPSECMOD_MAX_TTL = 524, /* VAR_IPSECMOD_MAX_TTL */ + VAR_IPSECMOD_WHITELIST = 525, /* VAR_IPSECMOD_WHITELIST */ + VAR_IPSECMOD_STRICT = 526, /* VAR_IPSECMOD_STRICT */ + VAR_CACHEDB = 527, /* VAR_CACHEDB */ + VAR_CACHEDB_BACKEND = 528, /* VAR_CACHEDB_BACKEND */ + VAR_CACHEDB_SECRETSEED = 529, /* VAR_CACHEDB_SECRETSEED */ + VAR_CACHEDB_REDISHOST = 530, /* VAR_CACHEDB_REDISHOST */ + VAR_CACHEDB_REDISPORT = 531, /* VAR_CACHEDB_REDISPORT */ + VAR_CACHEDB_REDISTIMEOUT = 532, /* VAR_CACHEDB_REDISTIMEOUT */ + VAR_CACHEDB_REDISEXPIRERECORDS = 533, /* VAR_CACHEDB_REDISEXPIRERECORDS */ + VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 534, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ + VAR_FOR_UPSTREAM = 535, /* VAR_FOR_UPSTREAM */ + VAR_AUTH_ZONE = 536, /* VAR_AUTH_ZONE */ + VAR_ZONEFILE = 537, /* VAR_ZONEFILE */ + VAR_MASTER = 538, /* VAR_MASTER */ + VAR_URL = 539, /* VAR_URL */ + VAR_FOR_DOWNSTREAM = 540, /* VAR_FOR_DOWNSTREAM */ + VAR_FALLBACK_ENABLED = 541, /* VAR_FALLBACK_ENABLED */ + VAR_TLS_ADDITIONAL_PORT = 542, /* VAR_TLS_ADDITIONAL_PORT */ + VAR_LOW_RTT = 543, /* VAR_LOW_RTT */ + VAR_LOW_RTT_PERMIL = 544, /* VAR_LOW_RTT_PERMIL */ + VAR_FAST_SERVER_PERMIL = 545, /* VAR_FAST_SERVER_PERMIL */ + VAR_FAST_SERVER_NUM = 546, /* VAR_FAST_SERVER_NUM */ + VAR_ALLOW_NOTIFY = 547, /* VAR_ALLOW_NOTIFY */ + VAR_TLS_WIN_CERT = 548, /* VAR_TLS_WIN_CERT */ + VAR_TCP_CONNECTION_LIMIT = 549, /* VAR_TCP_CONNECTION_LIMIT */ + VAR_FORWARD_NO_CACHE = 550, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 551, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 552, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 553, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 554, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 555, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 556, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 557, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 558, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 559, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 560, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 561, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 562, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 563, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 564, /* VAR_RPZ */ + VAR_TAGS = 565, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 566, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 567, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 568, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 569, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 570, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 571, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 572, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 573, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 574, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 575, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_CHECK = 576, /* VAR_ZONEMD_CHECK */ + VAR_ZONEMD_REJECT_ABSENCE = 577, /* VAR_ZONEMD_REJECT_ABSENCE */ + VAR_RPZ_SIGNAL_NXDOMAIN_RA = 578 /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -582,121 +585,124 @@ extern int yydebug; #define VAR_RATELIMIT_BELOW_DOMAIN 458 #define VAR_IP_RATELIMIT_FACTOR 459 #define VAR_RATELIMIT_FACTOR 460 -#define VAR_SEND_CLIENT_SUBNET 461 -#define VAR_CLIENT_SUBNET_ZONE 462 -#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 463 -#define VAR_CLIENT_SUBNET_OPCODE 464 -#define VAR_MAX_CLIENT_SUBNET_IPV4 465 -#define VAR_MAX_CLIENT_SUBNET_IPV6 466 -#define VAR_MIN_CLIENT_SUBNET_IPV4 467 -#define VAR_MIN_CLIENT_SUBNET_IPV6 468 -#define VAR_MAX_ECS_TREE_SIZE_IPV4 469 -#define VAR_MAX_ECS_TREE_SIZE_IPV6 470 -#define VAR_CAPS_WHITELIST 471 -#define VAR_CACHE_MAX_NEGATIVE_TTL 472 -#define VAR_PERMIT_SMALL_HOLDDOWN 473 -#define VAR_QNAME_MINIMISATION 474 -#define VAR_QNAME_MINIMISATION_STRICT 475 -#define VAR_IP_FREEBIND 476 -#define VAR_DEFINE_TAG 477 -#define VAR_LOCAL_ZONE_TAG 478 -#define VAR_ACCESS_CONTROL_TAG 479 -#define VAR_LOCAL_ZONE_OVERRIDE 480 -#define VAR_ACCESS_CONTROL_TAG_ACTION 481 -#define VAR_ACCESS_CONTROL_TAG_DATA 482 -#define VAR_VIEW 483 -#define VAR_ACCESS_CONTROL_VIEW 484 -#define VAR_VIEW_FIRST 485 -#define VAR_SERVE_EXPIRED 486 -#define VAR_SERVE_EXPIRED_TTL 487 -#define VAR_SERVE_EXPIRED_TTL_RESET 488 -#define VAR_SERVE_EXPIRED_REPLY_TTL 489 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 490 -#define VAR_SERVE_ORIGINAL_TTL 491 -#define VAR_FAKE_DSA 492 -#define VAR_FAKE_SHA1 493 -#define VAR_LOG_IDENTITY 494 -#define VAR_HIDE_TRUSTANCHOR 495 -#define VAR_HIDE_HTTP_USER_AGENT 496 -#define VAR_HTTP_USER_AGENT 497 -#define VAR_TRUST_ANCHOR_SIGNALING 498 -#define VAR_AGGRESSIVE_NSEC 499 -#define VAR_USE_SYSTEMD 500 -#define VAR_SHM_ENABLE 501 -#define VAR_SHM_KEY 502 -#define VAR_ROOT_KEY_SENTINEL 503 -#define VAR_DNSCRYPT 504 -#define VAR_DNSCRYPT_ENABLE 505 -#define VAR_DNSCRYPT_PORT 506 -#define VAR_DNSCRYPT_PROVIDER 507 -#define VAR_DNSCRYPT_SECRET_KEY 508 -#define VAR_DNSCRYPT_PROVIDER_CERT 509 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 510 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 511 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 512 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 513 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 514 -#define VAR_PAD_RESPONSES 515 -#define VAR_PAD_RESPONSES_BLOCK_SIZE 516 -#define VAR_PAD_QUERIES 517 -#define VAR_PAD_QUERIES_BLOCK_SIZE 518 -#define VAR_IPSECMOD_ENABLED 519 -#define VAR_IPSECMOD_HOOK 520 -#define VAR_IPSECMOD_IGNORE_BOGUS 521 -#define VAR_IPSECMOD_MAX_TTL 522 -#define VAR_IPSECMOD_WHITELIST 523 -#define VAR_IPSECMOD_STRICT 524 -#define VAR_CACHEDB 525 -#define VAR_CACHEDB_BACKEND 526 -#define VAR_CACHEDB_SECRETSEED 527 -#define VAR_CACHEDB_REDISHOST 528 -#define VAR_CACHEDB_REDISPORT 529 -#define VAR_CACHEDB_REDISTIMEOUT 530 -#define VAR_CACHEDB_REDISEXPIRERECORDS 531 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 532 -#define VAR_FOR_UPSTREAM 533 -#define VAR_AUTH_ZONE 534 -#define VAR_ZONEFILE 535 -#define VAR_MASTER 536 -#define VAR_URL 537 -#define VAR_FOR_DOWNSTREAM 538 -#define VAR_FALLBACK_ENABLED 539 -#define VAR_TLS_ADDITIONAL_PORT 540 -#define VAR_LOW_RTT 541 -#define VAR_LOW_RTT_PERMIL 542 -#define VAR_FAST_SERVER_PERMIL 543 -#define VAR_FAST_SERVER_NUM 544 -#define VAR_ALLOW_NOTIFY 545 -#define VAR_TLS_WIN_CERT 546 -#define VAR_TCP_CONNECTION_LIMIT 547 -#define VAR_FORWARD_NO_CACHE 548 -#define VAR_STUB_NO_CACHE 549 -#define VAR_LOG_SERVFAIL 550 -#define VAR_DENY_ANY 551 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 552 -#define VAR_LOG_TAG_QUERYREPLY 553 -#define VAR_STREAM_WAIT_SIZE 554 -#define VAR_TLS_CIPHERS 555 -#define VAR_TLS_CIPHERSUITES 556 -#define VAR_TLS_USE_SNI 557 -#define VAR_IPSET 558 -#define VAR_IPSET_NAME_V4 559 -#define VAR_IPSET_NAME_V6 560 -#define VAR_TLS_SESSION_TICKET_KEYS 561 -#define VAR_RPZ 562 -#define VAR_TAGS 563 -#define VAR_RPZ_ACTION_OVERRIDE 564 -#define VAR_RPZ_CNAME_OVERRIDE 565 -#define VAR_RPZ_LOG 566 -#define VAR_RPZ_LOG_NAME 567 -#define VAR_DYNLIB 568 -#define VAR_DYNLIB_FILE 569 -#define VAR_EDNS_CLIENT_STRING 570 -#define VAR_EDNS_CLIENT_STRING_OPCODE 571 -#define VAR_NSID 572 -#define VAR_ZONEMD_PERMISSIVE_MODE 573 -#define VAR_ZONEMD_CHECK 574 -#define VAR_ZONEMD_REJECT_ABSENCE 575 +#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_SERVE_ORIGINAL_TTL 493 +#define VAR_FAKE_DSA 494 +#define VAR_FAKE_SHA1 495 +#define VAR_LOG_IDENTITY 496 +#define VAR_HIDE_TRUSTANCHOR 497 +#define VAR_HIDE_HTTP_USER_AGENT 498 +#define VAR_HTTP_USER_AGENT 499 +#define VAR_TRUST_ANCHOR_SIGNALING 500 +#define VAR_AGGRESSIVE_NSEC 501 +#define VAR_USE_SYSTEMD 502 +#define VAR_SHM_ENABLE 503 +#define VAR_SHM_KEY 504 +#define VAR_ROOT_KEY_SENTINEL 505 +#define VAR_DNSCRYPT 506 +#define VAR_DNSCRYPT_ENABLE 507 +#define VAR_DNSCRYPT_PORT 508 +#define VAR_DNSCRYPT_PROVIDER 509 +#define VAR_DNSCRYPT_SECRET_KEY 510 +#define VAR_DNSCRYPT_PROVIDER_CERT 511 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 512 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 513 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 514 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 515 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 516 +#define VAR_PAD_RESPONSES 517 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 518 +#define VAR_PAD_QUERIES 519 +#define VAR_PAD_QUERIES_BLOCK_SIZE 520 +#define VAR_IPSECMOD_ENABLED 521 +#define VAR_IPSECMOD_HOOK 522 +#define VAR_IPSECMOD_IGNORE_BOGUS 523 +#define VAR_IPSECMOD_MAX_TTL 524 +#define VAR_IPSECMOD_WHITELIST 525 +#define VAR_IPSECMOD_STRICT 526 +#define VAR_CACHEDB 527 +#define VAR_CACHEDB_BACKEND 528 +#define VAR_CACHEDB_SECRETSEED 529 +#define VAR_CACHEDB_REDISHOST 530 +#define VAR_CACHEDB_REDISPORT 531 +#define VAR_CACHEDB_REDISTIMEOUT 532 +#define VAR_CACHEDB_REDISEXPIRERECORDS 533 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 534 +#define VAR_FOR_UPSTREAM 535 +#define VAR_AUTH_ZONE 536 +#define VAR_ZONEFILE 537 +#define VAR_MASTER 538 +#define VAR_URL 539 +#define VAR_FOR_DOWNSTREAM 540 +#define VAR_FALLBACK_ENABLED 541 +#define VAR_TLS_ADDITIONAL_PORT 542 +#define VAR_LOW_RTT 543 +#define VAR_LOW_RTT_PERMIL 544 +#define VAR_FAST_SERVER_PERMIL 545 +#define VAR_FAST_SERVER_NUM 546 +#define VAR_ALLOW_NOTIFY 547 +#define VAR_TLS_WIN_CERT 548 +#define VAR_TCP_CONNECTION_LIMIT 549 +#define VAR_FORWARD_NO_CACHE 550 +#define VAR_STUB_NO_CACHE 551 +#define VAR_LOG_SERVFAIL 552 +#define VAR_DENY_ANY 553 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 554 +#define VAR_LOG_TAG_QUERYREPLY 555 +#define VAR_STREAM_WAIT_SIZE 556 +#define VAR_TLS_CIPHERS 557 +#define VAR_TLS_CIPHERSUITES 558 +#define VAR_TLS_USE_SNI 559 +#define VAR_IPSET 560 +#define VAR_IPSET_NAME_V4 561 +#define VAR_IPSET_NAME_V6 562 +#define VAR_TLS_SESSION_TICKET_KEYS 563 +#define VAR_RPZ 564 +#define VAR_TAGS 565 +#define VAR_RPZ_ACTION_OVERRIDE 566 +#define VAR_RPZ_CNAME_OVERRIDE 567 +#define VAR_RPZ_LOG 568 +#define VAR_RPZ_LOG_NAME 569 +#define VAR_DYNLIB 570 +#define VAR_DYNLIB_FILE 571 +#define VAR_EDNS_CLIENT_STRING 572 +#define VAR_EDNS_CLIENT_STRING_OPCODE 573 +#define VAR_NSID 574 +#define VAR_ZONEMD_PERMISSIVE_MODE 575 +#define VAR_ZONEMD_CHECK 576 +#define VAR_ZONEMD_REJECT_ABSENCE 577 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 578 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -706,7 +712,7 @@ union YYSTYPE char* str; -#line 710 "util/configparser.h" +#line 716 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 1daf853d5749..d4f965f94465 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -142,6 +142,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_OUTBOUND_MSG_RETRY %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN %token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR +%token VAR_IP_RATELIMIT_BACKOFF VAR_RATELIMIT_BACKOFF %token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE %token VAR_CLIENT_SUBNET_ALWAYS_FORWARD VAR_CLIENT_SUBNET_OPCODE %token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6 @@ -187,6 +188,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING %token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID %token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_CHECK VAR_ZONEMD_REJECT_ABSENCE +%token VAR_RPZ_SIGNAL_NXDOMAIN_RA %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -271,7 +273,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_ip_ratelimit_size | server_ratelimit_size | server_ratelimit_for_domain | server_ratelimit_below_domain | server_ratelimit_factor | - server_ip_ratelimit_factor | server_outbound_msg_retry | + server_ip_ratelimit_factor | server_ratelimit_backoff | + server_ip_ratelimit_backoff | server_outbound_msg_retry | server_send_client_subnet | server_client_subnet_zone | server_client_subnet_always_forward | server_client_subnet_opcode | server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 | @@ -455,6 +458,15 @@ rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG cfg_parser->cfg->auths->rpz_log_name = $2; } ; +rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG + { + OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp($2, "yes")==0); + free($2); + } + ; rpzstart: VAR_RPZ { @@ -478,7 +490,7 @@ contents_rpz: contents_rpz content_rpz | ; content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | auth_allow_notify | rpz_action_override | rpz_cname_override | - rpz_log | rpz_log_name + rpz_log | rpz_log_name | rpz_signal_nxdomain_ra | auth_for_downstream ; server_num_threads: VAR_NUM_THREADS STRING_ARG { @@ -2494,6 +2506,26 @@ server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG free($2); } ; +server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG + { + OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ip_ratelimit_backoff = + (strcmp($2, "yes")==0); + free($2); + } + ; +server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG + { + OUTYY(("P(server_ratelimit_backoff:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->ratelimit_backoff = + (strcmp($2, "yes")==0); + free($2); + } + ; server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG { OUTYY(("P(server_outbound_msg_retry:%s)\n", $2)); diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index f8dac65c59a0..05a22d402ee1 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -138,6 +138,7 @@ fptr_whitelist_comm_timer(void (*fptr)(void*)) else if(fptr == &auth_xfer_probe_timer_callback) return 1; else if(fptr == &auth_xfer_transfer_timer_callback) return 1; else if(fptr == &mesh_serve_expired_callback) return 1; + else if(fptr == &serviced_timer_cb) return 1; #ifdef USE_DNSTAP else if(fptr == &mq_wakeup_cb) return 1; #endif @@ -334,9 +335,10 @@ fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr) int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)( struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, - int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct module_qstate* q)) + int nocaps, int check_ratelimit, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, + int ssl_upstream, char* tls_auth_name, struct module_qstate* q, + int* was_ratelimited)) { if(fptr == &worker_send_query) return 1; else if(fptr == &libworker_send_query) return 1; diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h index a5470992550f..a0d9867554b5 100644 --- a/util/fptr_wlist.h +++ b/util/fptr_wlist.h @@ -211,9 +211,10 @@ int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr); */ int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)( struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, - int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char* tls_auth_name, - struct module_qstate* q)); + int nocaps, int check_ratelimit, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, + int ssl_upstream, char* tls_auth_name, struct module_qstate* q, + int* was_ratelimited)); /** * Check function pointer whitelist for module_env detach_subs callback values. diff --git a/util/iana_ports.inc b/util/iana_ports.inc index 9183c3987292..c7662dc62fe3 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -3784,6 +3784,7 @@ 4308, 4309, 4310, +4319, 4320, 4321, 4322, @@ -4054,7 +4055,6 @@ 5026, 5027, 5029, -5030, 5031, 5042, 5043, diff --git a/util/module.h b/util/module.h index c6b7e573ce00..7a548003397a 100644 --- a/util/module.h +++ b/util/module.h @@ -350,6 +350,7 @@ struct module_env { * EDNS, the answer is likely to be useless for this domain. * @param nocaps: do not use caps_for_id, use the qname as given. * (ignored if caps_for_id is disabled). + * @param check_ratelimit: if set, will check ratelimit before sending out. * @param addr: where to. * @param addrlen: length of addr. * @param zone: delegation point name. @@ -359,6 +360,8 @@ struct module_env { * @param tls_auth_name: if ssl_upstream, use this name with TLS * authentication. * @param q: which query state to reactivate upon return. + * @param was_ratelimited: it will signal back if the query failed to pass the + * ratelimit check. * @return: false on failure (memory or socket related). no query was * sent. Or returns an outbound entry with qsent and qstate set. * This outbound_entry will be used on later module invocations @@ -366,9 +369,10 @@ struct module_env { */ struct outbound_entry* (*send_query)(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, + int check_ratelimit, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream, int ssl_upstream, - char* tls_auth_name, struct module_qstate* q); + char* tls_auth_name, struct module_qstate* q, int* was_ratelimited); /** * Detach-subqueries. diff --git a/util/net_help.c b/util/net_help.c index d63fccd55ca2..8bef5689050e 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -44,6 +44,9 @@ #ifdef HAVE_NET_IF_H #include #endif +#ifdef HAVE_NETIOAPI_H +#include +#endif #include "util/net_help.h" #include "util/log.h" #include "util/data/dname.h" @@ -52,6 +55,7 @@ #include "util/config_file.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" +#include "sldns/str2wire.h" #include #ifdef HAVE_OPENSSL_SSL_H #include @@ -476,6 +480,42 @@ int authextstrtoaddr(char* str, struct sockaddr_storage* addr, return ipstrtoaddr(str, port, addr, addrlen); } +uint8_t* authextstrtodname(char* str, int* port, char** auth_name) +{ + char* s; + uint8_t* dname; + size_t dname_len; + *port = UNBOUND_DNS_PORT; + *auth_name = NULL; + if((s=strchr(str, '@'))) { + char* hash = strchr(s+1, '#'); + if(hash) { + *auth_name = hash+1; + } else { + *auth_name = NULL; + } + *port = atoi(s+1); + if(*port == 0) { + if(!hash && strcmp(s+1,"0")!=0) + return 0; + if(hash && strncmp(s+1,"0#",2)!=0) + return 0; + } + *s = 0; + dname = sldns_str2wire_dname(str, &dname_len); + *s = '@'; + } else if((s=strchr(str, '#'))) { + *port = UNBOUND_DNS_OVER_TLS_PORT; + *auth_name = s+1; + *s = 0; + dname = sldns_str2wire_dname(str, &dname_len); + *s = '#'; + } else { + dname = sldns_str2wire_dname(str, &dname_len); + } + return dname; +} + /** store port number into sockaddr structure */ void sockaddr_store_port(struct sockaddr_storage* addr, socklen_t addrlen, int port) diff --git a/util/net_help.h b/util/net_help.h index 79835270c477..4dd398460294 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -210,17 +210,30 @@ int netblockstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, /** * Convert address string, with "@port" appendix, to sockaddr. * It can also have an "#tls-auth-name" appendix (after the port). - * The returned tls-auth-name string is a pointer into the input string. - * Uses DNS port by default. + * The returned auth_name string is a pointer into the input string. + * Uses DNS port by default; TLS port when a "#tls-auth-name" is configured. * @param str: the string * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @param auth_name: returned pointer to tls_auth_name, or NULL if none. * @return 0 on error. */ -int authextstrtoaddr(char* str, struct sockaddr_storage* addr, +int authextstrtoaddr(char* str, struct sockaddr_storage* addr, socklen_t* addrlen, char** auth_name); +/** + * Convert domain string, with "@port" appendix, to dname. + * It can also have an "#tls-auth-name" appendix (after the port). + * The return port is the parsed port. + * Uses DNS port by default; TLS port when a "#tls-auth-name" is configured. + * The returned auth_name string is a pointer into the input string. + * @param str: the string + * @param port: pointer to be assigned the parsed port value. + * @param auth_name: returned pointer to tls_auth_name, or NULL if none. + * @return pointer to the dname. + */ +uint8_t* authextstrtodname(char* str, int* port, char** auth_name); + /** * Store port number into sockaddr structure * @param addr: sockaddr structure, ip4 or ip6. diff --git a/util/netevent.c b/util/netevent.c index 595e5dc80516..b9b7230e41ae 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1146,6 +1146,8 @@ reclaim_tcp_handler(struct comm_point* c) } c->tcp_more_read_again = NULL; c->tcp_more_write_again = NULL; + c->tcp_byte_count = 0; + sldns_buffer_clear(c->buffer); } /** do the callback when writing is done */ diff --git a/validator/val_utils.c b/validator/val_utils.c index dd8d320e515d..bb366d339400 100644 --- a/validator/val_utils.c +++ b/validator/val_utils.c @@ -767,15 +767,15 @@ val_dsset_isusable(struct ub_packed_rrset_key* ds_rrset) sldns_lookup_table *lt; char herr[64], aerr[64]; lt = sldns_lookup_by_id(sldns_hashes, - (int)ds_get_digest_algo(ds_rrset, i)); + (int)ds_get_digest_algo(ds_rrset, 0)); if(lt) snprintf(herr, sizeof(herr), "%s", lt->name); else snprintf(herr, sizeof(herr), "%d", - (int)ds_get_digest_algo(ds_rrset, i)); + (int)ds_get_digest_algo(ds_rrset, 0)); lt = sldns_lookup_by_id(sldns_algorithms, - (int)ds_get_key_algo(ds_rrset, i)); + (int)ds_get_key_algo(ds_rrset, 0)); if(lt) snprintf(aerr, sizeof(aerr), "%s", lt->name); else snprintf(aerr, sizeof(aerr), "%d", - (int)ds_get_key_algo(ds_rrset, i)); + (int)ds_get_key_algo(ds_rrset, 0)); verbose(VERB_ALGO, "DS unsupported, hash %s %s, " "key algorithm %s %s", herr, (ds_digest_algo_is_supported(ds_rrset, 0)?